A. メッセージ分類
- コマンドメッセージ:WM_COMMONDメニューハンドラ
- 標準メッセージ:[表示] - > [プロパティ] - >メッセージ
- 広告メッセージ:コントロールハンドラ
II。メニュー操作
メニュー操作のint型でのCMainFrame :: OnCreate関数(LPCREATESTRUCT lpCreateStruct)
1 // フラグ 2 // メニュー取得 3 // またはメインメニューを 4。 たCMenu MENU * = GetMenu(); 5は // 最初のサブメニューを取得し 6 たCMenu * FILEMENU =メニュー- > GetSubMenu(0 ); 7 // タグ"新規"、最初のインデックスであれば、MF_BYPOSITION 8。 fileMenu-> CheckMenuItem(0、MF_BYPOSITION | MF_CHECKED); 9 // "オン"フラグ、最初のIDであれば、MF_BYCOMMAND 10 fileMenu-> CheckMenuItem(ID_FILE_OPEN、 MF_BYCOMMAND | MF_CHECKED); 11 12 // デフォルトのアイテムは、太字は、メニュー項目は、デフォルトで設定 13 //FALSE:ID 14 // TRUE:位置 15 fileMenu-> SetDefaultItem(FALSE ID_FILE_SAVE); 16 // 淡色 17 //はm_bAutoMenuEnableを必要:: = FALSE CFrameWndのは、 18である fileMenu-> EnableMenuItem、(5 |、MF_BYPOSITION ; MF_DISABLED) 19。 20 // メニュー取り除く 21である SetMenu(NULL); 22である 23である // 負荷メニュー 24 たCMenuメニュー2; 25 menu2.LoadMenuW(IDR_MENU1); 26である SetMenu(&メニュー2); 27 // セパレータ 28 menu2.Detach()。
B、Aが強調表示されている更新プログラムをクリックしてください
1. Aのイベントハンドラを追加します。
// メニューの更新が自動的に更新され、フラグビットが 無効のCMainFrameを:: OnUpdateA(CCmdUI * pCmdUI) { // TODO:このコマンドは、ユーザ・インタフェース・ハンドラコードを更新追加 のIF(m_isUpdate == TRUE) { pCmdUI - > (有効TRUE); } 他{ pCmdUI - > イネーブル(FALSE); } }
2.Bは、イベントハンドラを追加します
1つの 空隙のCMainFrame :: ONB() 2 { 3。 // TODO:この加算コマンドハンドラコード 4 = M_isUpdate m_isUpdate;! // クリック更新フラグ 5 }
III。左のポップアップメニュー
1 空隙CMenuView :: OnLButtonDown(UINT nFlags、CPointポイント) 2 { 3。 // TODO:この追加メッセージハンドラコード、および/またはデフォルト値を呼び出す 。4を 5 // メニュー項目を作成する 。6 たCMenu MENU; 7 menu.LoadMenuW(IDR_MENU1 ); 8 //は、最初のサブメニューを取得します 。9 たCMenuサブメニュー* = menu.GetSubMenu(0 ); 10 。11 // コンバータ座標 12は ClientToScreen(&ポイント) 13である // ショートカットメニュー、右クリックメニューとしてサブメニュー 14 のサブメニュー- > TrackPopupMenu(TPM_LEFTALIGNの| TPM_LEFTBUTTON、 15 point.x、point.y、この); 16 17 のCView :: OnLButtonDown(nFlags、点)。 18 }
IV。動的更新ウィンドウアイコン
1.まず、クラスのCMainFrameにおける資源で輸入ICOアイコン、:公共CFrameWndのは、アイコンの配列を追加
2.タイマーのOnCreateを生成するハンドラを作成します。
1つの 空隙のCMainFrame ::のOnTimer(UINT_PTR nIDEvent) 2 { 3。 // TODO:この追加メッセージハンドラコード、および/またはデフォルト値を呼び出す 4。 静的 INT I = 0 ; 図5は、。 // ヘッダを修正 6。 SetClassLong(m_hWndを、GCL_HICON、( LONG)アイコン[I]); 7 I ++は、 8 IF == I(4。 ) 9。 I = 0 ; 10 CFrameWndの::のOnTimer(nIDEvent); 11 }