我想獲取.cur文件的高度和寬度,而無需查看其格式。我試圖使用LoadCursorFromFile()來獲得一個HCURSOR,我想有一個API函數來獲取HCURSOR的信息,但我發現GetCursorInfo()不是我想要的。如何知道HCURSOR對象的大小
有什麼辦法可以獲得HCURSOR對象的高度和寬度嗎?
我想獲取.cur文件的高度和寬度,而無需查看其格式。我試圖使用LoadCursorFromFile()來獲得一個HCURSOR,我想有一個API函數來獲取HCURSOR的信息,但我發現GetCursorInfo()不是我想要的。如何知道HCURSOR對象的大小
有什麼辦法可以獲得HCURSOR對象的高度和寬度嗎?
Windows中的圖標和光標之間的API存在一些重疊。您可以用HCURSOR和HICON撥打電話GetIconInfoEx
。你回來的結構將有關於熱點的信息。
我沒有看到獲取實際大小的方法。從技術上講,所有光標圖標都是固定大小,您可以通過詢問系統(使用GetSystemMetrics
)獲得SM_CXCURSOR
和SM_CYCURSOR
。那些看起來更小的實際上是那個尺寸,他們只是有很多透明像素。如果您必須知道表面大小,則必須提取掩碼並掃描這些位以找出邊界矩形。
從MSDN:
的nWidth和nHeight參數參數必須指定的寬度和高度由當前顯示驅動程序支持,因爲系統不能創建其他尺寸的遊標。要確定顯示驅動程序支持的寬度和高度,請使用GetSystemMetrics函數,並指定SM_CXCURSOR或SM_CYCURSOR值。
通用的C++代碼,對任何光標:
SIZE GetSize(HCURSOR ico)
{
SIZE res = {0};
if (ico)
{
ICONINFO info = {0};
if (::GetIconInfo(ico, &info)!=0)
{
bool bBWCursor = (info.hbmColor==NULL);
BITMAP bmpinfo = {0};
if (::GetObject(info.hbmMask, sizeof(BITMAP), &bmpinfo)!=0)
{
res.cx = bmpinfo.bmWidth;
res.cy = abs(bmpinfo.bmHeight)/(bBWCursor ? 2 : 1);
}
::DeleteObject(info.hbmColor);
::DeleteObject(info.hbmMask);
}
}
return res;
}
使用SM_CXCURSOR或SM_CYCURSOR是不正確的。例如:切換到控制面板中的巨大光標大小後,SM_CXCURSOR和SM_CYCURSOR的值保持爲32x32。 – 23W 2012-11-08 18:30:52
很多的幫助。 +1 – Gohan 2010-03-17 09:31:16