具有丰富编辑控件的子窗口未在菜单项上加载在主窗口内单击

时间:2013-05-31 07:45:30

标签: c++ windows winapi visual-c++ mfc

我正在尝试在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

2 个答案:

答案 0 :(得分:0)

对于未处理的邮件,TextChatDlgProc()需要调用DefWindowProc() unhandled messages 返回FALSE(默认值:switch case)

答案 1 :(得分: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()开始执行此操作。