在窗户上绘制主题组合框

时间:2017-11-09 10:13:06

标签: windows user-interface combobox themes visual-styles

我尝试使用DrawThemeBackground模仿主题不可编辑的组合框(CBS_DROPDOWNLIST)的外观。我提供了CP_READONLY部分,它显然绘制了一个主题组合框的背景:

DrawThemeBackground(theme, dc, CP_READONLY, CBRO_NORMAL, &rectangle, nullptr);

但是,它不包含下拉箭头。所以,我试图通过以下方式画出箭头:

rectangle.left = rectangle.right - 20;
DrawThemeBackground(theme, dc, CP_DROPDOWNBUTTONRIGHT, CBXSR_NORMAL, &rectangle, nullptr);

但是上面在组合框背景上的矩形内绘制了居中,包括边框,所以我不能在组合框内没有边框的情况下使用它(它本身已经有边框)。我使用theme-explorer验证箭头始终位于带边框的背景上。

从本质上讲,我的问题是:如何在适当的位置绘制背景箭头以模拟普通窗口组合框的外观?

到目前为止我发现了什么:

  • 我可以指定剪裁矩形来剪掉上述边框。但是这提出了确定精确位置矩形和剪切矩形的问题:似乎我可以使用GetThemeMargins来确定边距,但这并不能告诉我箭头整体有多大。

  • GetThemeBitmap可能有助于确定箭头的确切大小,但在我阅读here并在我的计算机上确认时,将其与TMT_GLYPHDIBDATA一起使用不起作用广告,如果可能的话,我想没有任何解决方法。

0 个答案:

没有答案