Windows 更改进度条中的颜色win 32

Windows 更改进度条中的颜色win 32,windows,winapi,visual-c++,Windows,Winapi,Visual C++,我试图通过以下方式更改win 32进度条中背景和条的颜色: HWND hwndPB =CreateWindowEx(0, PROGRESS_CLASS, NULL, WS_CHILD | WS_VISIBLE |PBS_SMOOTHREVERSE | PBS_MARQUEE , 20, 50, 275, 20, hwndDlg, NULL,NULL , NULL); SetWindowLongPtr(hwndDlg,GWLP_USERDATA,reinterpret_c

我试图通过以下方式更改win 32进度条中背景和条的颜色:

HWND hwndPB =CreateWindowEx(0, PROGRESS_CLASS, NULL,
    WS_CHILD | WS_VISIBLE |PBS_SMOOTHREVERSE | PBS_MARQUEE ,
    20, 50, 275, 20,
    hwndDlg, NULL,NULL , NULL);

SetWindowLongPtr(hwndDlg,GWLP_USERDATA,reinterpret_cast<LONG_PTR>(hwndPB));
SendMessage(hwndPB,(UINT)PBM_SETBKCOLOR,0,RGB(200,200,200));
SendMessage(hwndPB,(UINT) PBM_SETBARCOLOR,0,(LPARAM)RGB(100,100,100));
SendMessage(hwndPB,(UINT) PBM_SETMARQUEE,(WPARAM) TRUE,(LPARAM)50 );
HWND hwndPB=CreateWindowEx(0,进度类,空,
WS|U CHILD | WS|U VISIBLE | PBS|U SMOOTHREVERSE | PBS|U MARQUEE,
20, 50, 275, 20,
hwndDlg,NULL,NULL,NULL);
SetWindowLongPtr(hwndDlg、GWLP_用户数据、重新解释(hwndPB));
发送消息(hwndPB,(UINT)PBM_SETBKCOLOR,0,RGB(200200));
SendMessage(hwndPB,(UINT)PBM_SETBARCOLOR,0,(lpram)RGB(100100));
发送消息(hwndPB,(UINT)PBM_SETMARQUEE,(WPARAM)TRUE,(LPARAM)50);

我想这是不工作,因为视觉主题被启用。有人能给我建议一种方法来完成它或禁用视觉样式吗。我用的是VS2008。此外,它是一个非mfc应用程序。

您可以通过调用禁用单个控件的主题。对于进度条,禁用主题设置,如下所示:

SetWindowTheme(hwndPB, "", "");

禁用主题设置后,您将能够控制颜色。

您可以通过调用禁用单个控件的主题。对于进度条,禁用主题设置,如下所示:

SetWindowTheme(hwndPB, "", "");


禁用主题后,您将能够控制颜色。

禁用视觉样式是用户的选择,因此您不应该这样做。--我想自己画进度条应该很容易,如果它很简单的话。@peterchen:谢谢。有没有一种方法可以自定义进度条,而不用使用win 32命令重新绘制进度条。@peterchen你自相矛盾。一方面,您建议用户控制此控件的外观。然后你建议grv绘制控件,从而使控件脱离用户的手。@DavidHeffernan:我不建议关闭整个系统的视觉样式(显然是用户登陆的),也不建议关闭整个应用程序的视觉样式,因为一个或两个控件看起来应该没有区别。单个自定义绘制控件对用户体验的影响要小得多。进度条的颜色可以作为其他可用信息的视觉提示,只是不够整洁。禁用视觉样式是用户的选择,因此您不应该这样做。--我想自己画进度条应该很容易,如果它很简单的话。@peterchen:谢谢。有没有一种方法可以自定义进度条,而不用使用win 32命令重新绘制进度条。@peterchen你自相矛盾。一方面,您建议用户控制此控件的外观。然后你建议grv绘制控件,从而使控件脱离用户的手。@DavidHeffernan:我不建议关闭整个系统的视觉样式(显然是用户登陆的),也不建议关闭整个应用程序的视觉样式,因为一个或两个控件看起来应该没有区别。单个自定义绘制控件对用户体验的影响要小得多。进度条的颜色可以作为其他可用信息的视觉提示,只是不够整洁。看起来我可能在这里遗漏了什么,并出现以下编译错误:错误C3861:“SetWindowTheme”:找不到标识符。。你能帮我解释一下吗?请阅读我提供的MSDN文档链接。您需要包含
Uxtheme.h
并将
Uxtheme.lib
传递给链接器。这些MSDN文档主题都遵循相同的模板。查看主题底部的需求。请注意,您需要将XP的最低版本定为能够使用主题API的目标。@grv您希望得到更多吗?我想这正是你想要的。非常感谢大卫。我一直在尝试,但在应用程序中遇到了一些其他错误。一旦我能解决它,我希望我能得到结果。谢谢!!我想先完成这个问题。在整个程序完成之前,您是否要继续在注释中询问不同的问题?看起来我可能在这里遗漏了一些内容,并出现以下编译错误:错误C3861:“SetWindowTheme”:找不到标识符。。你能帮我解释一下吗?请阅读我提供的MSDN文档链接。您需要包含
Uxtheme.h
并将
Uxtheme.lib
传递给链接器。这些MSDN文档主题都遵循相同的模板。查看主题底部的需求。请注意,您需要将XP的最低版本定为能够使用主题API的目标。@grv您希望得到更多吗?我想这正是你想要的。非常感谢大卫。我一直在尝试,但在应用程序中遇到了一些其他错误。一旦我能解决它,我希望我能得到结果。谢谢!!我想先完成这个问题。在你的整个计划完成之前,你会继续在评论中问不同的问题吗?