【问题标题】:WM_CTLCOLORSTATIC lParam, C++ WINAPIWM_CTLCOLORSTATIC lParam,C++ WINAPI
【发布时间】:2013-12-18 13:13:26
【问题描述】:

我正在尝试在我的对话框窗口过程中包含,当收到消息 WM_CTLCOLORSTATIC 时,我会获得发送消息的控件的 ID。

case WM_CTLCOLORSTATIC: 
        UINT ID = GetWindowLong((HWND)lParam, GWL_ID);

问题是...当我尝试对 WM_CTLCOLORSTATIC 的 lParam 进行类型转换时,它返回值 65535,这是不正确的;我什至没有最大 UINT ID 为 65535 的资源项。

你能告诉我为什么会这样吗?

【问题讨论】:

  • 你是说窗口句柄(lParam)是65535吗?或者GetWindowLong 的结果是65535?请澄清您的问题。
  • GetWindowLong 已弃用,因为它不支持 x64 平台,正确的函数是 GetWindowLongPtr
  • 我用 CTLCOLORSTATIC 的参数“lParam”和 GWL_ 消息“GWL_ID”调用了 GetWindowLong。因此 GetWindowLong 应该返回发送消息 CTLCOLORSTATIC 的控件的 UINT ID。但事实并非如此。它返回 65535。

标签: c++ winapi resource-id getwindowlong


【解决方案1】:

您的问题不是很清楚,但我猜您的 ID 为 65535,即 -1,这对于静态控件 ID 来说是相当标准的。

如果您希望能够区分静态控件,请给它们不同的 ID。

如果您不关心其他静态控件的颜色,只需使用:

if ( ID ==  IDC_RECT_CC_00 ) {
    [...]
} else {
    // don't bother
}

【讨论】:

  • 正确。即使有一个常数:IDC_STATIC.
  • 他们都有不同的ID。此控件的 ID 是#define IDC_RECT_CC_00 1000
  • 每个静态控件将 WM_CTLCOLORSTATIC 发送给它的父级。你有一个 ID 为 -1 的静态控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2014-01-31
  • 2013-03-22
相关资源
最近更新 更多