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

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>
            欧美精品综合| 欧美成人免费va影院高清| 欧美日韩第一区| 一本久久综合亚洲鲁鲁| 99精品视频免费观看| 欧美亚男人的天堂| 欧美一区视频| 久久三级视频| 一区二区三区精品视频在线观看| 亚洲乱码国产乱码精品精98午夜| 欧美亚日韩国产aⅴ精品中极品| 午夜一区在线| 久久一区中文字幕| 99riav国产精品| 亚洲免费在线| 亚洲国产精品久久久久婷婷884 | 国产欧美视频一区二区| 久久久久www| 欧美韩日高清| 久久精品女人的天堂av| 麻豆精品精华液| 亚洲影院色在线观看免费| 欧美综合国产精品久久丁香| 日韩亚洲在线| 久久国产精品毛片| 亚洲无限乱码一二三四麻| 午夜欧美理论片| 日韩一区二区精品葵司在线| 午夜在线视频一区二区区别| 亚洲国产天堂久久综合| 国产精品99久久久久久白浆小说 | 国产一区在线看| 亚洲另类在线一区| 国内精品视频久久| 一区二区三区国产在线| 亚洲成在线观看| 亚洲综合第一页| 一本色道久久综合亚洲精品高清| 午夜久久美女| 午夜精品久久一牛影视| 欧美成人中文字幕在线| 久久久久五月天| 国产精品xvideos88| 亚洲人体一区| 原创国产精品91| 性亚洲最疯狂xxxx高清| 亚洲一区二区在线| 欧美日韩国产区一| 亚洲第一天堂av| 欧美一区二区女人| 亚洲欧美日韩一区二区三区在线观看| 欧美v国产在线一区二区三区| 香蕉久久夜色精品| 国产精品久久| 亚洲视频图片小说| 亚洲一二三区精品| 欧美日韩一二三区| 亚洲精品在线免费观看视频| 亚洲欧洲在线视频| 欧美激情在线播放| 亚洲国产精品久久人人爱蜜臀| 激情久久婷婷| 久久青草欧美一区二区三区| 久久久91精品国产| 永久免费精品影视网站| 久久久www免费人成黑人精品| 久久国产精品久久久久久| 国产精品综合网站| 亚洲欧美国产制服动漫| 久久国产精品久久精品国产| 国产午夜精品视频免费不卡69堂| 亚洲欧美日韩一区| 久久九九国产精品怡红院| 国产在线视频不卡二| 老司机精品福利视频| 欧美激情性爽国产精品17p| 亚洲人成网在线播放| 欧美日韩美女| 亚洲一区二区三区四区五区黄| 午夜亚洲影视| 曰韩精品一区二区| 欧美另类视频| 亚洲欧美日韩精品在线| 久久天天躁夜夜躁狠狠躁2022 | 91久久久久久久久| 欧美日韩1区2区| 亚洲欧美日韩中文视频| 久久久久久久久伊人| 亚洲国产精品123| 欧美伦理视频网站| 欧美一区二区三区免费大片| 嫩草国产精品入口| 中文精品一区二区三区| 国产女优一区| 欧美大秀在线观看| 亚洲综合三区| 欧美黑人多人双交| 亚洲欧美日韩国产一区二区| 激情五月婷婷综合| 欧美三级小说| 久久久久久高潮国产精品视| 亚洲精品欧洲| 裸体女人亚洲精品一区| 亚洲一区二区三区激情| 樱桃视频在线观看一区| 欧美视频一区二区三区在线观看| 欧美影院在线| 99国产麻豆精品| 女同一区二区| 欧美在线你懂的| 夜夜躁日日躁狠狠久久88av| 精品二区视频| 国产乱码精品一区二区三区忘忧草 | 久久成人综合视频| 在线视频欧美日韩精品| 伊人成人网在线看| 欧美一区二区三区的| 99re热精品| 欧美韩日一区二区三区| 久久久美女艺术照精彩视频福利播放 | 裸体一区二区三区| 性欧美videos另类喷潮| 日韩视频在线永久播放| 欧美国产激情| 久久午夜色播影院免费高清| 午夜视频久久久| 亚洲一区二区三| 99精品免费视频| 亚洲人成网站影音先锋播放| 极品尤物一区二区三区| 国产亚洲在线观看| 国产精品入口66mio| 欧美午夜不卡影院在线观看完整版免费| 久久色在线观看| 久久综合色一综合色88| 欧美一区二区在线观看| 午夜精品免费| 午夜影院日韩| 欧美一区二区三区免费视频| 亚洲欧美日韩综合aⅴ视频| 亚洲影视在线| 午夜一区在线| 欧美专区在线观看| 久久久久久一区二区| 久久美女艺术照精彩视频福利播放| 香蕉久久夜色精品国产| 午夜久久影院| 久久久久国产精品午夜一区| 久久久国际精品| 久久尤物视频| 欧美大片第1页| 欧美片第一页| 国产精品女主播一区二区三区| 国产精品激情偷乱一区二区∴| 欧美性大战久久久久久久蜜臀 | 女主播福利一区| 欧美日韩国产精品成人| 欧美性做爰毛片| 韩日欧美一区二区三区| 亚洲黄色一区二区三区| 99国内精品久久| 午夜精品久久久久久久| 久久久91精品国产一区二区三区| 裸体一区二区三区| 亚洲激情av| 午夜视频一区在线观看| 久久视频这里只有精品| 欧美日韩亚洲精品内裤| 国产欧美一区二区白浆黑人| 极品尤物av久久免费看 | 国产自产2019最新不卡| 亚洲精品一区二区三区蜜桃久| 一区二区三区国产精品| 久久国产精品99国产| 欧美韩日精品| 亚洲欧美中文日韩v在线观看| 久久裸体视频| 欧美深夜福利| 一区在线影院| 亚洲一区二区视频在线| 另类激情亚洲| 一区二区国产日产| 久久中文欧美| 国产日本欧美一区二区三区| 91久久精品国产91性色tv| 亚洲欧美中文另类| 欧美福利在线观看| 午夜在线不卡| 欧美精品一区二区三区蜜臀| 国产午夜久久| 亚洲综合色自拍一区| 欧美激情成人在线| 午夜伦理片一区| 欧美精品综合| 亚洲人成网站色ww在线| 亚洲第一黄网| 久久免费少妇高潮久久精品99| 9人人澡人人爽人人精品| 久久久青草婷婷精品综合日韩| 国产精品久久久99|