这两天做一个程序要在单文档CView里生成若干个小窗口,但这些小窗口要随着窗口的移动而移动,刚开始试了OnSize()事件,但发现OnSize()只响应窗口的大小改变,不响应移动事件。后又试了OnMove,但这个事件只能在CMainFrame里响应,这就需要将消息传递给CView里,本来想手动创建一个消息,但看了很多资料还是云里雾里,后突然想到,可以手动向view发送系统的WM_SIZE消息,于是就在CMainFrame里的OnMove事件里设置了发送消息代码,一切搞定。代码如下
//主框架中响应OnMove事件后,向活动的View传送WM_SIZE消息
1 void CMainFrame::OnMove(int x, int y) 2 { 3 CFrameWnd::OnMove(x, y); 4 CView * active = GetActiveView();//获取当前视类指针 5 if(active != NULL) 6 active->PostMessage(WM_SIZE,x,y); 7 // TODO: Add your message handler code here 8 }
1 //在View类中响应WM_SIZE消息 2 void CKkView::OnSize(UINT nType, int cx, int cy) 3 { 4 CView::OnSize(nType, cx, cy); 5 // TODO: Add your message handler code here 6 //移动信息子窗口m_ctrlMapX.m_hWnd != NULL 7 8 CRect clientRect; 9 GetClientRect(clientRect); 10 ClientToScreen(clientRect); 11 CRect msgRect; 12 msgDlg.GetWindowRect(msgRect); 13 msgDlg.MoveWindow(clientRect.right-msgRect.Width(),clientRect.top,msgRect.Width(),25); 14 }
折腾一下午终于解决,很是幸福啊!