VC++超初心者です。今までVBでの開発をしていました。
Cは読める程度で、C++のオブジェクト指向の考え方は頭では分かっています。
試しにボタンをクリックするとスタティックテキスト(VBで言う所のラベル?)に文字を表示する、
という単純な物を作りたかったのですが、それすらさっぱりわかりません。
MFC AppWizard(exe)のダイアログベースから作ったのですが、
これではOKボタンをクリックすると画面消去されるのでここを改造しようと思いましたが、
それがどこに書かれているか分かりません。
クリック時処理はどこにあるんでしょうか?
レベルの低すぎる質問ですみません。
ども!おはつです けん★です
ボタンのクリックイベントは最初はどこにも記述されていないので、
ボタンをダブルクリックしてください。
するとメンバ関数の追加というのが出てきてそこで好きな関数名をつけると ファイル名Dlg.cppに
関数として追加されますので、そこに処理を記述してください。
お返事ありがとうございます。
確かにダブルクリックで関数は追加されましたが、デフォルトで「OKクリックで画面が消去される」という処理が
入ってますよね?これはどこに記述されているのでしょうか?
それは ファイル名.cppの
BOOL CMyファイル名App::InitInstance()
の中
if (nResponse == IDOK)
{
// TODO: ダイアログが <OK> で消された時のコードを
// 記述してください。
}
else if (nResponse == IDCANCEL)
{
// TODO: ダイアログが <キャンセル> で消された時のコードを
// 記述してください。
}
ここでやってますよ
MFCのソースでCDialog::OnOKを検索すれば分かると思いますが、そこでEndDialogをしています。
(実際はそのEndDialogでWin32APIのEndDialogを呼んでいます)
通常、「C:\Program Files\Microsoft Visual Studio\VC98\MFC\」に入っています。
みなさん、ご回答ありがとうございます。
OKボタンをクリックしてメンバ関数OnOKを作成するとこの関数内で「CDialog::OnOK()」を
呼び出す部分が追加されますが、このメンバ関数を追加しなくても(AppWizardで作成しただけでも)
実際はOKクリックでプログラムが終了しますよね?
けん★さんのご回答にあったInitInstance()の中だけではそのままでは何もせずに抜けてるのに
なぜ終了するのでしょうか?
またCDialog::OnOK()はDLGCORE.cppの関数ですが、プロジェクトに含まれていなくても呼び出せるのですか?
・・・こんなレベルの議論を延々としていても許されるのでしょうか?
もし許されるのならまた教えて下さい。
ども けん★です
新規作成時(AppWizard)には確かにOnOKメンバ関数がありませんが、
スケルトンがOKボタンとCANCELボタン押下時に自動的にCDialog::OnOK()を呼び出しているようです。
前記のInitInstance()は終了時の処理を書くところでした。勘違いしてました。申し訳ございませんでした。
OnOKは<afxwin.h>ファイルをincludeすることによって使用できるようになっています。
includeはスケルトン作成時に自動的に行われています
ありがとうございました。
自動でソースを作ってくれるのはありがたいですが、理解するのは難しい・・・。
一応OKクリックで画面消去せずにスタティックテキストに文字を表示、というのはできました。
これからもたびたびお世話になると思いますがよろしくお願いします。