CWnd建立WS_CHILD和WS_POPUP視窗的不同

來源:互聯網
上載者:User

                         CWnd建立WS_CHILD和WS_POPUP視窗的不同

          最近在寫一個從CWnd派生出來的自繪視窗,以前在封裝自己的類的Create函數都是這麼寫的:

           BOOL CGG::Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, CCreateContext *pContext)<br />{<br />if (!CWnd::Create(GUOGUOTIPSUPWINDOW_CLASSNAME, NULL, dwStyle, rect, pParentWnd, nID, pContext))<br />return FALSE;</p><p> return true;<br />}<br />

         這次也這麼寫,以前都是建立的WS_CHILD的視窗,都是這麼調用的:

    DWORD  style=WS_CHILD|WS_OVERLAPPED;
    m_tooltips.Create(style,CRect(0,0,300,300),NULLthis,NULL,NULL);

    沒有任何問題。

     這次要建立一個WS_POPUP類型的視窗,當然就按照下面這麼調用了:

    DWORD  style=WS_POPUP|WS_OVERLAPPED;
    m_tooltips.Create(style,CRect(0,0,300,300),NULL,NULL,NULL);

    但是,結果卻crash了,鬱悶了。

    查了半天發現,原來是Create函數的實現出了問題。

     CWnd::Create函數只能建立非WS_POPUP的視窗風格的視窗。而如果要建立WS_POPUP的視窗和有擴充風格的視窗,必須調用CWnd::CreateEx才能搞定。

     MSDN對Create的說明:

    

     Creates and initializes the child window associated with the CWnd object.

 

 

     MSDN對CreateEx的說明:

    Creates a Windows overlapped, pop-up, or child window and attaches it to a  CWnd object.

   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.