如题,简单的说下,
工具栏1派生于CControlBar,并且在工具栏1上创建了一个对话框
再在对话框上添加一个工具条2在对话框源码内用ON_COMMAND无效,工具条2按钮为灰
后来我改在CMainFrame内用ON_COMMAND,当工具栏1停靠时,工具条2按钮有效,CMainFrame可以收到消息
当工具栏2浮动时,按钮就无效,如何解决?谢谢
工具栏1派生于CControlBar,并且在工具栏1上创建了一个对话框
再在对话框上添加一个工具条2在对话框源码内用ON_COMMAND无效,工具条2按钮为灰
后来我改在CMainFrame内用ON_COMMAND,当工具栏1停靠时,工具条2按钮有效,CMainFrame可以收到消息
当工具栏2浮动时,按钮就无效,如何解决?谢谢
主要考虑到美化方面的东西
本来是用button的
后来用Ctoolbar来代替
{
m_wndToolBar.OnUpdateCmdUI((CFrameWnd*)this, TRUE);
}
派生CToolbar 处理 WM_IDLEUPDATECMDUI消息LRESULT CControlBar::OnIdleUpdateCmdUI(WPARAM wParam, LPARAM)
{
// handle delay hide/show
BOOL bVis = GetStyle() & WS_VISIBLE;
UINT swpFlags = 0;
if ((m_nStateFlags & delayHide) && bVis)
swpFlags = SWP_HIDEWINDOW;
else if ((m_nStateFlags & delayShow) && !bVis)
swpFlags = SWP_SHOWWINDOW;
m_nStateFlags &= ~(delayShow|delayHide);
if (swpFlags != 0)
{
SetWindowPos(NULL, 0, 0, 0, 0, swpFlags|
SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
} // the style must be visible and if it is docked
// the dockbar style must also be visible
if ((GetStyle() & WS_VISIBLE) &&
(m_pDockBar == NULL || (m_pDockBar->GetStyle() & WS_VISIBLE)))
{
CFrameWnd* pTarget = (CFrameWnd*)GetOwner();
if (pTarget == NULL || !pTarget->IsFrameWnd())
pTarget = GetParentFrame();
if (pTarget != NULL)
OnUpdateCmdUI(pTarget, (BOOL)wParam);
}
return 0L;
}把CFrameWnd* pTarget = (CFrameWnd*)GetOwner();中的GetOwner()改为AfxGetMainWnd()
当然还有其他的方法,我还没研究完,先暂时放下了貌似vs2005的output就是这样的,我就是仿它的