薄祥雷

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

折腾一下午终于解决!

posted on 2012-06-14 19:14  薄祥雷  阅读(420)  评论(0编辑  收藏  举报