winapi – 如何获得与Windows主题相关的图标?
发布时间:2021-02-08 05:43:56 所属栏目:系统 来源:网络整理
导读:如何在 Windows中获得某些控件的图标? 更具体地说,我想从ListView标题中获取排序箭头图标. 我尝试使用以下方法获取它: HRESULT GetSortArrowBmp(HWND hwnd,HEADERSORTARROWSTATES arrowState,HBITMAP** arrow){ HTHEME theme = OpenThemeData(hwnd,L"HEADE
如何在
Windows中获得某些控件的图标?
HRESULT GetSortArrowBmp(HWND hwnd,HEADERSORTARROWSTATES arrowState,HBITMAP** arrow) { HTHEME theme = OpenThemeData(hwnd,L"HEADER"); // hwnd is header itself HRESULT res = E_FAIL; if (theme){ res = GetThemeBitmap(theme,HP_HEADERSORTARROW,arrowState,TMT_DIBDATA,GBF_COPY,*arrow); CloseThemeData(theme); } return res; } 但它并没有回归我所期待的微小三角形.有什么建议? 解决方法根据MSDN文档,函数GetThemeBitmap()可以调用属性TMT_DIBDATA(没有字形的背景)或TMT_GLYPHDIBDATA(字形,即这里只是三角形)或TMT_HBITMAP(虽然目前根本不支持).不幸的是我发现使用TMT_GLYPHDIBDATA时,函数总是因E_INVALIDARG而失败.标题< vssym32.h>将TMT_GLYPHDIBDATA定义为8.但是我发现该函数获取常量3的字形位图. 我猜标题中的错误(拼写错误)< vssym32.h> (从Windows SDK 7.1开始),或在Windows 7上实现GetThemeBitmap(). 除非Microsoft至少记录3或8是否正确,否则我在我的代码中使用此变通方法: HBITMAP bmp; HRESULT hr = GetThemeBitmap(hTheme,iPartId,iStateId,3,GBF_DIRECT,&bmp); if(FAILED(hr)) hr = GetThemeBitmap(hTheme,TMT_GLYPHDIBDATA,&bmp); (编辑:瑞安网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐
热点阅读