(1)載入資源id,可以是系統自帶的(如id_cross),或者是程式設計師自己加入的游標id:
hcursor hcursor = ::loadcursor(null,makeintresource(idc_cross));
setclasslong(m_hwnd,gcl_hcursor,(long)hcursor );
//或者指標::setclasslongptr(this->getsafehwnd(),gcl_hcursor,(long_ptr) hcursor);
(2)從.cur或.ani檔案載入:
hcursor hcursor= ::loadcursorfromfile( _t("hand.cur"));
setclasslong(m_hwnd,gcl_hcursor,(long)hcursor );
注意:setclasslong()才能保證設定新游標後,以後一直是新游標.
而如果只是setcursor()只是變化成新游標,馬上就還原了,不行.如要用setcursor(),還需要攔截wm_setcursor訊息,然後修改onsetcursor()函式:
bool cmfc_frameview::onsetcursor(cwnd* pwnd, uint nhittest, uint message)
return cview::onsetcursor(pwnd, nhittest, message);}
不攔截wm_setcursor訊息只是setcursor(),是沒用的.
使用setclasslong函式要小心。例如,可以通過使用setclasslong來改變類的背景顏色,但是這種改變不會馬上生效,直到屬於該類的窗體下次重繪,除非使用updatewindow()強迫窗體更新。
mfc 設定游標一法
應該在wm setcursor訊息響應函式中設定游標,注意返回值應當為false,遮蔽掉預設的 bool ccutpicdlg onsetcursor cwnd pwnd,uint nhittest,uint message 1 自己繪製的游標。setcursor loadcursor afxget...
mfc滑鼠游標閃爍問題
setcursor函式只能暫時設定游標樣式,當滑鼠移動時,游標恢復為箭頭。因此不能在移動響應函式中呼叫此函式,會產生閃爍。setclasslong 函式才能保證設定新游標後,以後一直是新游標。但是本控制項中,使用此函式設定,依然不行,滑鼠移動還是閃爍。換另外一種思路,查詢游標變換訊息。只要滑鼠移動o...
MFC中修改游標形狀
修改游標形狀,如果是修改系統內游標形狀,那就很簡單了,直接是用 setcursor loadcursor null,makeintresource idc cursor1 就可以修改成功了,但這只是更改一時的游標形狀。如果想要長久修改游標形狀,就需要在游標訊息中修改滑鼠形狀了。1 首先,新增wm s...