ボタンの追加に関して

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
レアコイル

ボタンの追加に関して

#1

投稿記事 by レアコイル » 13年前

Visual StudioでMFCのGUIアプリケーションを作成しています。
新しくボタンを追加したいんですが、どうすればいいですか?
またボタンについてのプロパティでDefault Buttonという項目がありますが、これがTrueとFalseのボタンがあるのですが
どう違うのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#2

投稿記事 by softya(ソフト屋) » 13年前

レアコイル さんが書きました:Visual StudioでMFCのGUIアプリケーションを作成しています。
新しくボタンを追加したいんですが、どうすればいいですか?
またボタンについてのプロパティでDefault Buttonという項目がありますが、これがTrueとFalseのボタンがあるのですが
どう違うのでしょうか?
ライティングさんですよね?
今までの話の流れを追いかけやすくするため名前の統一をお願いしております。
http://dixq.net/board/board.html → フォーラムルールです。ひと通り目を通してください。

[勘違い]バグ さんも書いていますが、
ちゃんと書籍を読まれたほうが良いと思います。
そのほうが細かい所で悩まずに済むからです。

MFCに限定すれば、この本とかどうですか。
「かんたん Visual C++:書籍案内|技術評論社」
http://gihyo.jp/book/2011/978-4-7741-4664-5#toc

>新しくボタンを追加したいんですが、どうすればいいですか?

ダイアログのリソースエディタを開いている時にツールボックスと言うタブが左にあると思います。
※ 違う位置にあるかもしれません。探してみてください。
ツールボックスの中にボタンがあるのドラッグ&ドロップします。

>またボタンについてのプロパティでDefault Buttonという項目がありますが、これがTrueとFalseのボタンがあるのですがどう違うのでしょうか?

TRUEだとENTERキーが押された時に、そのボタンを押したことになります。FALSEのボタンはなりません。
複数TRUEが有った場合は、リソースの順番で決まります。
CTRL+Dでリソースの順番は表示されます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#3

投稿記事 by ライティング » 13年前

ありがとうございます。
ボタンの大きさや位置に関してはリソースの操作でいじるだけで
cppファイルやhファイルをいじらなくて良いのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#4

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:ありがとうございます。
ボタンの大きさや位置に関してはリソースの操作でいじるだけで
cppファイルやhファイルをいじらなくて良いのですか?
リソースだけで変更できますが、動的に変更するのならプログラムで書く必要があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#5

投稿記事 by ライティング » 13年前

soft屋さんありがとうございます。
トピック建てすぎて申し訳ありません。暫くこちらで質問させてもらいます。

本当に初歩的な質問で申し訳ないんですが、Hello Worldを出力するMFCを作りたいです。
どうすればいいですか?仕様はHelloボタン(大きさ適当)を押すとインラインウインドウが開き
そこにHello Worldと出力される簡単なプログラムです。もちろんコンソールではこれくらい作れ
る訳ですがVisual Studioという慣れない環境のせいか全くできません。
プロジェクト名はsampleとしてsample.cpp sampleDll.cpp...etcと色々cppファイルが作成されますが
sample.cppファイルのあちこちをいじってるんですが全然上手くいきません。というかビルドすら上手く
いきません。ご教授して頂けると嬉しいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#6

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:MFCアプリケーションの作成について勉強したいですが
ttp://gihyo.jp/book/2011/978-4-7741-4664-5#toc
この本で良いですか?
自分の開発環境はVisual Studio 2010 Professionalです。
この本はVisual C++となってますが環境が違うんでしょうか?
大丈夫でしょうか?
その本はVisual C++ 2010向けに書かれていますので、Visual Studio 2010 Professionalならジャストフィットです。
Visual Studio 2010にはいろいろな言語があるので、Visual C++ と書く時はVisual BasicやVisual C#と区別するために書きます。

サンプルコードのファイルも掲載されているのでダウンロードしてみてください。
ライティング さんが書きました:soft屋さんありがとうございます。
トピック建てすぎて申し訳ありません。暫くこちらで質問させてもらいます。

