gpt4 book ai didi

c++ - UXTheme:绘制无边框的组合框雪佛龙

转载 作者:行者123 更新时间:2023-12-03 11:06:56 24 4
gpt4 key购买 nike

我正在尝试绘制一个应该使用“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 中居中。所以如果我使用完整的客户端矩形,我会得到这个:

combobox centered chevron

如果我使用较小的矩形以便正确定位人字形,我会得到一个单独的下拉列表:

combobox boxed chevron

如何获得“正常”外观? - 即像这样:

enter image description here


奖励问题:

有没有比 MSDN 做得更好的文档?它与大多数较新的文档一样稀疏,例如只是列出“部件和状态”,而不描述它们的用途(这并不总是很明显),以及它是 DrawThemeBackground 还是 ~Edge 用于特定项目。

我是否仍然使用旧的 DrawFocusRect 作为焦点矩形?

GetThemeBackgroundContentRect 计算 iPartId=CP_READONLY 的预期矩形,但对于 iPartId=CP_CUEBANNER,它返回完整的客户矩形,因此提示文字对齐不当。这……正常吗?

最佳答案

您是否尝试过将 CP_DROPDOWNBUTTON 替换为 CP_DROPDOWNBUTTONRIGHT

关于c++ - UXTheme:绘制无边框的组合框雪佛龙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65055736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com