我尝试使用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
一起使用不起作用广告,如果可能的话,我想没有任何解决方法。