小弟学习Win32程序设计,碰到一个问题。 
标准的win32程序,最少包含两个函数:WinMain()   和   WinProc();然后在WinMain()函数中创建窗口,进行消息循环[执行GetMessage、TranslateMessage、DispatchMessage操作],在WinProc中处理消息。 
现在的问题是: 
        如果我要在一个程序中动态注册和创建一个窗口(使用Win32API   ::CreateWindow),这样我需要一个自己的消息处理体和一个消息循环体;消息处理比较容易,消息循环还是用上面的方法的话,会出现   主进程调用时挂起的问题。现在我只能创建一个线程来处理消息循环,这样的直接后果就是创建N个窗口的时候,同时创建了2*N个线程,导致系统资源开销剧增和其他线程安全上的问题。 所以小弟想请教一下各位牛人,有没有什么好的方法来解决这个问题,消息循环怎么做能最好? PS:看了一些MFC处理这方面的文章,基本上讲的都是如何处理消息分发的,而没有消息获得,循环方面的。

解决方案 »

  1.   

    PeekMessage(&msg,NULL,0,0,PM_NOREMOVE);
    while(msg.message != WM_QUIT)
    {
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
         TranslateMessage(&msg);
         DispthMessage(&msg);
      }  
      else
      {
      //空闲处理
       OnIdle();
      }}
      

  2.   

    PeekMessage(&msg,NULL,0,0,PM_NOREMOVE); 
    while(msg.message   !=   WM_QUIT) 

        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) 
        { 
              TranslateMessage(&msg); 
              DispathMessage(&msg); 
        }     
        else 
        { 
        //空闲处理 
          OnIdle(); 
        } }