青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 64,comments - 18,trackbacks - 0

/*****************************************************
 Windows SDK編程之一  窗口示例程序
******************************************************/

/*Win32應用程序框架主要由"初始化窗口類","窗口注冊類","窗口的創建"以"窗口消息函數"等組成*/
#include "stdafx.h"


LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);  //窗口函數說明

/*
  WinMain函數是所有windows應用程序的入口,類似于C語言中的Main函數,其功能是完成一系列的定義和初始化工作,并產生消息循環。消息循環是整個程序運行的核心。WinMain函數實現以下功能。
  1. 注冊窗口類,建立窗口及執行其它必要的初始化工作;
  2. 進入消息循環,根據從應用程序消息隊列接受的消息,調用相應的處理過程
  3. 當消息循環檢索到WM_QUIT消息時終止程序運行。

  WinMain函數有三個基本的組成部份:函數說明、初始化和消息循環。

 WinMain函數的說明如下:
 int WINAPI WinMain(  //WinMain函數說明
             HINSTANCE hInstance, //程序當前實例句柄       
             HINSTANCE hPrevInstance,  //應用程序其它實例句柄
             LPSTR     lpCmdLine, //指向程序命令行參數的指針
             int   nCmdShow  //應用程序開始執行時窗口顯示方式的整數值標識
)
      由于Window操作系統是多任務的操作系統,能進行多任務的管理,因此,windows應用程序可能被并行的多次執行,因而可能出現同一個程序的多個窗口同時存在的情況,Windows系統將應用程序每一次執行稱為該應用程序的一個實例(Instance),并用一個實例句柄唯一的標識它。

*/
int APIENTRY WinMain(HINSTANCE hInstance,           //WinMain函數說明
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.
 /*
 建議采用Pascal的變量定義風格,即在程序(函數)開始處定義所有變量
 雖然C++的變量定義比較靈活,本程序為了使程序易于理解,未采用這種方法
 */
   
 char lpszClassName[]="窗口";       //窗口類名
 char lpszTitle[]="Windows SDK編程之一  窗口示例程序";   //窗口標題名

 //---------------窗口類定義-------------------------------------
 /*
 窗口類的定義
    在Windows應用程序中,窗口害定義了窗口的形式與功能。窗口類定義通過給窗口類數據結構WNDCLASS賦值完成,該數據結構中包括窗口類的各種屬性,在窗口類定義過程中常用到以下函數:
 */
 WNDCLASS wndclass;
 wndclass.style=0;                                              //窗口類型為缺省類型
 wndclass.lpfnWndProc=WndProc;                                  //窗口處理函數為WndProc
 wndclass.cbClsExtra=0;                                         //窗口類無擴展
 wndclass.cbWndExtra=0;                                         //窗口實例無擴展
 wndclass.hInstance=hInstance;                                  //當前實例句柄
 
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);                 //使用缺省圖標
 /*
  LoadIcon():在應用程序中加載一個窗口圖標
     LoadIcon()函數原型為:
             HICON LoadIcon(
                   HINSTANCE hInstance,//圖標資源所在的模塊句柄,為NULL則使用系統預定義圖標
                   LPCTSTR lpIconName //圖標資源名或系統預定義圖標標識名
             )
 */


 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);                   //窗口采用箭頭光標
    /*
 LoadCursor():在應用程序中加載一個窗口光標
    LoadCursor()函數原型為:
             HCURSOR LoadCursor(
                     HINSTANCE hInstance,//光標資源所在的模塊句柄,為NULL則使用系統預定義光標
                     LPCTSTR lpCursorName //光標資源名或系統預定義光標標識名
             )
 */

 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);    //窗口背景為白色
 /*
  GetStockObject():獲取已經定義的畫筆、畫刷、字體等對象的句柄
     GetStockObject()函數原型為:
                   HGDIOBJ GetStockObject(int fnObject); //fnObject為對象的標識名

 */

 wndclass.lpszMenuName=NULL;                                    //窗口中無菜單
 wndclass.lpszClassName=lpszClassName;                          //窗口類名為'窗口實例'

 //------------------以下是進行窗口類的注冊---------------------------
 
 /*
    注冊窗口類
    Windows系統本身提供部份預定義的窗口類,程序員也可以自定義窗口類,窗口類必須先注冊后使用。窗口類的注冊由注冊函數RegisterClass()實現。其形式為:
    RegisterClass(&wndclass)
   &wndclass為窗口類結構
      RegisterClass函數的返回值為布爾值,注冊成功則返回真
 */
 if (! RegisterClass(&wndclass))     //注冊窗口,若失敗,則發出聲音
 { MessageBeep(0);
   return FALSE;
 }
   
 /*
 創建窗口實例
 創建一個窗口類的實例由函數CreateWindow()實現,該函數的原型為:
    HWND  CreateWindow(LPCTSTR lpszClassName,             //創建窗口,窗口類名
             LPCTSTR lpszTitle,                     //窗口實例的標題名
             DWORD dwStyle,           //窗口的風格
             int x,   //窗口左上角坐標
       int y,   //窗口左上角坐標
             int nWidth,   //窗口的寬度
       int nHeight,   //窗口的高度
               HWND hwndParent,           //此窗口父窗口
             HWENU hMenu,          //此窗口主菜單
                HINSTANCE hInstance, //應用程序當前句柄
             LPVOID lpParam);        //指向一個傳遞給窗口的參數值的指針
 */
 
 //創建窗口操作
 HWND hwnd; //窗口結構
    hwnd=CreateWindow(lpszClassName,   //創建窗口,窗口類名
  lpszTitle,                     //窗口實例的標題名
  WS_OVERLAPPEDWINDOW,           //窗口的風格
  CW_USEDEFAULT,CW_USEDEFAULT,   //窗口左上角坐標為缺省值
  CW_USEDEFAULT,CW_USEDEFAULT,   //窗口的高度和寬度為缺省值
  NULL,                          //此窗口無父窗口
  NULL,                          //此窗口無主菜單
  hInstance,                     //應用程序當前句柄
  NULL);                         //不使用該值

 ShowWindow(hwnd,nCmdShow);         //顯示窗口

 UpdateWindow(hwnd);                //繪制用戶區
 

    /*
  消息循環
  windows應用程序的運行以消息為核心。windows將產生的消息放入應用程序的消息隊列中而應用程序WinMain函數的消息循環提取消息隊列中的消息,并將其傳遞給窗口函數為相應處理過程處理。
    MSG msg; //消息結構

 while( GetMessage(&msg,NULL,0,0))  //消息循環
 { TranslateMessage(&msg);
   DispatchMessage(&msg);
 }
 */

 MSG msg; //消息結構
  /*GetMessage()作用:從消息隊列中讀取一條消息,并將消息放在一個MSG結構中:
   BOOL GetMessage(        
        LPMSG lpMsg,  //指向MSG結構的指針
        HWND hWnd,
        UINT wMsgFilterMin, //用于消息過濾的最小信息號值
        UINT wMsgFilterMax //用于消息過濾的最大信息號值 如最小值和最大值均為0, 則不過濾消息
   );
  當GetMessage返回0時,即檢索到WM_QUIT消息,程序將結束循環并退出

 BOOL TranslateMessage(  const MSG *lpMsg );  負責把消息的虛擬鍵值轉換為字符信息
 LRESULT DispatchMessage( const MSG *lpmsg  ); 將參數lpmsg指向的消息傳遞給指定的窗口

  */
 while( GetMessage(&msg,NULL,0,0))  //消息循環
 { TranslateMessage(&msg);
   DispatchMessage(&msg);
 }

 return msg.wParam;                //程序終止時,將信息返回操作系統
}


