CStatic空間的滑鼠事件響應,以及…

來源:互聯網
上載者:User

昨天一直在做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這樣的情況。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.