如何在Windows中获得某些控件的图标?更具体地说,我想从ListView标题中获取排序箭头图标.我尝试使用以下方法获取它:
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;
}
Run Code Online (Sandbox Code Playgroud)
但它并没有回归我所期待的微小三角形.有什么建议?
根据MSDN文档,函数GetThemeBitmap()可以被称为属性TMT_DIBDATA(没有字形的背景)或TMT_GLYPHDIBDATA(字形,即这里只是三角形)或TMT_HBITMAP(虽然目前根本不支持).
不幸的是,我发现TMT_GLYPHDIBDATA功能总是失败E_INVALIDARG.标题<vssym32.h>定义TMT_GLYPHDIBDATA为8.但是我发现该函数获取常量的字形位图3.
我猜在标题中有一个错误(拼写错误)<vssym32.h>(从Windows SDK 7.1开始)或GetThemeBitmap()在Windows 7上实现.
除非Microsoft至少记录3或8是否正确,否则我在我的代码中使用此变通方法:
HBITMAP bmp;
HRESULT hr = GetThemeBitmap(hTheme, iPartId, iStateId, 3, GBF_DIRECT, &bmp);
if(FAILED(hr))
hr = GetThemeBitmap(hTheme, iPartId, iStateId, TMT_GLYPHDIBDATA, GBF_DIRECT, &bmp);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |