程序如下,问题是对话框的消息并没有发送到wndproc中去,请问是为什么啊,谢谢了#include <windows.h>
#include "resource.h"LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);static TCHAR szAppName[]=TEXT("maya");int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
HWND hwnd;
MSG      msg;
WNDCLASS wndclass; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =DLGWINDOWEXTRA;
wndclass.hbrBackground =(HBRUSH)(COLOR_BTNFACE+1);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =TEXT("DLGCLASS");
wndclass.lpszMenuName =NULL;
wndclass.style =CS_HREDRAW|CS_VREDRAW; if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("You should run in Windows NT"),TEXT("Error"),MB_OK);
return 0;
} hwnd=CreateDialog(hInstance,TEXT("MainDialog"),NULL,NULL); ShowWindow(hwnd,iCmdShow); while(GetMessage(&msg,NULL,0,0))
{
if (!IsDialogMessage (hwnd, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
} return msg.wParam;
}LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{

switch(message)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
PostQuitMessage(0);
break; }
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}

解决方案 »

  1.   

    编译连接都通过了,dialog也出来了,dialog上有个IDOK的按钮,如上程序应该按下这个按钮后退出,但是没有反应,于是我加了个MessageBox命令在switch(message)前面,这样应该每次有消息都会先出现个MessageBox,但是没有出现,就是说这个Dialog更本没有向WndProc发送消息,谁帮忙看一下,再次感谢
      

  2.   

    hwnd=CreateDialog(hInstance,TEXT("MainDialog"),NULL,NULL);
    这句有问题
    TEXT("MainDialog")要改为
    wndclass.lpszClassName =TEXT("DLGCLASS");中的TEXT("DLGCLASS")
    试试吧
      

  3.   

    你的对话框和你所建的窗口之间根本没有任何关系,你又如何能接到消息呢? 你的WNDPROC是你创建的DLGCLASS窗口的回调函数,而你建对话框的时候把对话框的回调函数设成了NULL.所以就产生现在的现象了.
    #include <windows.h>
    #include "resource.h"LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);static TCHAR szAppName[]=TEXT("maya");int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
    {
    DialogBox(hInstance,TEXT("MainDialog"),NULL,(DLGPROC)WndProc);
             return 0;
    }LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {

    switch(message)
    {
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case IDOK:
    EndDialog(hwnd,TRUE);
             break; }
    return 0;
    }
    return FALSE;
    }你重新试试,我未验证.
      

  4.   

    谢谢上面各位,问题解决了,我是这样解决的,用notepad打开.rc文件,在对话框的描述这一段手动加上CLASS ("DLGCLASS"),我想原因是资源编辑器无法为dialog加上类名,而在程序里CreateDialog又没有提到类名字,(这就是为什么我把CreateDialog(...)改成CreateWindow(...)就没有上述的问题。)那接下来的问题是,CLASS("DLGCLASS")只能在其他编辑器中手动加上去吗?vc中的资源编辑器有办法解决这种问题吗?再次感谢上面各位的回答。
      

  5.   

    你去www.vcroad.net里看看
    里面有很多SDK的讲解