本当に初歩的な質問で申し訳ないんですが、Hello Worldを出力するMFCを作りたいです。
どうすればいいですか?仕様はHelloボタン(大きさ適当)を押すとインラインウインドウが開き
そこにHello Worldと出力される簡単なプログラムです。もちろんコンソールではこれくらい作れ
る訳ですがVisual Studioという慣れない環境のせいか全くできません。
プロジェクト名はsampleとしてsample.cpp sampleDll.cpp...etcと色々cppファイルが作成されますが
sample.cppファイルのあちこちをいじってるんですが全然上手くいきません。というかビルドすら上手く
いきません。ご教授して頂けると嬉しいです。
そういう人のためにも本を読んだほうが分かりやすいんですよ。
ちゃんと本に書いてあります。

GUIアプリはイベントドリブンですので、ボタンを押すとMFCの場合はダイアログクラスの特定のメソッドが呼び出されます。
これは自分で追加しないと行けません。
「MFC編 - ボタンの基本」 たぶん、VisualC++2005の画像だと思うので若干違うかもしれません。
http://www.g-ishihara.com/mfc_bt_01.htm
ここのページには色々サンプルが書いてあるので、これだけで解決するなら本は買わなくても良いですけどね。

それとsample.cppはアプリケーションクラスなので今回はいじる必要ありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#7

投稿記事 by ライティング » 13年前

ボタン追加によってHello Worldプログラムちゃんと実行できました。
ありがとうございます。ただMessageBoxというライブラリ関数が理解できません。
int a,b;a=b=20;a=a*b;
MessageBox(_T("%d\n",a));
と400を表示させたいのですが
ビルドエラーが出てしまいました。何故でしょう?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#8

投稿記事 by softya(ソフト屋) » 13年前

_T()はマクロであって関数ではありません。
そもそもUNICODE文字/マルチバイト文字切り替えのためのマクロなので、printfのような機能を期待してはいけません。
それとMessageBox()メソッドにも、printfのような機能はありません。
「CWnd::MessageBox」
http://msdn.microsoft.com/ja-jp/library ... .100).aspx

printfのような事をしたいなら、CString::Format()を使ってください。
「CStringT::Format (ATL/MFC)」
http://msdn.microsoft.com/ja-jp/library ... S.80).aspx
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#9

投稿記事 by ライティング » 13年前

ありがとうございます。
Format関数ですね。

void Cjpg2bmpDlg::OnBnClickedButton2()
{

CAtlString str;
float x=100.0;
str.Format(_T("Floating point: %.2f\n"), x);
_tprintf_s("%s", (LPCTSTR) str);


// TODO: ここにコントロール通知ハンドラー コードを追加します。
}

エラーです。
何故でしょうか?クリックされるとHelloWorldの代わりにxを表示させるプログラム
作ったんですが。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#10

投稿記事 by softya(ソフト屋) » 13年前

エラーが出たらCxxxxまで書いてくださいね。どういうエラーかわかりません。
それと
_tprintf_s("%s", (LPCTSTR) str);はMFCコンソールアプリの時の書き方です。
つまり、_tprintf_sはprintfのマイクロソフトの特殊な書き方でウィンドウアプリではないんです。
(LPCTSTR) strをMessageBoxの引数にしてください。

※ CAtlStringクラスではなく、CStringクラスなら通るかもしれません。ここらへんMSDNサイトの書き方悪いですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#11

投稿記事 by ライティング » 13年前

なるほどコンソール専用なんですかその改行のコードは。

とりあえずxを出力したい訳ですがそういった出力用の場所はエディタコードを新たに用意する
必要があるのでしょうか?この場合 OnBnClickedButton2(){}関数内にエディタ関数を書くのでしょうか?
全然分からないです。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ボタンの追加に関して

#12

投稿記事 by みけCAT » 13年前

実数はダメですが、整数ならwsprintfが使えるかもしれません。%sも大丈夫です。
MFCではない普通のWindowsのプログラムなら使えます。

コード:

TCHAR buf[1024];
int a,b;a=b=20;a=a*b;
wsprintf(buf,_T("%d\n"),a);
MessageBox(hWnd,buf,_T("test"),MB_OK | MB_ICONINFORMATION);
hWndはダイアログの親のウィンドウハンドルです。わからなければ0に変えてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#13

投稿記事 by softya(ソフト屋) » 13年前

みけCAT さんが書きました:実数はダメですが、整数ならwsprintfが使えるかもしれません。%sも大丈夫です。
MFCではない普通のWindowsのプログラムなら使えます。

