昨天一直在做avatar頭像在工具裡的顯示,讓策劃調好頭像位置後,儲存一個世界矩陣到avatar檔案裡,遊戲裡顯示avatar頭像時,就只需要讀取那個世界矩陣就可以了,一切準備工作已經就緒,實驗成功了,本來在dialog的訊息響應,為了改進操作手段,我決定把滑鼠事件放到cstatic裡,讓策劃可以直覺操作,所以,這玩意需要相應2個滑鼠事件:
ON_MOUSEMOVE
ON_MOUSEWHEEL
實現當滑鼠左鍵按下,移動滑鼠,則行動裝置檢視。
當滑鼠右鍵按下,移動滑鼠,則旋轉avatar。
然而,遇到的問題還是挺多的。
高興的寫好了這些處理代碼,各種相應都寫好了,結果怎麼也相應不了。
原來有一個很重要的原因, 需要給CStatic設定notify,可以在資源介面裡改,也可以在建立函數裡改,這樣一改,就可以支援ON_MOUSEMOVE訊息了。可是還有一個,ON_MOUSEWHEEL,還是無法響應。
原來是這樣的,CStatic正如其名,他是一個static控制項,而static控制項預設是無法擷取輸入焦點的,例如EditCtrl,你一點,就可以輸入文字了,但靜態控制項不同,就是讓你看的。所以,為了讓它支援支援MOUSEWHEEL訊息,就需要讓他擷取焦點。
簡單的,在CStatic 的ON_LBUTTONDOWN和ON_RBUTTONDOWN事件響應裡,手動讓他SetFocus就行了。
沒有焦點的控制項,對OnMouseWheel不響應的,所以要下得到焦點.
void CStaticTest::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetFocus();
CStatic::OnLButtonDown(nFlags, point);
}
//
void CStaticTest::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetFocus();
CStatic::OnRButtonDown(nFlags, point);
}
現在可以:
BOOL CStaticTest::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: Add your message handler code here and/or call default
AfxMessageBox("haha");//
return CStatic::OnMouseWheel(nFlags, zDelta, pt);
}
一般意義上,控制項不響應訊息,可能只有2中原因,一種是外部原因,控制項的訊息被父控制項過濾了,還有就是自身原因啦,這個控制項,本身它只不支援某種訊息呢,或者是否需要開啟某種開關才能支援呢,比如像CStatic的notify開關,以及需要擷取焦點才能響應MOUSEWHEEL這樣的情況。