学才 发表于 2014-2-11 22:40:12

关于程序设计这本书的窗口程序


#include <Windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(__in HINSTANCE hInstance,
                                   __in_opt HINSTANCE hPrevInstance,
                                   __in_opt LPSTR lpCmdLine,
                                   __in int nShowCmd )
{
       HWND hwnd;
           MSG msg;
           WNDCLASS wc;
           wc.style=0;
           wc.lpfnWndProc=(WNDPROC)WndProc;
           wc.cbWndExtra=0;
           wc.cbClsExtra=0;
           wc.hInstance=hInstance;
           wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);
           wc.hCursor=LoadCursor(NULL,IDC_ARROW);
           wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
           wc.lpszMenuName=NULL;
           wc.lpszClassName=TEXT("MyWndClass");
       RegisterClass(&wc);
           hwnd=CreateWindow(TEXT("MyWndClass"),
                                 TEXT("Hello SDK Application"),
                                               WS_OVERLAPPEDWINDOW,
                                               CW_USEDEFAULT,CW_USEDEFAULT,
                                               CW_USEDEFAULT,CW_USEDEFAULT,
                                               NULL,NULL,
                                             hInstance,
                                               NULL);
           ShowWindow(hwnd,nShowCmd);
           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)
{
        PAINTSTRUCT ps;
        HDC hdc;
        switch (message)
        {
        case WM_LBUTTONDOWN:
                MessageBox(hwnd,TEXT("鼠标点击"),TEXT("没事"),MB_OK);
                /*break;*/
      return 0;
        case WM_PAINT:
                //hdc=BeginPaint(hwnd,&ps);
                //Ellipse(hdc,0,0,200,200);
                //EndPaint(hwnd,&ps);
         //break;
                return 0;
        case WM_DESTROY:
                PostQuitMessage(0);
                break;
               


        }
/*        return 0;*/
      return DefWindowProc(hwnd,message,wParam,lParam);
}我用的是vs2008,关于case WM_LBUTTONDOWN:case WM_PAINT:这两个书上后面是return 0;孙鑫的书是用vc6用的是break;在这里如果case WM_PAINT:后面部接代码,
1.直接跟return 0,运行程序后点鼠标没有出现messagebox,而是出现程序当机
2.如果直接跟break,运行后点鼠标,就没事,可以出现messagebox
3,如果后面写入hdc3句话,接return 0,运行后也会出现messagebox ,程序正常运行。
这到底是怎么回事呢,为什么会出现这个情况。

未闻丶花名 发表于 2014-2-13 19:02:48

路过看看= =!
页: [1]
查看完整版本: 关于程序设计这本书的窗口程序