コード:

TCHAR buf[1024];
int a,b;a=b=20;a=a*b;
wsprintf(buf,_T("%d\n"),a);
MessageBox(hWnd,buf,_T("test"),MB_OK | MB_ICONINFORMATION);
hWndはダイアログの親のウィンドウハンドルです。わからなければ0に変えてください。
それだとMFCクラス中だとエラーが出ます。
CWnd::MessageBox()メソッドがあるため
::MessageBox(hWnd,buf,_T("test"),MB_OK | MB_ICONINFORMATION);
と書くか
MessageBox(buf,_T("test"),MB_OK | MB_ICONINFORMATION);
としないとダメです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#14

投稿記事 by softya(ソフト屋) » 13年前

やっぱり、いっぱい聞かないと作れませんよね。
そういう意味では系統的に説明がある本を読んでもらって勉強した方が良いです。
掲示板で、全部答えるのは難しいですから。

この場合は、DDX/DDVと言うのを使うと便利です。
http://www.g-ishihara.com/mfc_dx_01.htm
このサイトの全部をひと通り読んでもらったほうが良いかもしれません。

こういう方法でダイアログに表示が出来ます。
「MFC編 - スタティックテキストの内容を動的に変更する」
http://www.g-ishihara.com/mfc_tc_01.htm

つまり、OnBnClickedButton2(){}で値を書き換える処理を書きます。

MFCのTIPS集も紹介しておきます。
「VC++,MFCでのプログラミングでのTips CRIMSON Systems」
http://www.crimson-systems.com/tips/index.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#15

投稿記事 by ライティング » 13年前

soft屋さんありがとうございます。
DDXってようはコンポーネントを変数として扱うっていうことですよね?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#16

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:soft屋さんありがとうございます。
DDXってようはコンポーネントを変数として扱うっていうことですよね?
そうですね。
大抵の操作は、これで行います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#17

投稿記事 by ライティング » 13年前

みけcatさんありがとうございます。soft屋さん今日は色々ありがとうございます。
サイトも複数教えてもらいとても助かりました。
これで今日は質問も終わり(俺が言ってすいません)なんですが
プロジェクトってUSBに保存して別のPCでも使えますかね?学校のPCで使いたいんですが。
そこには同じvisual studioの環境が入ってます。
後このサイトに関してですが今後質問するときユーザー名が入っている状態にしたいんですが無理ですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#18

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:みけcatさんありがとうございます。soft屋さん今日は色々ありがとうございます。
サイトも複数教えてもらいとても助かりました。
これで今日は質問も終わり(俺が言ってすいません)なんですが
プロジェクトってUSBに保存して別のPCでも使えますかね?学校のPCで使いたいんですが。
そこには同じvisual studioの環境が入ってます。
USBで持ち運べますよ。まぁ、余分なものを入れないと転送が楽になります
Debugフォルダとか、ipchとか色々と邪魔者が。
ライティング さんが書きました: 後このサイトに関してですが今後質問するときユーザー名が入っている状態にしたいんですが無理ですか?
カーソルを↓としたら使ったの出て来ません?
あるいは、右下のmixc++にユーザー登録して貰えばいちいち入力は不要です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Visual Studio2010 MFCアプリケーションについて

#19

投稿記事 by ライティング » 13年前

寝る前にすいません。
どうしても分からないことがありまして

エディットボックスのパラメタ変数についてhttp://www.g-ishihara.com/mfc_ed_01.htm
  ここでは例えばm_xvEditwがありますが、それに文字列を代入していますよね?
  例えば m_xvEditW = _T("文字列");などです。他にも
  m_xvEditW="abc";などと代入しても大丈夫な事が分かりました。
  しかし

  string s="abc";として
  m_xvEditW=s;

 とか

  stringstream ss;として
  m_xvEditW=ss.str();

  このような代入はできませんでした。文字列型(string型など)の変数をこのパラメタ変数に代入するにはどうし  たらいいですか?
  また逆にパラメタ変数を文字列型(string型など)変数に代入するにはどうしたらいいですか?

これらができないと、エディタボックスから文字を読み取って数値に変換したり、その数値を計算した結果を文  字に変換してエディタボックスに表示したりすることが出来ないので困ってしまいます。
  
 

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#20

投稿記事 by softya(ソフト屋) » 13年前

