MFC
CMenu::GetSafeHmenuで、CMenuオブジェクトの持つメニューハンドルを取得する。CMenu クラス | Microsoft LearnCWinApp_.cppで、とする。 今度は、CFrameWnd::CreateにMAKEINTRESOURCE(IDM_MAINMENU)という形でメニュー名を指定する。 CFrameWnd_.cppで、と…
CWnd::DestroyWindowで、ウィンドウ自身を破棄する。CWnd クラス | Microsoft LearnMFCだけど、 ウィザードのMFCアプリじゃなくてWin32プロジェクトで。ウィザードのMFCアプリじゃなくてWin32プロジェクトで。 空プロジェクト空プロジェクト。 スタティック…
CDocManager::OnFileNewの中は何してるのか探索する。MFC Document/View documentation and enhancements - CodeProject NULLではないので、NULLではないので、 ここに来れる。ここに来れる。 ここでステップインして、 テンプレートリストが空か確認するが…
CWinApp::OnFileNewは、ファイルの新規作成を要求された時に呼ばれる。CWinApp クラス | Microsoft Learn メニューの新規作成のイベントハンドラを追加メニューの新規作成のイベントハンドラを追加。 COMMANDのCWinApp_Appで追加して編集COMMANDのCWinApp_Ap…
AfxFindMessageEntryでコマンドに対するハンドラを見つける。ウィンドウプロシージャまず、 ここでメッセージマップを取得。ここでメッセージマップを取得。 ここに来たら、ここに来たら、 メッセージはこれメッセージはこれ。 コードはこれ。コードはこれ。…
CCmdTarget::GetMessageMapも非公開だが、出てくるし、気になるので。CCmdTarget クラス | Microsoft Learn ここでステップインするとここでステップインすると、 BEGIN_MESSAGE_MAPのところにくるBEGIN_MESSAGE_MAPのところにくる。 ここで何度かステップイ…
_AfxDispatchCmdMsgは、非公開関数だが、一応中身見ていく。#pragma twice 119 Version 6.19 デバッグウィンドウがいっぱい 前回、ここまで来たので、ステップイン。前回、ここまで来たので、ステップイン。 中はこうなっている中はこうなっている。 渡され…
CCmdTarget::OnCmdMsgで、コマンドメッセージに対するハンドラの呼び出しが行われる模様。CCmdTarget クラス | Microsoft Learn以前も、CCmdTargetの項でやったが、今回はドキュメントビューアーキテクチャでどういう風に呼び出されるか見ていく。 まあ、前…
CWinApp::ProcessShellCommanで、rCmdInfoを元に指定されたアクションを実行する。CWinApp クラス | Microsoft Learnここからが本筋で、かなり複雑。 今回は引数をクリアに今回は引数をクリアに。 ここにブレークポイント貼ってここにブレークポイント貼って…
CWinApp::ParseCommandLineで、コマンドライン引数をパースしている。CWinApp クラス | Microsoft Learnプロジェクトのプロパティで、 コマンド引数をこのように設定コマンド引数をこのように設定。 ここで止めてステップインここで止めてステップイン。 こ…
CWnd::OnSizeイベントハンドラは、ウィンドウサイズが変更された時に来る。CWnd クラス | Microsoft LearnnTypeにイベントタイプ(最大化や最小化など)、cxに変更後の幅、cyに変更後の高さが渡される。 ダイアログベースだとリサイズできないので、Borderをサ…
CWnd::OnHScrollイベントハンドラを追加して、水平スクロールバーの動きも実装する。CWnd クラス | Microsoft Learn これを選択してこれを選択して、 ここに貼り付けるここに貼り付ける。 これでハンドラ追加これでハンドラ追加。 あとは、こうして、こう。 …
CStatic::SetBitmapで、スタティックコントロールにビットマップをセットする。CStatic クラス | Microsoft Docs resの下にbitmap1.bmpを置いて、resの下にbitmap1.bmpを置いて、 リソースリソース、 BitmapをインポートBitmapをインポート。 bitmap1.bmpをI…
HBITMAP演算子で、ロードされたビットマップのビットマップハンドルを取得できる。CBitmap クラス | Microsoft DocsCBitmapDlg.cppで、取得したhBitmapも表示する。 成功成功。 hBitmapの値はこれhBitmapの値はこれ。 で、ダイアログが出る。で、ダイアログ…
CBitmap::LoadBitmapで、登録済みビットマップリソースを読み込む。CBitmap クラス | Microsoft Docsビットマップファイルではなく、リソースとして登録したビットマップリソースなのがポイント。 (ビットマップファイルの場合は、ちょっと面倒くさい。) プ…
CStatic::Createで、スタティックコントロールのウィンドウを作成する。CStatic クラス | Microsoft DocsCStaticDlg.hで、CWndポインタのm_pStatic1、CStaticポインタのm_pStatic2を追加。 CStaticDlg.cppで、このように書く。 CStaticのCreateはリソースID…
CEdit::Createで、エディットコントロールのウィンドウを作成する。CEdit Class | Microsoft DocsCEditDlg.hで、CWndポインタのm_pEdit1、CEditポインタのm_pEdit2を追加。 CEditDlg.cppで、このように書く。 CEditのCreateはウィンドウ名も不要。 どちらも…
CButton::Createで、ボタンのウィンドウを作成する。 CButtonクラスのCreateなので、ウィンドウクラス名は不要。CButton クラス | Microsoft DocsCButtonDlg.hで、CWndのm_pButton1に加えて、CButtonのm_pButton2を追加。 CButtonDlg.cppでは、どちらもCreat…
CWnd::Createで、ウィンドウを作成する。 子コントロール(子ウィンドウ)を表示するのにも使う。CWnd クラス | Microsoft DocsCWndDlg.hに、CWndオブジェクトポインタm_pButton1を追加。 CWndDlg.cppで、Createに、"BUTTON"ウィンドウクラスと、BS_PUSHBUTTON…
ダイアログの初期化時、WM_INITDIALOGに対して呼ばれるのがCDialog::OnInitDialog。CDialog クラス | Microsoft Docsここで初期化をする。メッセージボックスで"CDialogDlg::OnInitDialog"と表示。 これが出てからこれが出てから、 ダイアログ表示ダイアログ…
ウィンドウが破棄された時に、CWnd::OnDestroyに来る。CWnd クラス | Microsoft Docsリソースエディタで、 WM_DESTROYの時のハンドラを追加する。WM_DESTROYの時のハンドラを追加する。 このOnDestroyに書く。このOnDestroyに書く。こう。 OKでもキャンセル…
CWnd::GetWindowTextは、CStringの参照を引数にとるオーバーロードメンバ関数があるので、TCHARバッファを用意しなくてもいい。CWnd クラス | Microsoft DocsCWndDlg.cppで、こう書く。 Button1押すと、Button1押すと、 こっちでも取れるこっちでも取れる。S…
CWnd::GetWindowTextで、テキストを取得する。CWnd クラス | Microsoft DocsCWndDlg.cppで、こう書く。 これでButton1を押すと、これでButton1を押すと、 こうなる。こうなる。Sample/mfc/CWnd/GetWindowText/src/CWnd at master · bg1bgst333/Sample · GitH…
CWnd::GetWindowTextLengthで、テキストの長さを取得する。CWnd クラス | Microsoft Docs エディットコントロールを追加エディットコントロールを追加。 CWndDlg.cppで、こう書く。 "ABCDE"と入力して、Button1を押すと、"ABCDE"と入力して、Button1を押すと…
CWnd::SetWindowTextで、テキストをセットする。CWnd クラス | Microsoft DocsCWndDlg.cppで、こうすると、 Button1を押すと、Button1を押すと、 "Clicked!"に変わる"Clicked!"に変わる。Sample/mfc/CWnd/SetWindowText/src/CWnd at master · bg1bgst333/Sam…
CWnd::GetDlgItemで、指定のリソースIDの子ウィンドウ(コントロール)オブジェクトポインタを取得する。CWnd クラス | Microsoft DocsWin32API版で取得したウィンドウハンドルと、こちらで取得したポインタのウィンドウハンドルが同じかどうか調べる。 ボタン…
CCommandLineInfoは、コマンドライン情報を持つクラス。CCommandLineInfo クラス | Microsoft DocsMFCのプロジェクトを作成したら、 CCommandLineInfoのところにブレークポイント貼っておくCCommandLineInfoのところにブレークポイント貼っておく。 実行して…
CDocTemplateは、ドキュメントテンプレートの基本抽象クラス。CDocTemplate クラス | Microsoft Docs今回は、前回素通りしたpTemplate->LoadTemplateを見ていこう。CDocTemplate クラス | Microsoft DocsCDocTemplate:: LoadTemplateというメンバ関数。ここ…
CDocManager::AddDocTemplateは、ドキュメントテンプレートを追加するメンバ関数。MFC Document/View documentation and enhancements - CodeProjectCDocManagerCDocManagerから開始。ここでステップイン。CWinApp::AddDocTemplateここにくる。ここまで進め…
CDocManagerは、ドキュメントテンプレートを管理しているようだが、どういう役割をしているか詳細はこれから調べていく。MFC Document/View documentation and enhancements - CodeProjectしかも、インターナルクラスなのか、MSDNやdocsのリファレンスにはな…