现在要求挺简单的 就是希望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标签颜色简简单单的一致 

解决方案 »

  1.   

    这个不需要那么麻烦。我曾经因为这个困扰了很久,当时也是按控件区分,而且还得根据控件是否禁用以及只读等情形来分别判断。即便这样,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 原生的格格不入,一灰一白。
      

  2.   

    感谢SXJIAKE分享,学习了
      

  3.   

    少了 FreeLibrary,务必添加。