美文网首页
peerconnection_client的MainWnd分析(

peerconnection_client的MainWnd分析(

作者: 奔向火星005 | 来源:发表于2017-05-14 09:05 被阅读0次

    MainWnd中使用的就是MFC的消息机制,在此复习一下MFC吧

    在MainWnd::Create()中,调用RegisterWindowClass():

    bool MainWnd::RegisterWindowClass() {
      if (wnd_class_)
        return true;
    
      WNDCLASSEX wcex = { sizeof(WNDCLASSEX) };
      wcex.style = CS_DBLCLKS;
      wcex.hInstance = GetModuleHandle(NULL);
      wcex.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);
      wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW);
      wcex.lpfnWndProc = &WndProc;  //注册消息处理函数
      wcex.lpszClassName = kClassName;
      wnd_class_ = ::RegisterClassEx(&wcex);
      ASSERT(wnd_class_ != 0);
      return wnd_class_ != 0;
    }
    

    MainWnd中发送消息为调用:

    PostMessage(wnd_, WM_COMMAND, ...)
    

    其中wnd_为接收消息的窗口句柄,MainWnd中接收消息的函数就是上面注册的WndProc:

    LRESULT CALLBACK MainWnd::WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
      MainWnd* me = reinterpret_cast<MainWnd*>(
          ::GetWindowLongPtr(hwnd, GWLP_USERDATA));
      if (!me && WM_CREATE == msg) {
        CREATESTRUCT* cs = reinterpret_cast<CREATESTRUCT*>(lp);
        me = reinterpret_cast<MainWnd*>(cs->lpCreateParams);
        me->wnd_ = hwnd;
        ::SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(me));
      }
    
      LRESULT result = 0;
      if (me) {
        void* prev_nested_msg = me->nested_msg_;
        me->nested_msg_ = &msg;
    
        bool handled = me->OnMessage(msg, wp, lp, &result);
        if (WM_NCDESTROY == msg) {
          me->destroyed_ = true;
        } else if (!handled) {
          result = ::DefWindowProc(hwnd, msg, wp, lp);
        }
    
        if (me->destroyed_ && prev_nested_msg == NULL) {
          me->OnDestroyed();
          me->wnd_ = NULL;
          me->destroyed_ = false;
        }
    
        me->nested_msg_ = prev_nested_msg;
      } else {
        result = ::DefWindowProc(hwnd, msg, wp, lp);
      }
    
      return result;
    }
    

    相关文章

      网友评论

          本文标题:peerconnection_client的MainWnd分析(

          本文链接:https://www.haomeiwen.com/subject/vuafxxtx.html