訊息下:
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訊息得啦,只是不要向物件導向專家說是我告訴你這麼做的。