TabControl控件颜色问题

debugmonkey 2013-06-17 03:34:17
现在要求挺简单的 就是希望tab标签页面(就是创建的那个对话框)的颜色和tab标签的颜色一样 参考msconfig.exe
我的做法是这样的 tab标签页的对话框重载了 OnCtlColor 这个函数 这个函数返回的刷子 是CreateSolidBrush(GetBkColor(::GetDC(GetDlgItem(IDC_TAB_MAIN)->GetSafeHwnd()))); 这样创建的 IDC_TAB_MAIN 就是tabcontrol的id
现在这个界面在Windows 8下没问题 Windows xp下也没问题 tab页面和tab标签颜色一样 都被刷成白色的了 但是在 Windows Xp的经典风格下 就不一样了 tab标签不是白色 但是tab标签页却是白色的

目前想实现的就是让tab页面和 tab标签颜色简简单单的一致
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
debugmonkey 2013-06-18
  • 打赏
  • 举报
回复
引用 1 楼 SXJIAKE 的回复:
这个不需要那么麻烦。我曾经因为这个困扰了很久,当时也是按控件区分,而且还得根据控件是否禁用以及只读等情形来分别判断。即便这样,Edit 控件的四个角也有四个黑点。在多方查找资料后,才知道微软已经提供了一个函数直接让对话框与 Tab 具有一样的颜色。但是鉴于这个程序可能还会在 Windows 2000 下运行,所以还是用动态加载的方式来调用函数:
typedef HRESULT (WINAPI *PFNETDT)(HWND, DWORD);

HRESULT EnableDialogTexture(HWND hwnd)
{
    PFNETDT pfn;
    HMODULE hModule;
    hModule = LoadLibrary(TEXT("uxtheme.dll"));
    if (hModule != NULL) {
        pfn = (PFNETDT)GetProcAddress(hModule, "EnableThemeDialogTexture");
        if (pfn != NULL) {
            return (*pfn)(hwnd, ETDT_USETABTEXTURE);
        }
    }
    return E_FAIL;
}
这是 C 风格的。如果你在 MFC 中用,当然两个函数前都要加两个冒号。对于你创建出来的位于 Tab 上的对话框来说,只需要这么一句即可让对话框与当前 Tab 一样的颜色:
EnableDialogTexture(GetSafeHwnd())
这里传入的参数是 Tab 控件上的对话框的 HWND。这个问题恐怕相当大部分的程序员不知道,包括 Windows 上的很多扩展 dll,在文件属性中加入了 Tab,但是颜色在部分主题下 Windows 原生的格格不入,一灰一白。
太帅了 解决了 谢谢
「已注销」 2013-06-18
  • 打赏
  • 举报
回复
少了 FreeLibrary,务必添加。
邓学彬 2013-06-17
  • 打赏
  • 举报
回复
感谢SXJIAKE分享,学习了
「已注销」 2013-06-17
  • 打赏
  • 举报
回复
这个不需要那么麻烦。我曾经因为这个困扰了很久,当时也是按控件区分,而且还得根据控件是否禁用以及只读等情形来分别判断。即便这样,Edit 控件的四个角也有四个黑点。在多方查找资料后,才知道微软已经提供了一个函数直接让对话框与 Tab 具有一样的颜色。但是鉴于这个程序可能还会在 Windows 2000 下运行,所以还是用动态加载的方式来调用函数:
typedef HRESULT (WINAPI *PFNETDT)(HWND, DWORD);

HRESULT EnableDialogTexture(HWND hwnd)
{
    PFNETDT pfn;
    HMODULE hModule;
    hModule = LoadLibrary(TEXT("uxtheme.dll"));
    if (hModule != NULL) {
        pfn = (PFNETDT)GetProcAddress(hModule, "EnableThemeDialogTexture");
        if (pfn != NULL) {
            return (*pfn)(hwnd, ETDT_USETABTEXTURE);
        }
    }
    return E_FAIL;
}
这是 C 风格的。如果你在 MFC 中用,当然两个函数前都要加两个冒号。对于你创建出来的位于 Tab 上的对话框来说,只需要这么一句即可让对话框与当前 Tab 一样的颜色:
EnableDialogTexture(GetSafeHwnd())
这里传入的参数是 Tab 控件上的对话框的 HWND。这个问题恐怕相当大部分的程序员不知道,包括 Windows 上的很多扩展 dll,在文件属性中加入了 Tab,但是颜色在部分主题下 Windows 原生的格格不入,一灰一白。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