我在创建对话框时遇到了困难

时间:2015-05-05 08:38:29

标签: winapi dialog

我真的不知道我做错了什么。 我想创建一个对话框。

它只是没有显示。

声明

BOOL CALLBACK NewDlgProc(HWND main, UINT msg, WPARAM wParam, LPARAM lParam);

Diagproc:

BOOL CALLBACK NewDlgProc(HWND main, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_INITDIALOG:
        return TRUE;
    case WM_COMMAND:
        {

        }
        break;
    default:
        return FALSE;
    }

    return TRUE;
}

在windproc wm_command中:

case ID_MENU_NEW:
{
    int NewDlg = DialogBox(GetModuleHandle(NULL),                        
                           MAKEINTRESOURCE(ID_DIALOG_NEW), main, NewDlgProc);

    if(NewDlg == 0)
      MessageBox(main, "Cannot create dialogbox", "Error", MB_OK | MB_ICONERROR);
}
break;

resource.h中:

#define ID_DIALOG_NEW   201

dlg.rc

#include <windows.h>
#include "resource.h"

ID_DIALOG_NEW DIALOG DISCARDABLE 100,100, 100,100
STYLE DS_MODALFRAME | WS_VISIBLE | WS_CHILD | WS_CAPTION
CAPTION "Add new"
FONT 8, "Ms Sans Serif"
BEGIN
END

2 个答案:

答案 0 :(得分:0)

对话框可以拥有所有者或无主,但不能拥有父对象。因此,对话框不能具有WS_CHILD窗口样式。将其替换为WS_POPUP,每个人都会很高兴。

MSDN的相关引用(About Dialog Boxes : Modal Dialog Boxes):

  

应用程序不得创建具有 WS_CHILD 样式的模式对话框。

答案 1 :(得分:0)

你的对话程序怎么没有为你没有处理的邮件调用DefDlgProc()?

BOOL CALLBACK NewDlgProc(HWND main, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
    case WM_INITDIALOG:
        return TRUE;
    case WM_COMMAND:
        {

        }
        break;
    default:
        return DefDlgProc(main, msg, wParam, lParam); // need default processing!!!!!!!!!!
    }

    return TRUE;
}