到底什么是消息循环,是不是专门的一个线程来负责接收消息?
while (GetMessage (&msg, NULL, 0, 0))
     {
          TranslateMessage (&msg) ;
          DispatchMessage (&msg) ;
     }
     return msg.wParam ;这段代码究竟是谁来执行?是创建窗口的线程吗?
我概念有点问题,麻烦教教,谢谢 

解决方案 »

  1.   

    貌似是只要有操作产生消息,germessage()都会获取,并进行转换translatemessage()和传递dispatchmessage(),每当消息产生就进行这几个操作(也就是循环)!
      

  2.   

    消息循环 CWinThread* pThread = AfxGetThread();
            pThread->Run();
            执行消息循环。。1、在MFC中,创建一个窗口的过程是:    1、生成一个对应窗口类的对象    2、调用该对象的Create()或CreateEx()方法    3、在CreateEx()中(Create()是调用CreateEx()实现的),先调用虚拟函数PreCreateWindow(),让应用程序有一个改变窗口行为的机会,同时,在PreCreateWindow中,还作了一件很重要的事情,就是如果指向窗口类的字符串指针为NULL,就调用AfxDeferRegisterClass()注册一个合适的窗口类,将该注册的窗口类作为创建窗口的类型参数。AfxDeferRegisterClass()就是AfxEndDeferRegisterClass(),后者根据参数注册相应的窗口类,并将DefWindowProc作为该窗口类的临时窗口函数。    4、CreateEx()在调用CreateWindowEx()创建真正的窗口对象之前,设置一个线程级的CBT Hook,该hook在窗口创建完成后被调用,MFC在hook函数中调用SetWindowLong()将该窗口的窗口函数置换成AfxWndProc。  2、从Window的角度看,任何一个MFC应用程序都只有一个窗口函数AfxWndProc。  3、AfxWndProc的作用是截获所有的发送给窗口消息,并将这些消息发送给相应的窗口对象的窗口函数WindowProc处理,所以它实质上是一个窗口消息分发器,注意,非窗口消息不被AfxWndProc所分发,它们在AfxWndProc被调用之前就被CWinThread::PreTranslateMessage()处理过了。  4、同PreTranslateMessage()不同的地方在于,AfxWndProc()能够截获所有的来自于消息队列的和非消息队列的窗口消息(如调用SendMessage()发送的窗口消息)。
      

  3.   

    1.整个系统有一个消息队列。你的每次操作产生的消息都先到这个队列。
    2.每个创建窗口的线程都有一个消息队列。系统消息队列把消息转发到每个线程的消息队列。
    3.如果你的线程想要处理这个线程产生的界面的消息,你就要写一个消息队列,从这个线程的消息队列中取出消息(GetMessage),把消息转发给相应的窗口过程(DispatchMessage),如果需要的话可以把虚拟键消息转换为字符消息(TranslateMessage).你可以看看MSDN上 Messages and Message Queues 一章吧,哈哈~
      

  4.   

    在问下,c++是怎么创建窗口的,是Createwindow吗?