【发布时间】:2013-01-17 16:25:19
【问题描述】:
我正在尝试创建一个在父窗口中显示控制台窗口的小类。 (您可以想象那里显示的聊天或调试信息)
现在,由于不同的实例确实有不同的私有变量(例如消息数组或父窗口),我需要使用非静态方法作为 Windows 事件的回调。
我已经想到了一些方法,我将实际的类实例传递给静态回调函数,然后在其上调用正确的方法,但是在 winAPI 中,一切都是使用 TranslateMessage 和 DispatchMessage 完成的,这让我没有机会使用参数我自己的。
我在这里找到了一些代码:Class method as winAPI callback,但我不明白,我认为这不是我所需要的。如果是,请给我提供的代码的进一步解释。
我得到的错误:
错误:“LRESULT (
WindowConsole::)(HWND__, UINT, WPARAM, LPARAM)”类型的参数不匹配“LRESULT (*)(HWND__,单位, WPARAM, LPARAM)'
我不知道括号中的星号是什么意思,但这是不匹配的。
和代码:
class WindowConsole {
char messages[255][255];
HWND mainWindow;
public:
int width;
int height;
inline HWND create(HWND parent);
inline bool update();
inline LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
};
HWND WindowConsole::create(HWND parent) {
HINSTANCE inst = GetModuleHandle (0);
WNDCLASSEX wincl;
/* The Window structure */
wincl.hInstance = inst;
wincl.lpszClassName = "ConsoleClass";
wincl.lpfnWndProc = this->WndProc; /* This function is called by windows */
/* more WNDCLASSEX crap...*/
mainWindow = CreateWindow (
/*PARAMS*/
);
ShowWindow(mainWindow,1);
return mainWindow;
}
bool WindowConsole::update() {
return true;
}
LRESULT CALLBACK WindowConsole::WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) /* handle the messages */
{
/*EVENT crap*/
}
return 0;
}
【问题讨论】:
-
好吧,他们都没有帮助我。找了很久,找到了很多关于这个问题的话题,但就是没看懂。
-
看看 user16100... 的回答和 msdn-article 的链接...