消息下:
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消息得啦,只是不要向面向對象專家說是我告訴你這麼做的。