我正在尝试制作一个在父窗口中显示控制台窗口的小类。(你可以想象那里显示聊天或调试信息)
现在,由于不同的实例确实有不同的私有变量(例如消息数组或父窗口),我需要使用非静态方法作为 Windows 事件的回调。
我已经想到了一些方法,我将实际的类实例传递给静态回调函数,然后在其上调用正确的方法,但是在 winAPI 中,一切都是使用完成的TranslateMessage
,DispatchMessage
我没有机会使用自己的参数。
我在这里找到了一些代码:Class method as winAPI callback,但我不明白,我认为这不是我所需要的。如果是,那么请给我提供的代码的进一步解释。
我得到的错误:
错误:'LRESULT (
WindowConsole::
)(HWND__ , UINT, WPARAM, LPARAM)' 类型的参数不匹配 'LRESULT (*
)(HWND__ , UINT, 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;
}