调用Win32 API 之CreateCursor函数失败
Win SDK文檔,函數說明如下,
CreateCursor
CreateCursor該函數創建一個指定大小、位模式和熱點的光標。
函數原型:HCURSOR CreateCursor(HINSTANCE htnst,int xHotSpot;int yHotSpot;int nWidth;int nHeight,CONST VOID *pvANDPlane,CONST VOID *pvXORPlane);
參數說明
hlnst:創建光標的應用程序的當前實例句柄。
xHotSpot:指定光標熱點的水平位置。
yHotSpot:指定光標熱點的垂直位置。
nWidth:以像素為單位指定光標的寬度。
nHeight:以像素為單位指定光標的高度。
pvANDPlane:指向一個字節數組的指針,該數組包含光標AND掩碼的位值,就象設備相關的單色位圖一樣。
pvXORPlane:指向一個字節數組的指針,該數組包含光標XOR掩碼的位值,就象設備相關的單色位圖一樣。
返回值:如果成功,返回光標的值;如果失敗,返回值為NULL(空),若想獲得更多錯誤信息,調用GetLastError函數。
備注:nWidth和nHeight參數必須指定一個當前顯示驅動支持的寬度和高度,因為系統不能創建一個其他尺寸的光標,為了確定顯示驅動所支持的寬度和高度,請使用GetSystemMetrics函數,指定SM_CXCUROR或SM_CYCURSOR值。在一個應用程序關閉之前,必須調用DestroyCursor函數來釋放與光標有關的任何系統資源。
速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;頭文件:winuser.h;庫文件:user32.lib。
? ? 功能是直接使用函數來創建光標;下面來看一下;
VC6新建一個單文檔工程;添加一個菜單;在菜單單擊處理函數中編寫調用代碼;
void CCurView::OnMenuitem32771() {// TODO: Add your command handler code hereCString str1;int* pCursorBuffer = (int *)malloc(132*132*4);for (int i=0;i<132*132; i++){pCursorBuffer[i] = 0x80ff0000;}HCURSOR hcursor = CreateCursor(AfxGetInstanceHandle(), 0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),pCursorBuffer,pCursorBuffer);str1.Format("%0x",hcursor);AfxMessageBox(str1);SetCursor(hcursor); }如上代碼段;嘗試如下情況;
? ? 第一個參數,取NULL,或調用AfxGetInstanceHandle()返回當前應用程序實例句柄;
? ? 第2、3個參數是開始x、y坐標;
? ? 第4、5個參數,光標大小;輸入固定數值,或者調用GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN) 返回系統支持的值;
? ? 第6、7個參數,根據說明是字節數組指針;內容為光標AND掩碼、XOR掩碼的位值;上面pCursorBuffer相關賦值代碼來自網上,我還不清楚含義;或嘗試此2參數直接輸入NULL;
以上情況,程序均掛掉或無任何輸出;
為了看是否創建成功,使用
? ? str1.Format("%0x",hcursor);
?? ?AfxMessageBox(str1);
來彈出返回句柄的值;均不會執行到此而彈出消息框;
關于第一個參數應用程序實例句柄,根據資料VC++有三種方法獲取,
1.AfxGetInstanceHandle():用這個函數可以直接獲得應用程序的實例句柄
2.theApp.m_hInstance:利用全局的實例對象theApp的成員變量m_hInstance來獲得
3.AfxGetApp()->m_hInstance:利用AfxGetApp()獲得當前應用程序實例的一個指針
主要是最后2個參數不知道如何定義;嘗試隨便定義2個字節數組,
byte buf1[]= {0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1};
byte buf2[]= {0x0,0x1,0x0,0x1,0x0,0x1,0x0,0x1};
數組指針賦給最后2個參數;結果還是一樣;有時間再繼續;
函數的MSDN說明在
? ??CreateCursor | Microsoft Docs
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的调用Win32 API 之CreateCursor函数失败的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bochs调试linux内核学习4 -
- 下一篇: 初步了解超图桌面版导入CityGML数据