vc滑鼠設定

來源:互聯網
上載者:User

訊息下:

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));

或是:

HCURSOR   hc;

hc=LoadCursor(NULL,IDC_CROSS);

             SetCursor(hc);

IDC_APPSTARTING     帶小沙漏的標準箭頭   

IDC_ARROW           標準箭頭   

IDC_CROSS           十字游標   

IDC_HAND            windows   2000:手型   

IDC_HELP            帶問號的箭頭   

IDC_IBEAM           i型標   

IDC_ICON            obsolete   for   applications   marked   version   4.0   or   later.     

IDC_NO              禁止符號   

IDC_SIZE            obsolete   for   applications   marked   version   4.0   or   later.   use   idc_sizeall.     

IDC_SIZEALL         十字箭頭   

IDC_SIZENESW        指向東北和西南的雙向箭頭   

IDC_SIZENS          指向南和北的雙向箭頭   

IDC_SIZENWSE        指向西北和東南的雙向箭頭   

IDC_SIZEWE          指向東西的雙向箭頭   

IDC_UPARROW         上箭頭   

IDC_WAIT            沙漏

當我們要自己選擇一個表徵圖的時候按照以下幾個步驟:

1、定義一個成員變數: HCURSOR m_cursor;

          m_cursor = AfxGetApp()->LoadCursor(IDC_CURSOR1);

也可以

        m_cursor = LoadCursorFromFile(".\\res\\123.cur");

2、重載 OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)函數,

3、在函數裡面寫入:

     ::SetCursor(m_cursor);

OK,我們自訂的滑鼠完成;

當然我們也可以用ani格式的動態滑鼠形狀,可以使程式更帥;

   和載入.cur一樣:例如;

m_cursor = LoadCursorFromFile(".\\res\\123.ani");

-----------------------------------------------------------------------------------------------------------

當然也可以先把檔案載入進來直接匯入:按照以下步驟:

1、先把ani檔案匯入;

2、隨便儲存成什麼名字;然後在程式的.rc檔案下,把對應的代碼 修改成以下代碼:

IDR_FLY                 ANICURSOR DISCARDABLE   "fly.ani"

或者

IDR_FLY                 CURSOR DISCARDABLE   "fly.ani"

不然有的時候可能出現錯誤,我現在也沒有搞清楚是什麼問題;

或者直接在.rc檔案下添加代碼:

IDR_FLY                 ANICURSOR DISCARDABLE   "fly.ani"

或者

IDR_FLY                 CURSOR DISCARDABLE   "fly.ani"

就不用第一步驟了;然後

m_cursor = AfxGetApp()->LoadCursor("IDR_FLY");

這樣就可以實現了;

ani格式我們可以通過一些動畫或gif格式轉換過來;

下面一些理論的東西可能對我們也有用,是轉自其他人的部落格的內容:

轉粘(vckbase):   



windows編程中有兩種方法改變指標:一種是當應用的主視窗類註冊時,為wndclass結構提供一個全程游標指標,另外一種方法是在程式中處理 wm_setcursor訊息來設定滑鼠游標。標準的mfc應用程式使用第一種方法自動在主視窗註冊時將游標指標設定為一個箭頭。如果要改變游標指標,則可以通過在主視窗或子視窗中重載訊息wm_setcursor的處理函數來重新設定滑鼠指標。 


// handle wm_setcursor in button class 

bool cmybutton::onsetcursor(cwnd* pwnd, uint nhittest, uint msg) 



::setcursor(m_hmycursor); 

return true; 





當使用者將滑鼠指標移到按鈕上時,滑鼠不被捕獲,windows發送一個wm_setcursor訊息到按鈕。從上面onsetcursor的代碼中可以看到,它傳遞一個參數是視窗控制代碼- 即滑鼠指標所指的視窗,這裡指的是按鈕本身;onsetcursor傳遞的第二個參數是nhittest,這是一個滑鼠點擊測試代碼,它以htxxx開頭,用於wm_nchittest訊息;onsetcursor傳遞的第三個參數是觸發事件的滑鼠訊息的訊息id-例如,wm_mousemove。 wm_setcursor是專門用來設定滑鼠指標的訊息,當設定了滑鼠指標以後,應該讓它返回true以防止windows再作預設處理。 


wm_setcursor的處理機制是這樣的,如果有父視窗的話,預設的視窗過程首先發送wm_setcursor訊息到父視窗,如果父視窗處理 wm_setcursor訊息,則windows不再作任何多餘的事情,處理完訊息便結束。如果父視窗不處理wm_setcursor訊息, windows讓子視窗來處理wm_setcursor,如果子視窗也不做任何處理,windows使用全程游標指標,如果沒有全程游標指標,則使用箭頭指標。 



如果你在程式中要是使用動態游標指標,你必須決定是在子視窗處理wm_setcursor訊息還是在父視窗中處理wm_setcursor訊息。兩種方法各有利弊,根據具體情況而定。一般總是讓對象決定它們自己的行為屬性-也就是說最好在子視窗中做處理。本文中的子視窗即按鈕。這就要派生一個新的按鈕類,新的按鈕類有自己的訊息映射及其訊息處理過程。可以使用類嚮導來產生新的按鈕類,但那樣要做的事情太多。如果你已經有自己的按鈕類,那當然是在自己的按鈕類中處理wm_setcursor訊息。如果沒有自己的按鈕類而又想偷懶的話,那就在對話方塊中處理wm_setcursor訊息得啦,只是不要向物件導向專家說是我告訴你這麼做的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.