so true

          心懷未來,開創未來!
          隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
          數據加載中……

          Windows程序運行原理及程序編寫流程

          #include "windows.h"
          #include "stdio.h"

          //定義窗口過程函數;
          LRESULT CALLBACK MyWndProc(
           HWND hwnd,      // handle to window
           UINT uMsg,      // message identifier
           WPARAM wParam,  // first message parameter
           LPARAM lParam   // second message parameter
          );

          int WINAPI WinMain(
           HINSTANCE hInstance,  // handle to current instance
           HINSTANCE hPrevInstance,  // handle to previous instance
           LPSTR lpCmdLine,      // pointer to command line
           int nCmdShow          // show state of window
          )
          {
           //設計一個窗口類;
           WNDCLASS wndcls;
           wndcls.cbClsExtra=0;
           wndcls.cbWndExtra=0;
           wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
           wndcls.hCursor=LoadCursor(NULL,IDC_ARROW);
           wndcls.hIcon=LoadIcon(NULL,IDI_INFORMATION);
           wndcls.hInstance=hInstance;
           wndcls.lpfnWndProc=MyWndProc;
           wndcls.lpszClassName="Bacoo";
           wndcls.lpszMenuName=NULL;
           wndcls.style=CS_VREDRAW | CS_HREDRAW;

           //注冊窗口類;
           RegisterClass(&wndcls);

           //創建窗口;
           HWND hwnd;
           hwnd=CreateWindow("Bacoo","A Simple SingleDocument derived from own code",
            WS_OVERLAPPEDWINDOW,0,0,600,400,
            NULL,NULL,hInstance,NULL);

           //顯示及更新窗口。
           ShowWindow(hwnd,SW_SHOWNORMAL);
           UpdateWindow(hwnd);

           //消息循環
           MSG msg;
           while(GetMessage(&msg,NULL,0,0))
           {
            //簡單的說,函數TranslateMessage就是把WM_KEYDOWN和WM_KEYUP翻譯成WM_CHAR消息,沒有該函數就不能產生WM_CHAR消息。
            TranslateMessage(&msg);
            ::DispatchMessage(&msg);
           }

           return 0;
          }

          LRESULT CALLBACK MyWndProc(
           HWND hwnd,      // handle to window
           UINT uMsg,      // message identifier
           WPARAM wParam,  // first message parameter
           LPARAM lParam   // second message parameter
          )
          {
           switch(uMsg)
           {
           case WM_CHAR:
            char buf[20];
            sprintf(buf,"char is %d",wParam);
            MessageBox(hwnd,buf,"bacoo",0);
            break;
           case WM_LBUTTONDOWN:
            //GetDC和ReleaseDC是一對,只要不是響應WM_PAINT消息,都用這一對函數。
            MessageBox(hwnd,"mouse clicked","bacoo",0);
            HDC hdc;
            hdc=GetDC(hwnd);
            TextOut(hdc,0,50,"I'm Bacoo",strlen("I'm Bacoo"));
            ReleaseDC(hwnd,hdc);
            break;
           case WM_PAINT:
            //BeginPaint和EndPaint也是一對,它們只用在響應WM_PAINT消息中。
            HDC hdc2;
            PAINTSTRUCT ps;
            hdc2=BeginPaint(hwnd,&ps);
            TextOut(hdc2,0,0,"Hello",strlen("Hello"));
            EndPaint(hwnd,&ps);
            break;
           case WM_CLOSE:
            //把常量放在前面可以防止誤寫為“=”時產生的錯誤,這是一個很不錯的小技巧
            if(IDYES==MessageBox(hwnd,"Are you ready to close this window?","Bacoo",MB_YESNO))
            {
             DestroyWindow(hwnd);
            }
            break;
           case WM_DESTROY:
            PostQuitMessage(0);
            break;
           default:
            //注意:這里必須使用return DefWindowProc(hwnd,uMsg,wParam,lParam);而不能僅僅使用DefWindowProc(hwnd,uMsg,wParam,lParam);
            //否則窗口不能正確顯示,其實該回調函數的返回值表征了消息相應的結果,因此是有意義的,不能一概返回0。
            LRESULT lr=DefWindowProc(hwnd,uMsg,wParam,lParam);
          //   if(lr!=NULL)
          //   {
          //    MessageBox(NULL,"NULL!=DefWindowProc(hwnd,uMsg,wParam,lParam)","Try",0);
          //    PostQuitMessage(0);
          //   }
            return lr;
           }
           return 0;
          }

           

          posted on 2008-02-23 19:15 so true 閱讀(379) 評論(0)  編輯  收藏 所屬分類: C&C++

          主站蜘蛛池模板: 延庆县| 罗源县| 驻马店市| 叶城县| 秦安县| 吴江市| 共和县| 德江县| 万全县| 武威市| 惠来县| 磐安县| 通渭县| 信丰县| 涞水县| 渑池县| 云林县| 偃师市| 长春市| 玉山县| 正宁县| 土默特左旗| 池州市| 武山县| 新河县| 磐石市| 湖州市| 治县。| 临清市| 太湖县| 盘锦市| 桂阳县| 霍山县| 金华市| 东乌珠穆沁旗| 宝清县| 锦州市| 广河县| 长葛市| 龙泉市| 彩票|