-1

为了防止 WM_LBUTTONUP 事件被代码淹没,我决定创建一个包含最初在 WM_LBUTTONUP 上触发的代码的类方法。

例子:

 case WM_LBUTTONUP:
 {//Code that used to trigger on WM_LBUTTONUP below:
  x=4;
  y=2;
  SendMessage(hWnd, CUSTOM_WMMESSAGE, NULL, NULL);
}//The above SendMessage() call works

方法定义:

void Dog::bark(HWND hindow, INT wm_message)
{//All code that used to trigger on WM_LBUTTON up was moved to this method
 x=4;
 y=2;
 SendMessage(hwindow, wm_message, NULL, NULL);
}

之后:

case WM_LBUTTONUP:
{Object.bark();}
//When SendMessage was called this way (inside of a method definition)
//it did not work!

问题:

当未在类方法中使用时,SendMessage() 对 WM_LBUTTONUP 起作用。但是,一旦我从 WM_LBUTTONUP 上的类方法调用 SendMessage(),消息就没有发送(这意味着 SendMessage() 没有,或者从类方法调用时不起作用)。

请注意:

方法定义与 WM_LBUTTON 不在同一个文件中(我想保持这种方式,以防止 main.cpp 填充太多代码:))

编辑

包含类定义的文件名为 Dog.hpp 我将 Dog.hpp 包含在 main.cpp 中。我已经成功创建了其他有效的类方法(在 dog.hpp 内部),所以我知道类或头文件代码没有任何问题。唯一的问题是,当在 dog.hpp 中调用 SendMessage() 函数时,与在 main.cpp 中调用相反,它不起作用。

4

1 回答 1

0

Object.bark()期望您没有传递给它的输入参数。你需要这样做:

case WM_LBUTTONUP:
{
    Object.bark(hWnd, CUSTOM_WMMESSAGE);
    break; // <-- this is missing in your original code as well!
}
于 2012-11-22T00:35:56.523 回答