vc++ 单文档程序添加窗口移动事件(不是大小改变),以实现子窗口的伴随移动

这两天做一个程序要在单文档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 }

折腾一下午终于解决!

你可能感兴趣的:(vc++)