我尝试模仿主题不可编辑组合框的外观(CBS_DROPDOWNLIST
) using DrawThemeBackground https://msdn.microsoft.com/library/windows/desktop/bb773306(v=vs.85).aspx。我供应零件CP_READONLY https://msdn.microsoft.com/library/windows/desktop/bb773210(v=vs.85).aspx,它显然绘制了主题组合框的背景:
DrawThemeBackground(theme, dc, CP_READONLY, CBRO_NORMAL, &rectangle, nullptr);
但是,它不包含下拉箭头。因此,我尝试按照以下方式自己绘制箭头:
rectangle.left = rectangle.right - 20;
DrawThemeBackground(theme, dc, CP_DROPDOWNBUTTONRIGHT, CBXSR_NORMAL, &rectangle, nullptr);
但上面画的是箭头centered在组合框背景上的矩形内包括边界,所以如果组合框内没有边框(它本身已经有边框),我就无法使用它。我用了主题浏览器 https://github.com/mity/theme-explorer验证箭头始终位于带边框的背景上。
本质上,我的问题是:我怎样才能画背景and适当位置的箭头可以模拟普通 Windows 组合框的外观?
到目前为止我发现了什么:
我可以指定一个剪切矩形来剪掉上述边框。但这提出了确定确切位置矩形和剪切矩形的问题:看来我可以使用GetThemeMargins https://msdn.microsoft.com/library/windows/desktop/bb759755(v=vs.85).aspx确定边距,但这并不能告诉我整个箭头有多大。
GetThemeBitmap https://msdn.microsoft.com/library/windows/desktop/bb773388(v=vs.85).aspx可能对确定箭头的确切大小有用,但正如我读到的here https://www.codeproject.com/Articles/620045/Custom-Controls-in-Win-API-Visual-Styles并在我的机器上确认,使用它TMT_GLYPHDIBDATA
并不像宣传的那样工作,如果可能的话,我希望不使用任何解决方法。