gpt4 book ai didi

winapi - 作为选项卡页的对话框与它所属的选项卡控件具有不同的背景颜色

转载 作者:行者123 更新时间:2023-12-02 04:20:17 25 4
gpt4 key购买 nike

我正在创建一个带有选项卡控件的对话框。每个选项卡应显示不同的控件集,因此我在资源编辑器中创建了子对话框,使其行为类似于页面。

我使用了 this 中的说明发布来执行此操作。

在资源编辑器中,我制作了没有边框的对话框,将其样式设置为Child,删除了系统菜单,并且设置了标志ControlControl Parenttrue

在我的子对话框过程中,我通过添加 EnableThemeDialgTexture(handleOfmyDialog, ETDT_ENABLETAB); 并返回 TRUE 来处理 WM_INITDIALOG。没有覆盖 WM_ERASEBKGNDWM_PAINTWM_CTLCOLORDLG

在包含选项卡控件的主对话框中,我使用CreateDialog函数创建了“子对话框”,并使用MoveWindow来正确定位它们。

我没有使用 EndDialog 销毁 IDCANCELWM_CLOSE 上的“子对话框”,我认为它们会自动销毁。

我在 Windows 8.1 上使用 Visual Studio 2013 来完成这一切。

在Windows 7和Windows 8.1上似乎没有问题,但也许我的眼睛在欺骗我,因为选项卡控件的背景颜色与对话框的默认背景颜色相似。该问题在 Windows XP 上最为明显,如下图所示:

enter image description here

如何使“子对话框”(及其子控件,如复选框/轨迹栏/单选按钮/静态控件)的背景颜色变得透明(与选项卡控件的背景颜色匹配)?

谢谢。

最佳答案

这是一个非常简单的问题。您在更高版本的 Windows 版本中看不到该错误,因为它们不再使用渐变作为“纹理”。 EnableThemeDialogTexture() 工作得很好,您的对话框肯定与选项卡控件具有相同的纹理。画笔原点从对话框的左上角开始。就像选项卡控件一样。但是对话框的位置不正确,现在渐变未对齐并且对话框不再混合。

您需要移动对话框,使其正确位于选项卡页区域内。相关代码行来自 MSDN article :

// Size the dialog box. 
SetWindowPos(hwndDlg, NULL,
0, 0, // <=== here!
rcTab.right + cyMargin + (2 * GetSystemMetrics(SM_CXDLGFRAME)),
rcTab.bottom + rcButton.bottom + (2 * cyMargin)
+ (2 * GetSystemMetrics(SM_CYDLGFRAME))
+ GetSystemMetrics(SM_CYCAPTION),
SWP_NOMOVE | SWP_NOZORDER);

位于选项卡控件客户区的 (0, 0) 处,现在渐变对齐。

关于winapi - 作为选项卡页的对话框与它所属的选项卡控件具有不同的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788475/

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