我正在尝试绘制一个应该使用“组合框”主题类的自定义控件。
使用
m_hTheme = OpenThemeData(m_hWnd, _T("COMBOBOX"));
auto stateBG = ...; // depends on window state
DrawThemeBackground(m_hTheme, ps.hdc, CP_READONLY, stateBG, &clientRect, nullptr);
给出正确的背景(只读外观),没有 V 形。但是如何添加雪佛龙?
auto stateCV = ...; // depends on window state
DrawThemeBackground(m_hTheme, ps.hdc, CP_DROPDOWNBUTTON, stateCV, &rect, nullptr);
正确绘制雪佛龙,但有自己的边框,雪佛龙位于rect
. 因此,如果我使用完整的客户端矩形,我会得到:
如果我使用较小的矩形以便正确定位人字形,我会得到一个单独的下拉列表:
我如何获得“正常”的外观?- 即像这样:
奖金问题:
有没有比 MSDN 做得更好的文档?它与大多数较新的文档一样稀疏,例如仅列出“部件和状态”,而没有描述它们的目的(这并不总是很明显),以及它是针对特定项目DrawThemeBackground
还是〜 。Edge
我仍然使用旧DrawFocusRect
的焦点矩形吗?
GetThemeBackgroundContentRect
计算 的预期矩形iPartId=CP_READONLY
,但对于iPartId=CP_CUEBANNER
,它返回完整的客户矩形,因此提示文本对齐错误。这……正常吗?