2013-05-31 22 views
0

我想實現一個菜單項上的聊天窗口點擊主窗口在win32中。我創建了一個主窗口和正在處理的聊天窗口以下列方式:豐富的編輯控件沒有加載菜單項上的子窗口點擊主窗口內

int CALLBACK TextChat::TextChatDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    LPDRAWITEMSTRUCT pdis; 
    static HBRUSH hBrush; 
    static COLORREF GrayColor; 

    switch (uMsg) 
    { 
     case WM_COMMAND: 
      switch (LOWORD(wParam)) 
      { 

      } 
      break; 
     case WM_CLOSE: 
      EndDialog(hwndDlg, 1); 
      return true;   
      break; 





     case WM_INITDIALOG: 
     { 


      CentreWindow(hwndDlg); 
      ShowWindow(hwndDlg,SW_SHOW); 
      UpdateWindow(hwndDlg); 
      return TRUE; 

     } 
    } 
    return 0; 
} 
int TextChat::DoDialog() 
{ 

    //CreateWindowEx(


    return DialogBoxParam(this->m_pApp->m_instance,MAKEINTRESOURCE(IDD_CHAT_DIALOG), 
     NULL, (DLGPROC) TextChatDlgProc, (LONG) this->m_pCC); 
} 

而且從我的菜單項CLIC主窗口中,我這樣做的方式如下:

case WM_SYSCOMMAND: 
     { 
      switch (LOWORD(wParam)) 
      { 
       case ID_TEXT_CHAT: 
        if(thisClass->m_pTextChat == NULL) 
         thisClass->m_pTextChat = new TextChat(thisClass->m_pApp,thisClass); 
        thisClass->m_pTextChat->DoDialog(); 

所以我正在使用VS2008,並且在調試時,調試器進入TextChatDlgProc內部,但是永遠不會進入WM_INITDIALOG內部並返回。因此,聊天窗口(資源IDD_CHAT_DIALOG)永遠不會顯示。任何指向解決這個問題的指針都非常感謝。 TIA

問候, GRV

+0

當你進入'TextCharDlgProc'時,你可以看看'uMsg'的值嗎? – rodrigo

+0

無論如何,我的猜測是對話框的創建失敗了,要麼是因爲模板有些怪異,要麼是因爲它無法在指定的模塊中找到。 – rodrigo

+0

@rodrigo:它開始於48開始,然後變化,但它永遠不會去WM_INITDIALOG,我想知道我可能會出錯 – grv

回答

0

你說在註釋中,該對話框中有豐富的編輯控制。這是關鍵!

在使用這些控件之前,您必須手動加載相關庫。其中之一:

LoadLibrary(TEXT("Msftedit.dll")); // for MSFTEDIT_CLASS 
LoadLibrary(TEXT("Riched32.dll")); // for RICHEDIT_CLASS 3.2 
LoadLibrary(TEXT("Riched20.dll")); // for RICHEDIT_CLASS 2.0 

您可以從WinMain()只做一次。

0

TextChatDlgProc()需要 電話 DefWindowProc()unhandled messages 返回FALSE未處理消息(默認:開關的情況下)

+0

這是一個'DlgProc',而不是'WndProc'。他應該只返回'FALSE'或'0'來處理未處理的消息。 – rodrigo

+0

@rodrigo你是對的,編輯我的回答 –

+1

返回類型是錯誤的。它應該是INT_PTR。否則,它將在編譯爲64位時表現不正常。 –