それは、つい最近の話題でも出ていたVC++の特性として気をつけないと行けないことです。
UNICODE/マルチバイト文字そして、オプションで切り替わるTCHARの扱いです。
「string strから_T(str)みたいにしてマルチバイト文字列(?)を作りたい • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/viewtopic.php?f=3&t=12953

このtstringを使ったほうが良いと思います。
stringstreamもtstringstreamを作って使ってください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#21

投稿記事 by ライティング » 13年前

ありがとうございます。
文字の違いによってそういう事に注意しないとだめなんですね。
ただまだ出来ない事があって
typedef basic_string<TCHAR> tstring;
tstring t(_T("test"));

二行目は書き換えできないプライベートなコンストラクタでしょうか?
三行目で
t(_T("paper"));

t="paper";

t.c_str()="paper";
としてもビルドエラーが出ます。
どうやったら代入できますか?

ライティング

Re: ボタンの追加に関して

#22

投稿記事 by ライティング » 13年前

すいません。一々聞きすぎかもしれません。
ちょっと自分で考えてみます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#23

投稿記事 by softya(ソフト屋) » 13年前

t(_T("paper"));やt.c_str()="paper";は文法的にやばいです。
t="paper";は惜しいと書いておきます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#24

投稿記事 by ライティング » 13年前

返信ありがとうございます。

tstringstream t;として
t.c_str()="paper";っておかしいですか?
c_str()はchar型の文字列を返す関数であって
データ構造ではないという事でしょうか?
初期化のときはt(_T("paper"))と代入できるなら
以降はどうやって代入できるんでしょう?
t=_T("paper")は良いでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#25

投稿記事 by softya(ソフト屋) » 13年前

c_str()は文字列(文字配列の先頭)を返しますが、constなので代入できるわけではないです。
="paper";は文字列ポインタへの代入ですから、代入先の型がそもそも違うわけです。

>初期化のときはt(_T("paper"))と代入できるなら

こっちは、コンストラクタの引数として扱われます。

>以降はどうやって代入できるんでしょう?
>t=_T("paper")は良いでしょうか?

こっちは=演算子がオーバーロードされているので大丈夫です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#26

投稿記事 by ライティング » 13年前

なるほど
ありがとうございます。
MFC難しいですね....
関数が多すぎます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#27

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:なるほど
ありがとうございます。
MFC難しいですね....
関数が多すぎます。
どちらか言うとMFCと言うよりC++の文法問題な気がしますが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ライティング

Re: ボタンの追加に関して

#28

投稿記事 by ライティング » 13年前

そうですね。
C++の文法をよく理解してないのかもしれません。
MFCはJDKと違ってコンポーネントのレイアウトを直感操作でできるので便利ですよね。
これからもっとMFCに詳しくなりたいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンの追加に関して

#29

投稿記事 by softya(ソフト屋) » 13年前

ライティング さんが書きました:そうですね。
C++の文法をよく理解してないのかもしれません。
MFCはJDKと違ってコンポーネントのレイアウトを直感操作でできるので便利ですよね。
これからもっとMFCに詳しくなりたいです。
MFCを使いこなすにはMSDNサイトを使いこなしましょう。
「MFC リファレンス」
http://msdn.microsoft.com/ja-jp/library ... .100).aspx
後何気にどのクラスの派生かを見れるクラス階層図は大事です。

あとダイアログとは違うドキュメントビュー構造とか。
「[連載! とことん VC++] 第 6 回 MFC アプリケーションの基本構造の再確認 ~ドキュメント/ビュー アーキテクチャ~ 言語: C++」
http://code.msdn.microsoft.com/VisualC-43c71460/
「[連載! とことん VC++] 第 7 回 MFC アプリケーションの基本構造の再確認 ~ドキュメント/ビューにおけるカスタマイズ~ 言語: C++」
http://code.msdn.microsoft.com/windowsd ... C-23226768

あと知っていると便利かも情報。
「Windowsプログラミング(MFC編)」
http://bluefish.orz.hm/sdoc/winprog_mfc.html
「VC++テクニックindex」
http://www.alpha-net.ne.jp/users2/uk413/vc/index.html
「Pu~::MFCの謎を追え!」
http://www.geocities.co.jp/Hollywood/2358/mfc1.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る