如何知道winXP正在更换桌面主题
各位大侠好:
我的一个程序一运行起来后,通过和另一个程序之间消息互发来传递信息。可是在WinXP下一更换桌面主题,就使程序中的Timer在规定计时中收不到应答消息,从而状态重置,我想在更换桌面主题的情况下,延长计时,可我如何才能知道Windows正在更换桌面呢。请给一点指示。
问题点数:80、回复次数:4Top
1 楼hxh76ahei(ah hei)回复于 2006-05-04 16:43:56 得分 0
另外,我这个程序一起来后,就在NcPaint()中把对话框隐藏了,进入了托盘,所以好象接不到ON_WM_DRAWITEM的消息。还可以接那个消息判定在更换桌面吗?Top
2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-05-04 17:12:54 得分 80
U can handle WM_THEMECHANGED Notification.
Minimum operating systems: Windows XPTop
3 楼hxh76ahei(ah hei)回复于 2006-05-04 18:48:54 得分 0
多谢大侠指点。救我等菜鸟于水深火热之中,看来我要在WindowProc中用条件编绎处理WM_THEMECHANGED 了。还没实战过条件编绎呢。看来凶多吉少啊。多谢指点。Top
4 楼hxh76ahei(ah hei)回复于 2006-05-04 22:53:58 得分 0
的确还是有很多问题。我用的是VC6.0,两个程序,一个是我做的,另一个是别人做的,只是双方定义的消息。我的程序一运行就变成托盘和对方发消息交流。可在winxp上时,在运行状态一更换桌面主题就会导致在规定时间中收不消息而状态得重置,上面的大佬提示可以处理WM_THEMECHANGED, 我如下处理:
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#endif
#ifndef WM_THEMECHANGED
#define WM_THEMECHANGED (WM_USER + 8000)
#endif
在LRESULT CSCDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
#if _WIN32_WINNT >= 0x0501
case WM_THEMECHANGED:
span = 50000;
::MessageBox(NULL, "received the change","", MB_OK);
changetable = TRUE;
break;
#endif
然而程序编绎后在WINXP中运行时,没有对话框弹出,我想处理WM_NOTIFY,但是也没有动静,该如何是好呢?请各位老大再给点指点。Top




