//-------------------------------------------------------------------------------- // //【メニューを消す】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// { // hWndはメインウィンドウのウィンドウハンドル SetMenu(hWnd, NULL) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // WM_CREATEハンドラ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if(CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1 ; : : // メニューを消す(破棄) SetMenu(NULL) ; return 0 ; }
//-------------------------------------------------------------------------------- // //【ポップアップメニューを表示させる】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // メインウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_RBUTTONUP: POINT pt ; HMENU hMenu ; HMENU hSubMenu ; //HWND hwnd = (HWND)wParam; pt.x = LOWORD(lParam) ; pt.y = HIWORD(lParam) ; // マウスのポインタをスクリーン座標に変換 ClientToScreen(hWnd, &pt) ; // メニューリソースの読み込み hMenu = LoadMenu(g_hInstance, MAKEINTRESOURCE(IDR_MENU)) ; hSubMenu = GetSubMenu(hMenu, 0) ; // ポップアップメニュー表示 TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL) ; return 0 ; default : break ; } return (DefWindowProc(hWnd, message, wParam, lParam)) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // WM_RBUTTONDOWNハンドラ void CTestWnd::OnRButtonDown(UINT nFlags, CPoint point) { // マウスのポインタをスクリーン座標に変換 ClientToScreen(&point) ; // 自分自身にフォーカスを設定 SetForegroundWindow() ; // ポップアップメニューの作成 CMenu menu ; // IDR_MENU1はメニューのリソースID menu.LoadMenu(IDR_MENU1) ; CMenu* pPopup = menu.GetSubMenu(0) ; // ポップアップメニュー表示 pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this) ; CWnd::OnRButtonDown(nFlags, point) ; }
//-------------------------------------------------------------------------------- // //【右クリックでシステムメニューポップアップ】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// // メインウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_RBUTTONUP : POINT pt ; pt.x = LOWORD(lParam) ; pt.y = HIWORD(lParam) ; // マウスのポインタをスクリーン座標に変換 ClientToScreen(hWnd, &pt) ; // システムメニューポップアップの表示 PostMessage(hWnd, 0x0313, 0, MAKELPARAM(pt.x, pt.y)) ; return 0 ; default : break; } return (DefWindowProc(hWnd, message, wParam, lParam)) ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// // システムメニューポップアップの表示 void CTestWnd::OnRButtonDown(UINT nFlags, CPoint point) { // マウスのポインタをスクリーン座標に変換 ClientToScreen(&point) ; // システムメニューポップアップの表示 PostMessage(0x0313, 0, MAKELPARAM(point.x, point.y)) ; CWnd::OnRButtonDown(nFlags, point) ; }
//-------------------------------------------------------------------------------- // //【メニューを動的に切り替える】 // // メニューを動的に切り替えるプログラムサンプルです { CMenu newMenu ; // IDを指定してメニューリソースを読み込みます newMenu.LoadMenu(IDR_MENU1) ; // 新しいメニューを設定します AfxGetMainWnd()->SetMenu(&newMenu) ; // メニューを再描画します AfxGetMainWnd()->DrawMenuBar() ; // Windows のメニューを CMenu オブジェクトから切り離します newMenu.Detach() ; }
//-------------------------------------------------------------------------------- // //【ダイアログにツールバーを作成】 // //(SDK) ///////////////////////////////////////////////////////////////////////////// static TBBUTTON g_tbbutton[] = { { 0, IDM_EXIT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, { 1, IDM_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, { 2, IDM_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, { 0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, 0 }, { 3, IDM_ABOUT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }, } ; ///////////////////////////////////////////////////////////////////////////// // ダイアログプロシージャ内のWM_INITDIALOGハンドラ部分 LRESULT CALLBACK TestDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch(message){ case WM_INITDIALOG : // ツールバーの作成 // g_hwndToolBar2はHWND型のグローバル変数 g_hwndToolBar2 = CreateToolbarEx(hDlg, WS_CHILD | WS_VISIBLE | CCS_NOPARENTALIGN |CCS_NOMOVEY | CCS_NODIVIDER|CCS_NORESIZE, IDC_TOOLBAR, 8, g_hInstance, IDB_TOOLBAR, g_tbbutton, sizeof(g_tbbutton)/sizeof(TBBUTTON), 16, 15, 16*3, 15, sizeof(TBBUTTON)) ; return TRUE ; default : break ; } return FALSE ; } //(MFC) ///////////////////////////////////////////////////////////////////////////// //[TestDialog.h] class CTestDialog : public CDialog { : : // CTestDialogのメンバにツールバーを追加 CToolBar m_wndToolBar ; : : } ///////////////////////////////////////////////////////////////////////////// //[TestDialog.cpp] // WM_INITDIALOGハンドラ CTestDialog::OnInitDialog() { CDialog::OnInitDialog() ; if(!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_TOOLBAR)){ // 作成に失敗した時の処理 } CRect rcClient ; GetClientRect(rcClient) ; // ツールバーの高さ取得 CSize sizeToolBar ; sizeToolBar = m_wndToolBar.CalcFixedLayout(FALSE, TRUE) ; // 作成時は大きさが0なので設定する m_wndToolBar.MoveWindow(0, 0, rcClient.Width(), sizeToolBar.cy) ; return TRUE ; }
//-------------------------------------------------------------------------------- // //【ツールバー/ステータスバーを非表示で起動】 // //(MFC) ///////////////////////////////////////////////////////////////////////////// // WM_CREATEハンドラ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if(CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; : : // ツールバーを消したい場合 ShowControlBar(&m_wndToolBar, FALSE, FALSE) ; // ステータスバーを消したい場合 ShowControlBar(&m_wndStatusBar, FALSE, FALSE) ; return 0 ; }
//-------------------------------------------------------------------------------- // //【フローティングツールバーのクローズボタンを消す】 //(MFC) ///////////////////////////////////////////////////////////////////////////// /* 1.クラスウィザードでgeneric CWndの派生クラスCTestToolBarを作成 2.作成したCTestToolBarのCWndをCToolBarに全て置換 3.MainFrm.hのCToolBarをCTestToolBarに変更 4.クラスウィザードでCTestToolBarにWM_CHILDACTIVATEのハンドラOnChildActivate()を追加 5.追加したOnChildActivate()を以下のようにする */ ///////////////////////////////////////////////////////////////////////////// // クラスウィザードで追加されたWM_CHILDACTIVATEハンドラ void CTestToolBar::OnChildActivate() { CToolBar::OnChildActivate() ; CWnd* pWnd = GetParent()->GetParent() ; if(pWnd->GetSafeHwnd() != GetOwner()->GetSafeHwnd()){ pWnd->ModifyStyle(WS_SYSMENU, 0) ; } }
//-------------------------------------------------------------------------------- // //【フローティングツールバーの移動方法】 //(MFC) ///////////////////////////////////////////////////////////////////////////// void CMainFrame::OnTest() { CWnd* pWnd = m_wndToolBar.GetParent()->GetParent() ; if (pWnd->GetSafeHwnd() != GetSafeHwnd()){ // ここで必要な処理をする CRect rcFrame(0, 0, 0, 0) ; ClientToScreen(rcFrame) ; pWnd->SetWindowPos(NULL, rcFrame.left, rcFrame.top, -1, -1, SWP_NOSIZE) ; } }
//-------------------------------------------------------------------------------- // //【フローティングツールバーの幅指定】 ///////////////////////////////////////////////////////////////////////////// // フローティングツールバーの幅を設定 void CMainFrame::OnTest() { m_wndToolBar.m_nMRUWidth = 100 ; ShowControlBar(&m_wndToolBar, TRUE, FALSE) ; }