win32除了窗口函数,有没别的可以获取msg事件的函数?该如何处理
win32除了窗口函数,有没别的可以获取msg事件的函数?
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
...
}
上面是一个最基本的窗口函数
但是我不想让我的代码走这个函数(我只想将我的代码全部放到主循环中),而却只想得到他的msg事件,那有什么函数可以即时获取么?就像GetKeyState()一样?
PS:我在设计UI,其中使用到了IME输入法,这需要依赖win32的消息事件,但是我不愿意将我的代码放到窗口函数里,因为我觉得这样太丑陋了,但是我又需要win32这些消息,我不知道如何将这一调用过程设计的优雅些。
------解决方案--------------------
在你的while()循环中处理?
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
...
}
上面是一个最基本的窗口函数
但是我不想让我的代码走这个函数(我只想将我的代码全部放到主循环中),而却只想得到他的msg事件,那有什么函数可以即时获取么?就像GetKeyState()一样?
PS:我在设计UI,其中使用到了IME输入法,这需要依赖win32的消息事件,但是我不愿意将我的代码放到窗口函数里,因为我觉得这样太丑陋了,但是我又需要win32这些消息,我不知道如何将这一调用过程设计的优雅些。
------解决方案--------------------
在你的while()循环中处理?
- C/C++ code
while(GetMessage(&msg, NULL, 0, 0)) { switch(msg.message) { case ...: ... break; ... default: break; } TranslateMessage(&msg); DispatchMessage(&msg); }
------解决方案--------------------
非队列消息只能在窗口过程得到,队列消息可以在消息循环得到
------解决方案--------------------
PS:我在设计UI,其中使用到了IME输入法,这需要依赖win32的消息事件,但是我不愿意将我的代码放到窗口函数里,因为我觉得这样太丑陋了,但是我又需要win32这些消息,我不知道如何将这一调用过程设计的优雅些。
你可以采用观察者模式建立联系