c++ - 如何在写入图标(.ico)时为鼠标光标应用遮罩
问题描述
我GetCursorInfo
用来捕获光标,但在将光标保存为图标时,图标上会出现一些黑色矩形。
对于 windows 默认光标很好,但很少有自定义光标我面临这个问题http://www.cursors-4u.com/
HRESULT SaveIcon(HICON hIcon, const char* path)
{
// Create the IPicture intrface
PICTDESC desc = { sizeof(PICTDESC) };
desc.picType = PICTYPE_ICON;
desc.icon.hicon = hIcon;
IPicture* pPicture = 0;
HRESULT hr = OleCreatePictureIndirect(&desc, IID_IPicture, FALSE, (void**)&pPicture);
if (FAILED(hr)) return hr;
// Create a stream and save the image
IStream* pStream = 0;
CreateStreamOnHGlobal(0, TRUE, &pStream);
LONG cbSize = 0;
hr = pPicture->SaveAsFile(pStream, TRUE, &cbSize);
// Write the stream content to the file
if (!FAILED(hr))
{
HGLOBAL hBuf = 0;
GetHGlobalFromStream(pStream, &hBuf);
void* buffer = GlobalLock(hBuf);
HANDLE hFile = CreateFileA(path, GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (!hFile)
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
else
{
DWORD written = 0;
WriteFile(hFile, buffer, cbSize, &written, 0);
CloseHandle(hFile);
}
GlobalUnlock(buffer);
}
// Cleanup
pStream->Release();
pPicture->Release();
return hr;
}
//Capture cursor.
CURSORINFO getHCursor()
{
CURSORINFO cursorInfo;
cursorInfo.cbSize = sizeof(CURSORINFO);
if (GetCursorInfo(&cursorInfo) == 0)
{
MessageBox(NULL, _T("Exception : GetCursorInfo creation failed"),_T("message"),MB_OK|MB_SYSTEMMODAL);
cursorInfo.hCursor = NULL;
return cursorInfo;
}
return cursorInfo;
}
//Main Call
int _tmain(int argc, _TCHAR* argv[])
{
while (true)
{
CURSORINFO CursorInfo = getHCursor();
if (CursorInfo.hCursor == NULL)
{
::Sleep(MinSleep);
continue;
}
SaveIcon((HICON)CursorInfo.hCursor, "C:\\Users\\Desktop\\myicon.ico");
Sleep(MaxSleep);
}
return 0;
}
我的议程是捕获光标并将光标保存到图标(.ico)文件或加载到缓冲区。
有没有其他方法可以将光标数据写入图标文件或缓冲区?
解决方案
推荐阅读
- python - 使用 Python 将 mp4 AAC 转换为 AVC
- python - 如何使 FunctionTransformer 在 DataFrameMapper 中工作
- python - 无法在pygame中虚拟单击左右键
- r - 如何将 igraph 网络图转换为 R 中的 ggnet2?
- java - 如何从 Java 方法修复 thymeleaf 简单 System.out.print?
- c - 我有这个问题,我需要在插入排序中计算交换和比较的数量我无法让它真正准确地计算
- c++ - 使用惰性迭代器的 C++ 过滤
- apache-spark - fs.s3 配置有两个带 EMR 的 s3 帐户
- jsp - 在JSP中获取属性抛出空指针
- ios - 为什么我在尝试扫描 QR 码时在 Expo 中收到此错误?