首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UXTheme:绘制无边框雪佛龙组合框

UXTheme:绘制无边框雪佛龙组合框
EN

Stack Overflow用户
提问于 2020-11-29 00:13:46
回答 2查看 212关注 0票数 3

我试图绘制一个应该使用"combobox“主题类的自定义控件。

使用

代码语言:javascript
复制
m_hTheme = OpenThemeData(m_hWnd, _T("COMBOBOX"));
auto stateBG = ...; // depends on window state
DrawThemeBackground(m_hTheme, ps.hdc, CP_READONLY, stateBG, &clientRect, nullptr);

给出正确的背景(只读外观)没有雪佛龙。但是我该怎么添加雪佛龙呢?

代码语言:javascript
复制
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,它返回完整的客户端矩形,因此提示文本对齐很差。这是..。正常吗?

EN

回答 2

Stack Overflow用户

发布于 2020-12-05 10:38:57

你试过用CP_DROPDOWNBUTTON代替CP_DROPDOWNBUTTONRIGHT吗?

票数 1
EN

Stack Overflow用户

发布于 2021-11-23 11:21:34

作为一种解决方法,您可以使用ClipRect of DrawThemeBackground来切断下拉按钮的左侧边缘。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65055736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档