我正在努力地创建一个对话框。 第一个问题是使对话框本身可见。显示对话框时,它仅在Dialob框内显示控件,但是对话框本身是invisiblem,但是仍然可以按关闭按钮。我通过在对话框属性中添加自定义类名称并注册该类来解决此问题。有人知道问题出在哪里吗?我的一位同事不需要显式注册该类并将其添加到对话框的属性中。
但是我当前的问题如下:
我有这个回调函数:
static BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
MessageBox(NULL, L"init dialog", L"Message Box", NULL);
break;
case WM_CLOSE:
DestroyWindow(hwnd);
MessageBox(NULL, L"close dialog", L"Message Box", NULL);
break;
case WM_DESTROY:
MessageBox(NULL, L"destroying dialog", L"Message Box", NULL);
break;
}
return TRUE;
}
并启动一个新对话框:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
TCHAR szTitle[MAX_LOADSTRING] = TEXT("This is the DialogBox Title"); // Titelleistentext
TCHAR szWindowClass[MAX_LOADSTRING] = TEXT("MyDialogBoxClass"); // Klassenname des Hauptfensters
g_hInst = hInstance; // Instanzenhandle in der globalen Variablen speichern
if (!MyRegisterClass(hInstance, szWindowClass))
{
return FALSE;
}
hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG_FTPHELPER), NULL, DialogProc);
if (!hWnd)
{
return FALSE;
}
SetWindowText(hWnd, szTitle);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
if (g_hWndCommandBar)
{
CommandBar_Show(g_hWndCommandBar, TRUE);
}
return TRUE;
}
当显示一个新对话框时,它甚至不会调用一次“ DialogProc”函数,永远不会,这会让我感到恶心...
有人知道这个问题的答案吗?
最好的问候,谢谢您的帮助!
答案 0 :(得分:1)
您的DialogProc
函数始终返回TRUE
,这意味着它处理了收到的任何消息。但是,您实际上只处理了三则消息,系统还调用了许多其他消息(例如WM_CREATE
)以“设置”对话框窗口。
如果您已经完全处理了邮件,则仅应返回TRUE
,否则,请返回FALSE
,以便系统可以为您未收到的邮件调用默认过程。可以。
通常,如果对话框过程已处理,则应返回TRUE 消息,如果没有则为FALSE。如果对话框中的步骤 返回FALSE,对话框管理器执行默认对话框 操作以响应该消息。