我尝试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
并不能像宣传的那样工作,如果可能的话,我希望没有任何变通方法。