日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LoadCursor 加载不同的鼠标光标

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LoadCursor 加载不同的鼠标光标 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1: 修改方法一

?

?重載CView里的OnMouseMove函數 .


??? 重載方法 :

?

??????? “View” -> “ClassWizard” (Ctrl + W) -> 右側Messages欄選擇”WM_MOUSEMOVE” , 然后點”Add Function” , 點”OK” .


??? 添加代碼 :


???? 在 CDocTestView::OnMouseMove()里添加如下代碼:

?

?????????????????? HCURSOR hCur? =? LoadCursor( NULL? , IDC_CROSS ) ;//

??????????????? ::SetCursor(hCur);

?

??? 機制分析:

?

?????????? 系統默認每次調用OnMouseMove函數 ,都會重新用程序默認自帶的光標來重新繪制光標 ,所以 ,需要在OnMouseMove里來進行光標的修改才有效 。


2: 修改方法二

?

????? 重載CView里的OnSetCursor函數 .

?

????? 重載方法:

?????? “View” -> “ClassWizard” (Ctrl + W) -> 右側Messages欄選擇”WM_SETCURSOR” , 然后點”Add Function” , 點”OK” .


????? 添加代碼 :

?

?????????? 修改OnSetCursor 為如下代碼:

???????
?????????? BOOL CDocTestView:: OnSetCursor ()

????????????? {

???????????????????? HCURSOR hCur? =? LoadCursor( NULL? , IDC_CROSS ) ;

???????????????????? ::SetCursor(hCur);

????????????? return TRUE;

?????????????? }


????? 機制分析:

?

?????????? 系統在設置光標時 ,會發送一個WM_SETCURSOR消息 ,此消息會觸發OnSetCursor函數 , 所以 ,可以在這個函數里添加修改光標的代碼 。


3:修改方法三


?? 重載CView里的PreCreateWindow函數 .

?????
?? 重載方法 :

?????? “View” -> “ClassWizard” (Ctrl + W) -> 右側Messages欄選擇” PreCreateWindow” , 然后點”Add Function” , 點”OK” .


?? 添加代碼 :

?

??????????? 在CDocTestView::PreCreateWindow函數里添加如下代碼:

???????? cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,

????????????????????????????????????????????????????????????????????????????? LoadCursor( NULL? , IDC_CROSS ) ,

????????????????????????????????????????????????????????????????????????????? (HBRUSH) (COLOR_WINDOW + 1));

?? 機制分析:
?????
????? 缺省窗口創建時 , 會以一個結構體WNDCLASS來描述窗體的屬性 ,并利用注冊機制 ,將此窗口屬性注冊到系統中 ,利用AfxRegisterWndClass可以改變窗體本身的屬性 ,并對它重新注冊 。

4:修改方法四

?

????? 任意函數中修改鼠標形狀

?
????? 理論上利用SetCursor(…)函數 , 應該可以在任何時候,任何地方修改鼠標形狀 ,但實際情況卻并非如此 , 每次調用OnMouseMove時候(即每次鼠標移動時) , 系統會調用程序默認原來的一個光標來重新繪制鼠標形狀 . 所以 , 你如果在其它地方修改光標 , 你會發現這根本不起作用 , 因為每次鼠標一移動 , 它又恢復到原來的形狀了 . 這里需要用到另一個API來實現這個功能
SetClassLong() .? .? .

?

你可以在任何地方調用下面的代碼來修改光標形狀:

?????????????????????? SetClassLong(this->GetSafeHwnd(),

???????????????????????????? GCL_HCURSOR ,

???????????????????????????? (LONG)LoadCursor(NULL , IDC_CROSS));

?

?

綜合比較:

?

方法三更加適合于一次性的將默認光標統一替換另一種 ,并不適合于多次頻繁替換。

方法一 ,方法二 ,可以實現光標的多次變換 ,但是都需要在函數中添加額外的變量來控制顯示為不同的光標 。

方法四是最靈活的一種方式 ,可以在任何時候 ,任何函數里更換鼠標形狀 。

?

??????????????????????????????? 附?? 錄

1: LoadStandardCursor使用方法 .


?????????? LoadStandardCursor用來載入系統自帶的光標 , 調用方式如下:

????
?????????????????? HCURSOR hCursor = (HCURSOR)AfxGetApp()->LoadStandardCursor(IDC_CROSS);

?????????????????? ::SetCursor(hCursor);

?

2: LoadCursor 使用方法


??????????? HCURSOR LoadCursor(HINSTANCE hInstance ,??????? // handle to application instance

??????????????????????????????? LPCTSTR?? lpCursorName); // name or resource identifier


??? lpCursorName指的是光標的名字 .

??? hInstance描述的是含有光標的模塊句柄 . 這個模塊可以是一個可執行文件 , 也可以為空 . 當模塊句柄指向一個文件時 , LoadCursor則從這個文件中獲取光標 . 當模塊句柄為空時 , LoadCursor則從系統中獲取光標 .

?

???? 所以如果你想載入系統自帶的光標 , 可以用下面的代碼:


???????????????????????? HCURSOR hCur? =? LoadCursor( NULL? , IDC_CROSS ) ;

????????????????????????? ::SetCursor(hCur);

?

???? 如果想載入資源中自己繪制的光標 , 可以用下面的代碼:

?

?????????????????????? HCURSOR hCur? =? LoadCursor(AfxGetInstanceHandle() ,

???????????????????????? MAKEINTRESOURCE(IDC_CURSOR1));

?????????????????????? ::SetCursor(hCur);

總結

以上是生活随笔為你收集整理的LoadCursor 加载不同的鼠标光标的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。