【问题标题】:Is there a message or notification in Win32 that detects when user changes locale?Win32 中是否有检测用户更改区域设置的消息或通知?
【发布时间】:2014-02-03 06:39:43
【问题描述】:

编辑:

根据社区的 cmets 减少和优化问题。问题的删除部分将作为单独的问题发布。

问题:

Win32 API 中是否有任何WM_SOMETHINGNM_SOMETHING 消息可以通知我有关用户更改locale 的信息?

您看,我可以使用该消息/通知将我的程序的locale更改为当前的locale

类似这样的伪代码:

case WM_SOMETHING: // in my main window procedure
    _wsetlocale( LC_ALL, L"" );

另外,如果有这样的消息,我按照上面的伪代码处理它,它会调整只调整主窗口的locale还是也设置locale用于子对话框和控件?。

我为解决这个问题所做的努力:

上网浏览后,只找到WM_INPUTLANGCHANGEWM_SETTINGCHANGEWM_INPUTLANGCHANGEREQUEST的消息,但我没用过,不知道能不能解决我的问题。

谢谢。

最好的问候。

【问题讨论】:

    标签: c++ winapi locale


    【解决方案1】:

    Windows 发送WM_SETTINGCHANGE 消息,其中wParam 设置为0lParam 设置为包含值intl 的字符串。这在 Parameters 部分下WM_SETTINGCHANGE 的文档中有描述:

    w参数 ...

    当系统由于区域设置更改发送此消息时,此参数为零。

    l参数 ...

    当系统由于区域设置更改发送此消息时,此参数指向字符串“intl”。

    您的应用程序需要响应消息并自己在子对话框和控件中进行任何必要的更改。

    【讨论】:

    • 我可以创建一个static 全局变量并更新它以响应此消息。它可以通过在对话框中使用正确的locale 来解决问题。不过,我还有另一个问题——比如我的应用程序在 EN-US (INSERT INTO table VALUES(1.2);) 中收集数据和表单 SQL 查询。在用户点击“保存”之前,他将locale 更改为 EN-CA,然后然后点击“保存”。现在我用1.2 而不是1,2 作为参数得到查询并得到错误。我怎么能解决那个案子?在我的查询执行之前,我无法阻止用户更改locale,因此我必须适应这种情况。有什么想法吗?谢谢。
    • 我使用MS Access 2007ADO 将数据插入数据库。最好的问候。
    • “我该如何解决这个案子?”恐怕我不知道答案,但这将是一个不同的问题。你在这里问的是我回答的那个。 :-)
    • @kittu:这是一条 Windows 消息。您可以像收听任何其他 Windows 消息一样收听它 - 在 wndProc 中的消息处理代码中。
    • @kittu:是​​的,我明白了你的问题。 Remy Lebeau 已经在那里写了一条评论,解释了你做错了什么以及如何正确地做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2012-04-28
    • 2020-06-29
    相关资源
    最近更新 更多