自定义win32窗口的消息无法监测,窗口注册类不能被注销。

来源:互联网 发布:国服mac版魔兽世界 编辑:程序博客网 时间:2024/05/25 19:56

    win32自定义窗口无法监测到message,记住create窗口的线程要和该窗口消息循环监测在同一个线程,消息循环监测类似这种结构:

while (m_threadHandleFlag && (gm = ::GetMessage(&msg, NULL, 0, 0)) != 0 && gm != -1)
{
if (m_videoWnd  && !m_videoWnd->PreTranslateMessage(&msg))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
 

    如果create和消息循环不再同一个线程,也可以,你可以做线程之间消息的转发!消息还是可以跨线程传递的,不过这个很复杂,既然事情能简单为什么不简单地做呢。

    在做win32自定义窗口的过成中遇到了另外一个小问题,因为自定义窗口是依靠纯win32 API创建的,所以要自己注册窗口类,这样窗口才能正常地显示出来并可识别,但是在该窗口关闭后需要UnRegisterClass,不然下次使用RegisterClassEx注册同样名字的窗口的时候将会失败,你可以换名字,但是如果不反注册掉之前注册过的窗口类,该窗口类所占的一些内存资源,将不会被释放,这是不明智的,不过在反注册该窗口类的时候,该窗口类必须没有窗口实例在运行,若有,反注册该窗口类将会失败!