//帮看下错在哪,运行时整个对话框界面呈现未响应状态
#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
void ShowError();
void main()
{
    HWND hwnd;
    //要设置Visible属性TRUE
    hwnd = ::CreateDialog(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc);
    if (hwnd == NULL)
    {
ShowError();
    }
    system("pause");
}void Dlg_OnCommand(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
    cout << "WM_COMMAND" << endl;
}INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
    switch (uMsg)
    {
//对话框整个创建及显示过程都没有产生该消息
    case WM_CREATE: cout << "WM_CREATE" << endl; break; //对话框初始化时发送一个该消息
    case WM_INITDIALOG: cout << "WM_INITDIALOG" << endl; break; //关闭按钮发送一个,任务栏"关闭窗口"时发送一个,任务管理器结束窗口发送两个该消息
    case WM_CLOSE: 
cout << "WM_CLOSE" << endl;
EndDialog(hwndDlg, 0xff);//用于结构模态对话框,并设置DialogBox()返回值 
break; //此消息在对话框摧毁时发送,例如调用EndDialog()后发送
    case WM_DESTROY: cout << "WM_DESTROY" << endl; break; //控件消息,包括右上角的最大,最小,关闭三个按钮,当按关闭按钮调用EndDialog()有时就没再发送WM_COMMAND
    case WM_COMMAND: Dlg_OnCommand(hwndDlg, uMsg, wParam, lParam); break; //其它WM_KEYDOWN/UP, WM_LBUTTONDOWN/UP....
    default: break;
    }    return FALSE;  //这里肯定要返回 FALSE
}void ShowError()
{
    LPTSTR lpMsgBuf;
    ::FormatMessage( 
FORMAT_MESSAGE_ALLOCATE_BUFFER | 
FORMAT_MESSAGE_FROM_SYSTEM | 
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
::GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
(LPTSTR)&lpMsgBuf,
0,
NULL);
    ::MessageBox(NULL, lpMsgBuf, NULL, MB_OK | MB_ICONSTOP);
    ::LocalFree(lpMsgBuf);//释放操作系统开辟的缓冲区地址
}

解决方案 »

  1.   

    将main加一个消息循环,改成这样:
    void main() 

    MSG msg;
        HWND hwnd; 
        //要设置Visible属性TRUE 
        hwnd = ::CreateDialog(::GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); 
        if (hwnd == NULL) 
        { 
    ShowError(); 
        } 
    while(GetMessage(&msg,NULL,NULL,NULL))
    {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);  }
        system("pause"); 
      

  2.   

    确实是没消息泵,以前都是以DialogBox()创建的模态都不用自已设置消息泵,所以创建非模时也没添加消息泵就出错了,如四楼所添加代码即可,谢谢各位