WM_SETTINGCHANGE是如何产生的啊?

tieshashi 2007-12-29 01:19:07
RT,好像程序一启动这个消息就被发送运行了
...全文
685 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang_512113110 2011-12-02
  • 打赏
  • 举报
回复
调用SystemParametersInfo 函数相当于使用系统 控制面板,可以设置很多系统选项,这些设置的改变通常会影响系统上运行的所有程序。所以不管是调用 SystemParametersInfo 还是通过控制面板修改设置,系统中运行的程序都会收到 WM_SETTINGCHANGE 消息。
Poseidonzhou 2008-09-21
  • 打赏
  • 举报
回复
原来如此,我之前也没看懂啊,不过看了这个还是不明白WM_SETTINGCHANGE什么时候产生诶。。
tieshashi 2007-12-29
  • 打赏
  • 举报
回复
汗,真没注意那儿,看习惯了,多谢了
zhoujianhei 2007-12-29
  • 打赏
  • 举报
回复
呵呵,注意看代码啊你
     switch (message)
{
case WM_CREATE:
hBrushRed = CreateSolidBrush (RGB (255, 0, 0)) ;
SetTimer (hwnd, ID_TIMER, 1000, NULL) ;

// fall through
// break; 源程序中没有这个

case WM_SETTINGCHANGE:
GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2) ;
f24Hour = (szBuffer[0] == '1') ;

GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2) ;
fSuppress = (szBuffer[0] == '0') ;

InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;

实际上是 WM_CREATE 消息,程序启动的时候并不是 WM_SETTINGCHANGE。
tieshashi 2007-12-29
  • 打赏
  • 举报
回复
case WM_SETTINGCHANGE:
GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITIME, szBuffer, 2) ;
f24Hour = (szBuffer[0] == '1') ;

GetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_ITLZERO, szBuffer, 2) ;
fSuppress = (szBuffer[0] == '1') ;

InvalidateRect (hwnd, NULL, TRUE) ;
return 0 ;

这是源码,不知道有没有看过这个程序,如果我把 f24Hour = (szBuffer[0] == '1') 最后面的1改为0,程序运行会不一样的,
说明程序一运行就收到WM_SETTINGCHANGE消息,此程序在windows程序设计 程序8-3 DIGCLOCK 中,希望熟悉的人解下惑


jameshooo 2007-12-29
  • 打赏
  • 举报
回复
系统策略设置发生改变。在组编辑器里可以查看各种策略
zhoujianhei 2007-12-29
  • 打赏
  • 举报
回复
WIN32应用程序不会发,除非系统配置变动。
WM_SETTINGCHANGE

如果是MFC的就不能确定了。
tieshashi 2007-12-29
  • 打赏
  • 举报
回复
我看的是WINDOWS程序设计定时器那个时钟的程序例子
when the SystemParametersInfo function changes a system-wide setting or when policy settings have changed.

SystemParametersInfo 函数没看到,应该是后面那个WHEN了,可是无法理解这是什么意思.....
shakaqrj 2007-12-29
  • 打赏
  • 举报
回复
但是貌似在WINDOWS程序设计中
之前就产生了,我也不知道怎么回事

case WM_SETTINGCHANGE:

SystemParametersInfo (SPI_GETWHEELSCROLLLINES, 0, &ulScrollLines, 0) ;



// ulScrollLines usually equals 3 or 0 (for no scrolling)

// WHEEL_DELTA equals 120, so iDeltaPerLine will be 40


if (ulScrollLines)

iDeltaPerLine = WHEEL_DELTA / ulScrollLines ;

else

iDeltaPerLine = 0 ;


return 0 ;
shakaqrj 2007-12-29
  • 打赏
  • 举报
回复
The system sends the WM_SETTINGCHANGE message to all top-level windows when the SystemParametersInfo function changes a system-wide setting or when policy settings have changed.

hchack 2007-12-29
  • 打赏
  • 举报
回复
The framework calls OnSettingChange for all top-level windows when the Win32 SystemParametersInfo function changes a system-wide setting.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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