之前写的 屏蔽、修改ToolBar的右键菜单 小文章。
经过使用发现问题:
当应用程序启动时工具条停靠在Mainframe上,通过鼠标拖拽工具条,在右键显示context菜单可以修改菜单项的caption。
但是如果用用启动时工具条就漂浮在mainframe的工作区中。上就不能正确修改菜单项的caption。
经过分析通过Lbuttondown/doublelbuddown来来修改工具条的系统菜单。但如果一开始就浮动时则不响应LBDWON/LDBDOWN.
所以改变修改菜单项的师及。
通过查找网上,msdn等发现消息ON_WM_WINDOWPOSCHANGED可以买足要求
具体代码如下
此举会在相应的头文件里添加声明 public: afx_msg void OnWindowPosChanged(WINDOWPOS* lpwndpos); 并在类的实现文件里做如下修改 ------在消息映射里添加: ON_WM_WINDOWPOSCHANGED() ---------并添加如下函数定义 void ****::OnWindowPosChanged(WINDOWPOS* lpwndpos) { CToolBar::OnWindowPosChanged(lpwndpos);
if (IsFloating()) //is toolbar floating
{
CWnd* pMiniFrame;
CWnd* pDockBar;
pDockBar = GetParent();
pMiniFrame = pDockBar->GetParent();
CMenu* pMenu = pMiniFrame->GetSystemMenu(FALSE);
WORD langID = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);
if(langID == GetThreadLocale())
{//英文版
pMenu->ModifyMenu(SC_MOVE, MF_BYCOMMAND|MF_STRING,MF_BYCOMMAND|SC_MOVE, "Move(&M)");
pMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND|MF_STRING,MF_BYCOMMAND|SC_CLOSE, "Hide(&H)");
}
//extreme way of re-painting the toolbar
pMiniFrame->ShowWindow(SW_HIDE);
pMiniFrame->ShowWindow(SW_SHOW);
}
}
经过测试成功。感谢NorthTibet &&http://tech.ddvip.com/2006-04/11442553803822.html