2

我尝试CBS_DROPDOWNLIST使用DrawThemeBackground. 我提供了 part 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);

但是上面在组合框背景上绘制了以矩形为中心的箭头,包括边框,所以我不能在组合框内没有边框(它本身已经有边框)的情况下使用它。我使用主题资源管理器来验证箭头是否始终位于带边框的背景上。

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

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

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

  • GetThemeBitmap可能有助于确定箭头的确切大小,但正如我在此处阅读并在我的机器上确认的那样,使用它TMT_GLYPHDIBDATA并不能像宣传的那样工作,如果可能的话,我希望没有任何变通方法。

4

0 回答 0