這兩天做一個程式要在單文檔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 }
折騰一下午終於解決!