CDialgBarをメニューから表示非表示にしたい – プログラミング – Home

CDialgBarをメニューから表示非...
 
通知
すべてクリア

[解決済] CDialgBarをメニューから表示非表示にしたい


高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndDialogBar.Create(this, IDD_DIALOG_BAR, WS_CHILD |
WS_VISIBLE |CBRS_LEFT
| CBRS_GRIPPER , IDD_DIALOG_BAR))
{
TRACE0(Failed to create toolbar\n);
return -1; // 作成に失敗
}

m_wndDialogBar.EnableDocking(CBRS_ALIGN_RIGHT | CBRS_ALIGN_LEFT);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDialogBar);

return 0;
}
ダイアログバーをツールバーのように表示をさせるところまでは出来ましたが、それを
メニューで表示非表示する事が出来ません分かる方がいらっしゃいましたら
教えてください宜しく御願いします。

void CMainFrame::OnUpdateDialogBar(CCmdUI* pCmdUI)
{
if(pCmdUI->m_wndDialogBar != NULL )
pCmdUI->SetCheck(0);

else
pCmdUI->SetCheck(1);

pCmdUI->Enable(m_wndDialogBar);
}


引用未解決
トピックタグ
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

CFrameWnd::ShowControlBar で出来ます。

適当なメニュー項目を作って,そのコマンドのハンドラを CMainFrame に作り,
その中で ShowControlBar を呼んでやれば OK です。


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

void CMainFrame::OnUpdateViewList(CCmdUI* pCmdUI)
{
BOOL bVisible = ((m_wndDialogBar.GetStyle() & WS_VISIBLE) != 0);
if(bVisible == flg)
{
ShowControlBar(&m_wndDialogBar, !bVisible, FALSE);
pCmdUI->SetCheck(bVisible);flg = 0;
}
else
flg = bVisible;

pCmdUI->Enable();
}
このようにやってみましたが、メニュー項目を選択する前のメニューを開いた時点で表示
非表示が実行してしまいます。
どうしてか分かりません宜しく御願いします。


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

void CMainFrame::OnUpdateViewList(CCmdUI* pCmdUI)
{
BOOL bVisible = ((m_wndDialogBar.GetStyle() & WS_VISIBLE) != 0);
ShowControlBar(&m_wndDialogBar, !bVisible, TRUE);
pCmdUI->SetCheck(bVisible); pCmdUI->Enable();
}
これで解決しました。
教えてくださって有り難うございました。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

ダイアログバーを表示/非表示にするためのコードは,
UPDATE_COMMAND_UI のハンドラではなくて,
COMMAND のハンドラに記述するべきです。

理由は,
・UPDATE_COMMAND_UI のハンドラ
  メニュー項目やツールバーボタンの状態を更新するために呼ばれる。
・COMMAND のハンドラ
  メニュー項目が選択されたときやツールバーボタンが押されたときに呼ばれる。
からです。


返信引用
高橋
 高橋
(@高橋)
ゲスト
結合: 22年前
投稿: 17
Topic starter  

すいません勘違いしていました。
今度はちゃんと出来るようになりました。

void CMainFrame::OnViewList()
{
BOOL bVisible = ((m_wndDialogBar.GetStyle() & WS_VISIBLE) != 0);
ShowControlBar(&m_wndDialogBar, !bVisible, TRUE);
check = bVisible;

}

void CMainFrame::OnUpdateViewList(CCmdUI* pCmdUI)
{
if(check == 1)
{
pCmdUI->SetCheck(0);
check = 0;
}
else
{
pCmdUI->SetCheck(1);
check = 1;
}
}
これでメニューと表示と両方ちゃんと動くようになりました。
有り難うございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました