我正在处理一些Window Customizing的东西。 我删除了CFrameWnd的标题栏和边框,并添加了我自己的标题栏。 看起来很不错。 但是,如果我在此窗口中添加菜单,菜单将位于此窗口的顶部。 (在我的标题栏上方) 所以我添加了新的CFrameWnd并将我的菜单设置为这个新的CFrameWnd。 这是代码。
CMenu * pMenu = this->GetMenu();
if( pMenu != NULL )
{
this->SetMenu(NULL);
m_pMenuWnd = new CMenuWindow();
m_pMenuWnd->Create(NULL, NULL, 0, m_WindowRects.MenuRect, this, 0, NULL);
m_pMenuWnd->SetMenu(pMenu);
m_pMenuWnd->ShowWindow(SW_NORMAL);
}
我在我的自定义CFrameWnd的OnSize,OnMove消息处理程序上添加了这个菜单窗口的移动处理程序,用于正确定位。
看起来很不错。 但是当我最小化并恢复其位置时,菜单窗口位置只是白色空白。
但如果我把光标移到那里,菜单就在那里。 我究竟做错了什么? 我检查了OnCtlColor但它甚至没有被调用。
此处的CMenuWindow代码
BEGIN_MESSAGE_MAP(CMenuWindow, CFrameWnd)
ON_WM_CREATE()
ON_WM_ACTIVATE()
ON_WM_KEYUP()
ON_WM_SYSKEYUP()
END_MESSAGE_MAP()
void CMenuWindow::OnDraw(CDC* pDC)
{
CRect clRect;
GetClientRect(&clRect);
}
// CMenuView message handlers
int CMenuWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
ModifyStyle(WS_CAPTION, WS_CLIPCHILDREN);
ModifyStyleEx(WS_EX_CLIENTEDGE,0);
return 0;
}