//不能出结果!?
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

   HWND hwnd;
   MSG msg;
   WNDCLASS  wndclass;
   wndclass.style = CS_HREDRAW | CS_VREDRAW;
   wndclass.lpfnWndProc = WndProc;
   wndclass.cbClsExtra =0;
   wndclass.cbWndExtra =0;
   wndclass.hInstance = hInstance;
   wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
   wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
   wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
   wndclass.lpszMenuName = NULL;
   wndclass.lpszClassName = "HellWin";
   if(!RegisterClass(&wndclass))
   {
   MessageBox(NULL,"窗口注册失败!","HellWin",0);
   return 0;
   }   hwnd = CreateWindow("HelloWin",
                    "小马的窗口",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
    CW_USEDEFAULT,
                        CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
   ShowWindow(hwnd,nCmdShow);
   UpdateWindow(hwnd);   while(GetMessage(&msg,NULL,0,0))
   {
   TranslateMessage(&msg);
   DispatchMessage(&msg);
   }
   return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:
          return 0;
case WM_LBUTTONDOWN:
MessageBox(NULL,"大家好,这是小马的VC++世界!","问候",0);
        return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);    
}能通过编译,但没法出对话框,看不到结果,每运行一次,可在“任务管理器”中看到其.exe进程,好像无法终止?为什么?

解决方案 »

  1.   

      wndclass.lpszClassName   =   "HellWin"; ---
      hwnd   =   CreateWindow("HelloWin", ---
      低级错误!
      这是其一,改完后,仍看不到结果,预期是会弹出一个消息对话框啊,但什么反应都没有! 
      

  2.   

    哦,找到错误了:不能加
    default: 
    return   0; 这一项。
    但是为什么呢?WndProc是作消息处理的啊,当没有消息发来时,什么都不做啊?消息机制在这里究竟是如何起作用的?
      

  3.   

    DialogBox(hInst, (LPCTSTR)IDD_COMPLETE, hWnd, (DLGPROC)CompleteLevel)==IDOK
      

  4.   

    更有趣了,我将其改为
    default:   
            ;
    又可以了,顺利弹出“问候”消息框,难道是return 0;的问题?
    再有,将其改为
     default:    //要么不要这一项,要么什么都不做,不能写return 0; ?
              MessageBox(NULL,"大家好!","没做",0);
     return 0;
    会弹出消息对话框“没做”这一个,但没有弹出“问候”那一个?
    我进一步观察,当点运行时,弹出“没做”消息框,同时,在任务管理器中,出现Ex_HelloMsg.exe进程,即我的工程进程。
    消息机制,如何实现的?
    希望高手指点,谢谢!
      

  5.   

    不能加 default:   
    return  0;
      
    因为这一句是在witch语句内的,意思是除了 WM_CREATE、WM_LBUTTONDOWN、WM_DESTROY这些你罗列的消息外,
    其他的消息都进入default: return 0;的处理,这条语句立即跳出LRESULT   CALLBACK   WndProc(HWND   hwnd,UINT   message,WPARAM   wParam,LPARAM   lParam) 这个函数,不会执行return  DefWindowProc(hwnd,message,wParam,lParam); 语句操作!!显然这是不合法的,因为窗口过程不予处理的所有消息应该被传给
    名为DefWindowProc的Windows函数。如果去掉default:   
    return  0; 语句,除了你罗列的消息外,其他消息都进入DefWindowProc(hwnd,message,wParam,lParam)
    函数,这才是合法的!!!这个问题说明你对窗口处理函数理解的还不够好!!多看几遍这个内容就行,不要期望谁给你讲的太清楚,等自己理解的
    比较好了,再看别人的东西,才会看的比较透彻!!
      

  6.   

    每个case后面要加break不要用return,对default的处理用return DefWindowProc