我正在尝试在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 :(得分:0)
对于未处理的邮件,TextChatDlgProc()
需要调用返回FALSE(默认值:switch case)DefWindowProc()
unhandled messages
答案 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()
开始执行此操作。