我试图绘制一个应该使用"combobox“主题类的自定义控件。
使用
m_hTheme = OpenThemeData(m_hWnd, _T("COMBOBOX"));
auto stateBG = ...; // depends on window state
DrawThemeBackground(m_hTheme, ps.hdc, CP_READONLY, stateBG, &clientRect, nullptr);给出正确的背景(只读外观)没有雪佛龙。但是我该怎么添加雪佛龙呢?
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,它返回完整的客户端矩形,因此提示文本对齐很差。这是..。正常吗?
发布于 2020-12-05 10:38:57
你试过用CP_DROPDOWNBUTTON代替CP_DROPDOWNBUTTONRIGHT吗?
发布于 2021-11-23 11:21:34
作为一种解决方法,您可以使用ClipRect of DrawThemeBackground来切断下拉按钮的左侧边缘。
CRect clip_rect = rect;
clip_rect.DeflateRect(1, 0, 0, 0);
auto stateCV = ...; // depends on window state
DrawThemeBackground(m_hTheme, ps.hdc, CP_DROPDOWNBUTTON, stateCV, &rect, &clip_rect);https://stackoverflow.com/questions/65055736
复制相似问题