在win32 application 编程创建一个模态对话框,我用DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DlgProc);
并且DlgProc函数已经定义为BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam),资源IDD_DIALOG1已经加入,但程序能够通过编译不能通过连接,提示错误DlgProc函数缺少四个参数,但此处我用到的是对话框处理函数的地址,希望高手能指出小弟的错误,不胜感激!

解决方案 »

  1.   

    please paste your error message ! :)in addition, you must define your DlgProc like thisINT_PTR CALLBACK DialogProc(          
        HWND hwndDlg,
        UINT uMsg,
        WPARAM wParam,
        LPARAM lParam
    );
      

  2.   

    错误信息:
    error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' to 'int (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast
      

  3.   

    这个可以运行,在资源里建立一个对话框模板,然后加入项目,就可以用了。
    #include<windows.h>
    #include "Resource.h"BOOL CALLBACK AboutDlgProc (HWND,UINT,WPARAM,LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,
    PSTR szCmdLine,int iCmdShow)
    {
    DialogBox (hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,AboutDlgProc);
    return 0;
    }BOOL CALLBACK AboutDlgProc (HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch (message)
    {
    case WM_INITDIALOG :
    return TRUE ;
    case WM_COMMAND :
    switch (LOWORD(wParam))
    {
    case IDOK :
    case IDCANCEL :
    EndDialog (hDlg, 0) ;
    return TRUE ;
    }
    break ;
    }
    return FALSE ;
    }
      

  4.   

    我这个程序错在哪里,好象跟你的差不多,请指教一下,不胜感激#include <windows.h>
    #include "resource.h"
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    BOOL CALLBACK DlgProc(HWND,UINT WPARAM,LPARAM);
    HMENU hmenu;
    HINSTANCE hinst;
    //HDIALOG hdialog;
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
    {
    WNDCLASS wndclass;
    HWND hwnd;
    MSG message;
    char lpszclassname[]="对话框";
    char lpsztitlename[]="对话框事例程序";
    wndclass.cbClsExtra=0;
    wndclass.cbWndExtra=0;
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
    wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
    wndclass.hInstance=hInstance;
    wndclass.lpfnWndProc=WndProc;
    wndclass.lpszClassName=lpszclassname;
    wndclass.lpszMenuName=NULL;
    wndclass.style=0;
    if(!RegisterClass(&wndclass))
    {
    MessageBeep(0);
    return FALSE;
    } hmenu=LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1));
    // hdialog=
    hwnd=CreateWindow(lpszclassname,lpsztitlename,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hmenu,hInstance,NULL);
    ShowWindow(hwnd,nShowCmd);
    UpdateWindow(hwnd);
    hinst=hInstance;
    while(GetMessage(&message,NULL,0,0))
    {
    TranslateMessage(&message);
    DispatchMessage(&message);
    }
    return message.wParam;
    }
    LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDM_NEW:
    break;
    case IDM_OPEN:
    MessageBox(hwnd,"文件已经打开!","文件打开",MB_OK);
    break;
    case IDM_CLOSE:
    break;
    case IDM_SAVE:
    MessageBox(hwnd,"文件保存成功!","文件保存",MB_OK);
    break;
    case IDM_SAVEAS:
    break;
    case IDM_EXIT:
    SendMessage(hwnd,WM_DESTROY,0,0);
    break;
    case IDM_CUT:
    break;
    case IDM_COPY:
    break;
    case IDM_PASTE:
    break;
    case IDM_ABOUT:
         DialogBox(hinst,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,DlgProc);
    break;
    }
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd,message,wParam,lParam);
    }
    return 0;
    }
    BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)
    {
    switch(message)
    {
    case WM_INITDIALOG:
    return TRUE;
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDOK:
    EndDialog(hdlg,0);
    return TRUE;
    break;
    }
    break;
    case WM_CLOSE:
    EndDialog(hdlg,0);
    return TRUE;
    }
    return 0;
    }
      

  5.   

    谢了,我发现错误了,原来定义的时候忘了一个逗号,郁闷!
    thank you!