//-----------------------------窗口函數---------------------------------------
/*
窗口消息處理函數定義了應用程序對接收到的不同消息的響應,它包含了應用程序對各種可用接收到的消息的處理過程,通常 ,窗口函數由一個或多個switch...case語句組成,每一條case語句
對應一種消息,當應用程序接收到一個消息時,相應的case語句被 激活并執行相應的響應程序模塊。
窗口函數的一般形式如下:
 LRESULT CALLBACK WindowProc(          HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
Parameters

hwnd :[in] Handle to the window.
uMsg :[in] Specifies the message.
wParam:[in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
lParam:[in] Specifies additional message information. The contents of this parameter depend on the value of the uMsg parameter.
Return Value 
The return value is the result of the message processing and depends on the message sent.

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  {
  case ...
      ....
   break;
   .........
  case WM_DESTROY:
     //void PostQuitMessage(int nExitCode)函數的作用是向程序發送WM_QUIT消息,nExitCode應用程序退出代碼
      PostQuitMessage(0); //調用該函數發出WM_QUIT消息
  default: //缺省消息處理函數,以保證所的發往窗口的消息都能被處理
   return DefWindowProc(hwnd,message,wParam,lParam);
  }

  return (0);
}

*/
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
  switch (message)
  {
  case WM_DESTROY:
    PostQuitMessage(0); //調用該函數發出WM_QUIT消息
  default: //缺省消息處理函數
   return DefWindowProc(hwnd,message,wParam,lParam);
  }

  return (0);
}
/*
注:
  事件驅動的特點:
  Windows程序設計圍繞著事件或消息的產生驅動產生運行消息處理函數。Windows程序的執行順序取決于事件發生的順序,程序的執行是由順序產生的消息驅動的,程序員可以針對消息類型編寫消息處理程序以處理接收的消息,或者發出其他消息以驅動其他處理程序,但是不必預先確定消息的產生順序。這是面向對象編程中事件驅動的顯著特點。
  事件驅動編程方法對于編寫交互程序很有用處,用這一方法編寫的程序使程序避免了死板的操作模式,從而使用戶能夠按照自己的意愿采用靈活多變的操作模式。
  Windows應用程序中的消息傳遞機制:
  VC中存在幾種系統定義的消息分類,常用的消息由窗口消息、初始化消息、輸入消息、系統消息、剪切板消息、文當界面消息、DDE(動態數據交換)消息、應用程序自定義消息等。應用程序發送的消息發送至消息隊列,系統根據消息到達的順序對消息進行處理,并調用響應的消息處理模塊代碼。
*/

