<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(378) 評論(0)  編輯  收藏 所屬分類: C&C++

    主站蜘蛛池模板: 日本一区二区三区免费高清在线 | 久久青青草原亚洲av无码app| 边摸边吃奶边做爽免费视频网站| 亚洲精品动漫免费二区| 亚洲成人福利在线| www.黄色免费网站| 亚洲色大成网站www| 最新仑乱免费视频| 亚洲精品乱码久久久久蜜桃| 免费羞羞视频网站| 香港特级三A毛片免费观看| 国产不卡免费视频| 国产黄在线观看免费观看不卡| 色久悠悠婷婷综合在线亚洲| 男女拍拍拍免费视频网站| 亚洲精品无码专区久久久| 免费福利电影在线观看| 亚洲福利秒拍一区二区| 99精品全国免费观看视频| 国产AV无码专区亚洲AV蜜芽| 亚洲精品无码专区久久同性男| 国产A∨免费精品视频| 亚洲av永久无码精品古装片| 中文字幕在线免费观看| 亚洲综合无码一区二区痴汉| 国产99视频精品免费视频7| 三级黄色片免费看| 亚洲日本在线播放| 国产v片免费播放| 视频免费在线观看| 亚洲avav天堂av在线网爱情| 国产免费变态视频网址网站| eeuss影院www天堂免费| 666精品国产精品亚洲| 国产精品麻豆免费版| 成全动漫视频在线观看免费高清版下载| 亚洲白色白色永久观看| 四虎影院永久免费观看| 美女内射无套日韩免费播放 | 亚洲熟妇少妇任你躁在线观看无码| 久草免费福利资源站|