posted on 2007-05-16 22:46 rebol 閱讀(2191) 評論(0)  編輯 收藏 引用 所屬分類: Final work LOG
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久激情视频| 久久久999成人| 欧美日韩精品二区第二页| 久久久久青草大香线综合精品| 亚洲一区二区动漫| 亚洲永久精品大片| 亚洲欧美日韩系列| 久久全球大尺度高清视频| 欧美成人精品影院| 国产精品大片免费观看| 国产日韩欧美三级| 亚洲第一网站免费视频| 亚洲色图综合久久| 久久久久9999亚洲精品| 欧美88av| 亚洲一区在线播放| 美国十次了思思久久精品导航| 欧美精品日韩| 国产一区二区三区的电影 | 欧美电影免费观看高清完整版| 亚洲第一二三四五区| 欧美激情第三页| 亚洲自啪免费| 欧美精品v国产精品v日韩精品| 国产精品久久一卡二卡| 亚洲国产欧洲综合997久久| 亚洲自拍偷拍色片视频| 欧美大片va欧美在线播放| 亚洲永久免费| 欧美精品一区二区三区蜜臀| 国产日韩在线播放| 一区二区三区视频在线播放| 久久综合狠狠综合久久综合88| 亚洲最新色图| 欧美成人tv| 国产一区二区三区四区五区美女| 99在线精品视频在线观看| 久久嫩草精品久久久久| 一区二区三区三区在线| 欧美不卡视频一区发布| 国产一区二区三区久久精品| 亚洲免费视频观看| 91久久久久久| 久久天堂精品| 精品va天堂亚洲国产| 欧美在线视频二区| 亚洲午夜精品在线| 国产精品v日韩精品| 99视频在线观看一区三区| 欧美高清视频| 久久综合久久综合九色| 一区二区三区高清不卡| 香蕉久久一区二区不卡无毒影院 | 老色鬼久久亚洲一区二区| 亚洲午夜精品福利| 国产精品久久久久久亚洲毛片| 日韩亚洲国产欧美| 亚洲福利在线观看| 久久综合给合久久狠狠狠97色69| 国产日产欧美a一级在线| 午夜在线精品| 午夜精品福利一区二区三区av| 国产精品看片你懂得| 先锋影音网一区二区| 亚洲一区二区三区免费视频| 国产精品美女久久久| 性久久久久久久久| 性久久久久久久久| 精品av久久707| 亚洲国产精品第一区二区三区| 欧美第一黄色网| 一本色道久久综合亚洲二区三区| 91久久久精品| 国产精品久久久一区二区三区| 欧美在线网址| 免费一级欧美片在线播放| 99re热这里只有精品视频 | 亚洲欧美中文日韩v在线观看| 国产精品一二一区| 久久综合色天天久久综合图片| 免费毛片一区二区三区久久久| aa级大片欧美三级| 午夜亚洲性色视频| 亚洲精品日韩欧美| 亚洲自拍三区| 亚洲人成在线观看一区二区| 99视频精品在线| 一区二区三区在线免费播放| 亚洲国产精品一区二区第一页 | 欧美成人一区二区在线| 亚洲夜晚福利在线观看| 性欧美大战久久久久久久久| 亚洲国产精品嫩草影院| 一区二区三区免费在线观看| 狠狠色综合日日| 一区二区三区|亚洲午夜| 国模 一区 二区 三区| 亚洲片在线观看| 国内在线观看一区二区三区| 亚洲精品一区中文| 在线成人小视频| 亚洲一区视频在线观看视频| 最新国产乱人伦偷精品免费网站| 亚洲一区二区三区在线视频| 亚洲黄色毛片| 欧美中文字幕在线观看| 亚洲欧美区自拍先锋| 欧美xxx在线观看| 久久精品亚洲一区二区| 午夜久久黄色| 另类图片综合电影| 欧美资源在线观看| 欧美日一区二区在线观看| 老司机aⅴ在线精品导航| 国产精品人人做人人爽人人添| 亚洲福利在线视频| 在线精品视频在线观看高清| 午夜精品久久久久久久99水蜜桃| 99国产精品久久| 蜜臀av性久久久久蜜臀aⅴ| 欧美一区二区三区视频在线| 欧美日韩大片| 亚洲高清在线播放| 亚洲福利视频一区| 久久精品日产第一区二区三区| 午夜日韩视频| 国产精品普通话对白| 日韩视频一区| 一本色道久久综合亚洲精品不卡| 麻豆91精品| 猛干欧美女孩| 亚洲成色精品| 欧美暴力喷水在线| 亚洲国产精品一区制服丝袜| 亚洲韩日在线| 欧美精品情趣视频| 亚洲乱码久久| 亚洲在线国产日韩欧美| 国产精品国产三级国产aⅴ浪潮| 99精品国产在热久久| 一区二区日韩精品| 国产精品成人v| 亚洲欧美不卡| 老司机凹凸av亚洲导航| 尹人成人综合网| 欧美a级一区| 日韩视频在线观看免费| 亚洲一区二区免费看| 国产伦精品一区二区三区视频孕妇| 一区二区欧美在线| 久久国产一区二区三区| 精品成人在线视频| 欧美激情国产日韩| 亚洲无线视频| 久久综合狠狠综合久久激情| 亚洲国产精品女人久久久| 欧美精品激情在线| 亚洲视频视频在线| 久久午夜视频| 日韩一级欧洲| 国产精品激情| 久久久999精品| 日韩一二三在线视频播| 欧美一区免费视频| ●精品国产综合乱码久久久久| 欧美成人精品h版在线观看| 99ri日韩精品视频| 久久久亚洲国产美女国产盗摄| 亚洲国产片色| 国产啪精品视频| 欧美激情精品久久久久久蜜臀| 亚洲网站在线播放| 亚洲电影免费观看高清| 亚洲欧美一区二区精品久久久| 国产日本亚洲高清| 欧美—级在线免费片| 性欧美大战久久久久久久免费观看| 欧美激情亚洲自拍| 欧美一级免费视频| 韩日精品在线| 欧美一区二区三区在线看| 亚洲欧美日韩在线综合| 欧美91大片| 午夜在线精品偷拍| 亚洲人成人一区二区三区| 国产乱码精品一区二区三区忘忧草| 久久欧美中文字幕| 亚洲欧美国产一区二区三区| 91久久黄色| 欧美99在线视频观看| 欧美在线国产| 亚洲尤物视频在线| 亚洲乱码久久| 亚洲国产精品嫩草影院| 国产自产精品| 国产亚洲精品7777| 国产精品久久久久久久浪潮网站| 欧美精品在线一区二区| 免费一区二区三区| 老司机午夜精品视频在线观看|