亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

WinAPI簡單入門

2019-09-06 23:33:14
字體:
來源:轉載
供稿:網友

                    不要覺得奇怪,雖然我們擁有眾多“所見即所得”的編程方式來開發(fā)眾多界面精美的應
用程序,這些可視化的編程環(huán)境提供了大量的類庫和控件,但是在開發(fā)者享受方便的同時,
他們的手腳已經不知不覺的受到了限制,有很多深入到Windows內部的操作它們無法完成,
為什么?因為所用的類庫不支持。

  事實上這些類庫與控件都是架構在Window API的基礎上面的,API即 Application
Programming Interface -- 應用編程接口 的縮寫,它不僅為應用程序所調用,同時也是
Windows的一部分,Windows自身的運行也調用這些API函數。要了解如何使用API就必須了
解一些Windows的運行機制。

  簡單地說,Windows是由事件驅動的搶占式多任務操作系統。事件驅動是相對于過程驅
動而言的,它改變了原來文件的順序執(zhí)行方式;Windows既然是多任務系統,就必須能同時
處理多個事件,系統為應用程序生成一個消息隊列,消息在上面被張貼和發(fā)送,應用程序只
要從其消息隊列中取出消息,然后一一執(zhí)行就可以了。

  現在,我將使用最最基本的范例程序 HelloWin 來說明WIN32 API的運行機制

首先,一個程序一定要有進入點,Win32 App的進入點函數的名稱是WinMain,它的原型如下
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)


hInstance是所謂的“實例句柄”,它是一個數值,當程序在Windows下運行的時候,它被用
來唯一的標示這個程序,雖然用戶可能同時運行多個同一個程序,即運行多個“實例”,我
們可以看到,每一個實例都有不同的hInstance值。

hPrevInstance,簡單地說就是沒用…它是存在于16位Windows程序中的,在編寫
Windows 9x/NT/2000 程序的時候,總應該是NULL。

szCmdLine是一個指針,指向一個以0為終結的字串,里面包含傳給該程序的命令行參數,
如果想要讓程序處理命令行,那么這個參數就有用了。

iCmdShow參數是一個數值,指示窗口將如何被顯示,這個數值由在Windows下運行該程序的
程序所決定,通常是SW_SHOWNORMAL。

接下來是注冊一個窗口類,窗口總是從窗口類的基礎上創(chuàng)建的,窗口類用以標示處理窗口消
息的窗口過程,注冊窗口類時使用 RegisterClassEx() 函數,它只需要一個參數,一個指向
類型為 WNDCLASSEX 的結構指針。

具體注冊初始是這樣的:
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);     //結構的大小

wcex.style = CS_HREDRAW | CS_VREDRAW; //類風格
wcex.lpfnWndProc = (WNDPROC)WndProc;  //窗口類的窗口過程
wcex.cbClsExtra = 0;            //在類結構中預留的空間
wcex.cbWndExtra = 0;           //在Windows內部保存的窗口結構中預留的空間
wcex.hInstance = hInstance;        //程序的實例句柄
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_EXAMPLE);  //程序圖標
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);         //結構的大小
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);    //指定窗口的背景顏色
wcex.lpszMenuName = (LPCSTR)IDC_EXAMPLE;         //菜單
wcex.lpszClassName = szWindowClass;             //類名,和程序名相同
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);    //也是程序圖標

return RegisterClassEx(&wcex);

接下來,定義一個HWND,然后使用 CreateWindow() 函數,原型如下:
HWND CreateWindow(
  LPCTSTR lpClassName,    // 窗口類名
  LPCTSTR lpWindowName,  // 窗口標題
  DWORD dwStyle,       // 窗口風格
  int x,             // 初始x
  int y,             // 初始y
  int nWidth,          // 窗口寬
  int nHeight,         // 窗口高
  HWND hWndParent,     // 父窗口句柄
  HMENU hMenu,       // 菜單句柄
  HINSTANCE hInstance,   // 實例句柄
  LPVOID lpParam       // 創(chuàng)建參數
);

在 CreateWindow() 調用返回之后,Windows內部已經創(chuàng)建了這窗口。但是窗口并為顯示,
還需要兩個調用,一個是 ShowWindow(hwnd, iCmdShow):第一個參數是剛剛創(chuàng)建的窗口
句柄,第二個參數是傳遞給WinMain的nCmdShow;另一個是 UpdateWindow(hwnd) ,導致
客戶區(qū)域被繪制。

接下來,程序通過執(zhí)行一塊被稱為“消息循環(huán)”的代碼從消息隊列中取出消息

while (GetMessage(&msg, NULL, 0, 0))
{
  if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
}

消息循環(huán)以 GetMessage 開始,它從消息隊列中取出一條消息,只要從消息隊列中取出消
息的 Message 域不為 WM_QUIT,GetMessage 就返回一個非零值,否則將導致程序退出
消息循環(huán),然后程序中止,返回 msg 結構的 wParam 參數。在循環(huán)中,TranslateMessage
將 msg 結構的內容進行修改,而 DispatchMessage 找出準備調用的窗口過程。

上面進行的僅僅是準備性工作:注冊窗口類、創(chuàng)建窗口、顯示窗口、進入消息循環(huán)取出消息
而實際的動作都發(fā)生在窗口過程中。

LRESULT CALLBACK WndProc(HWND hWnd, //剛剛創(chuàng)建的窗口句柄
  UINT message,           //得到的消息
  WPARAM wParam,
  LPARAM lParam           //消息的進一步詳細的參數
)

在程序中窗口過程通常是命名為 WndProc 的函數,其實窗口過程可以任意的命名,一個
Windows程序可以包含多個窗口過程,一個窗口過程總是與調用了 RegisterClassEx 注冊的
窗口類相關聯,CreateWindow 函數根據窗口類來創(chuàng)建窗口,但是一個窗口類可以被用來創(chuàng)
建多個窗口。


消息收到之后,接下來應該根據消息的不同來進行處理
switch(message)
{
 case …:
 …
 …

HelloWin程序只需要處理兩條消息,即 WM_PAINT 和 WM_DESTROY。

WM_PAINT 消息在Windows程序中的地位極其重要,當窗口客戶區(qū)的一部分或者全部變?yōu)?br />“無效”,必須進行刷新的時候,將由這條消息通知程序。

為什么客戶區(qū)域會變得無效呢?在創(chuàng)建窗口的時候,整個客戶區(qū)都是無效的,因為還沒有畫
任何的東西。第一條 WM_PAINT 消息指示窗口過程在窗口上面畫一些東西;還有在用戶改
變了窗口的大小之后,客戶區(qū)域重新變得無效,除此之外最小化窗口之后再還原、窗口的一
部分被覆蓋,都會引發(fā)這條消息。

WM_DESTROY消息則是當用戶按下“關閉”按鈕的時候被觸發(fā),標準的處理方法是調用
PostQuitMessage 將一條 WM_QUIT 消息插入消息隊列,這將使得 GetMessage 函數調用
返回0,從而退出消息循環(huán),結束整個程序。

其實,從上面可以看出,Windows程序的這種運行機制并不是很難理解,真正困難的是不知
道調用什么函數去完成想要的操作,以及怎樣調用那些函數,從而靈活的進行底層API程序
開發(fā),這是一個循序漸進的積累過程,沒有捷徑可走的。請各位一定要記住。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

精品一区二区三区四区| 成人免费观看在线网址| 九九九热精品免费视频观看网站| 性欧美亚洲xxxx乳在线观看| 亚洲午夜国产成人av电影男同| 黄网在线观看视频| 亚洲波多野结衣| 欧美动物xxx| 亚洲欧美精品午睡沙发| 国产在线视频你懂| 日本丰满少妇一区二区三区| 正在播放日韩精品| 欧美片一区二区三区| 3d性欧美动漫精品xxxx软件| 国产日产精品一区二区三区四区| 国产视频在线看| 青青草综合视频| 欧美性感一类影片在线播放| 性欧美1819sex性高清| 日本一区二区三区免费观看| 人妻视频一区二区| 日韩视频一区| 开心激情综合| 国产女优一区| 精品国产欧美日韩一区二区三区| 日韩中文字幕在线精品| 国产免费不卡| 国产91在线精品| 日韩av综合网| 日本在线视频中文有码| 国产草草影院ccyycom| 先锋影音一区二区| 国产1区2区| 朝桐光av在线一区二区三区| 中文字幕一区二区在线观看| 日韩专区中文字幕| 影音先锋男人资源站在线观看| 影音先锋男人看片资源| 精品福利在线观看| 91在线视频观看| 五月天丁香在线| 国产性猛交╳xxx乱大交| 亚洲人在线播放| 日韩欧美国产成人一区二区| 日韩美女啊v在线免费观看| 亚洲午夜在线电影| 无码国产精品高潮久久99| 中文字幕人成高视频| 免费在线中文字幕| 日韩 欧美 高清| 天天干天天爽天天操| 国产99久久久国产精品成人免费| 国产午夜精品免费一区二区三区| 三上悠亚一区二区| 一级欧美一级日韩| 欧美午夜精品久久久久久蜜| 最近中文字幕免费视频| 亚洲在线不卡| 欧美视频免费看欧美视频| 182在线播放| 久久影院理伦片| 成人国产精品免费| 国产白浆在线观看| 亚洲在线观看av| 国产成人成网站在线播放青青| 69国产成人精品视频软件| 国产三级精品三级在线观看| 97人妻一区二区精品视频| a级毛片免费高清视频| 一区精品在线播放| 国产亚洲成av人在线观看导航| 91sese| 激情婷婷久久| 91久久国产婷婷一区二区| 中国女人内谢69视频| 青青青视频在线播放| 精品人妻无码一区二区性色| 欧美精品在线视频| 欧美freesex黑人又粗又大| 亚洲精品美国一| 日韩精品一区在线观看| 在线视频2区| 久久免费高清视频| 国产成人av一区二区三区不卡| 可以在线看的黄色网址| 一级毛片在线| 一二三四日本在线| 激情久久av| 国外亚洲成av人片在线观看| 国产精品男人的天堂| 国产视频123区| 亚洲色图官网| 国产精品亚洲综合天堂夜夜| 中文字幕日韩视频| 欧美v亚洲v综合ⅴ国产v| 国产在线播放你懂的| 麻豆明星ai换脸视频| 蜜臀av一区二区在线免费观看| 亚洲综合网站| 亚洲精品理论片| 91精品天堂| 午夜天堂在线观看| 小嫩嫩精品导航| 国产一区二区三区直播精品电影| 一区二区三区精品视频在线观看| 中文字幕天堂av| 日本中文字幕在线一区| 久久视频在线免费观看| 99久久精品免费观看| 国产成人精品一区二三区在线观看| 国产精品成人一区二区| 一区二区91| 三级网站在线免费观看| kk眼镜猥琐国模调教系列一区二区| 亚洲狠狠丁香婷婷综合久久久| 97精品在线视频| 一本色道久久综合亚洲精品不卡| 亚州成人在线电影| 欧美在线影院| 性感少妇一区| 久久免费国产| 亚洲高潮无码久久| 婷婷丁香激情综合| 成人在线爆射| 久久综合伊人77777蜜臀| 欧美hdxxx| 久久久久久国产免费a片| 青青草精品在线| 亚洲av综合色区无码另类小说| 懂色av一区二区三区在线播放| 中日韩一区二区三区| 国产精品亚洲一区| 一区二区三区视频免费视频观看网站| 少妇光屁股影院| 久久国产波多野结衣| 五月天视频一区| 日韩成人免费av| 日韩黄色一级视频| 激情亚洲网站| 久久噜噜噜精品国产亚洲综合| 精品av一区二区| 刘亦菲国产毛片bd| 欧美综合一区二区三区| 日本美女视频一区二区| 97国产成人无码精品久久久| 日韩av片子| av影片在线一区| 国语对白在线视频| 国产在线2020| 欧美成人精品免费| 欧美日韩123| 五月天婷婷综合社区| 91成人伦理在线电影| 800av免费在线观看| 久久精品一二三区| 韩国中文字幕av| 最新一区二区三区| 97在线资源站| 中文字幕一区二区三区人妻在线视频| 免费成人在线看| 中文字幕免费高清电视剧网站在线观看| 91国语精品自产拍| 热久久99这里有精品| 亚洲精品18| 伊人国产精品视频| 在线a免费观看| 黄网免费入口| 欧美视频精品全部免费观看| 午夜伦理大片视频在线观看| 麻豆极品一区二区三区| 欧美一级二级三级| 久久久国产精品x99av| 亚洲一区二区日韩| 国产精品二区三区四区| 波多野结衣久久高清免费| av不卡一区二区| 国产精品高潮粉嫩av| 韩国女主播成人在线观看| 成人精品电影| 二区三区中文字幕| 性欧美.com| 毛片av在线播放| 成年网站在线播放| 亚洲九九精品| 免费影院在线观看一区| 在线观看三级网站| 欧美一区二区网站| 一级黄色大片网站| 天天在线女人的天堂视频| 91免费精品国偷自产在线在线| 日韩av中文字幕一区| 欧美xxxooo| 欧美精品亚洲精品日韩精品| 久草中文在线视频| 97超碰资源站| 亚洲综合图片一区| 日韩激情在线视频| 国产精品羞羞答答在线| 久久综合亚洲色hezyo国产| 国模一区二区三区| 国产精品久久九九| 又黄又爽又色视频| 成人片在线免费看| 欧美日韩尤物久久| 伦理欧美一区| 国内精品久久久久久影院8f| 欧美亚洲高清| 国产成人精品亚洲日本在线桃色| 毛片女人与拘交视频| 97视频在线看| 日本成人不卡| 亚洲一区二区三区四区av| 国产精品久久久久久中文字| 91精品婷婷国产综合久久竹菊| 国产视频中文字幕在线观看| 欧美亚洲日本精品| 国产大学生自拍| 亚洲福利一区二区| av在线不卡网站| 亚洲欧美日韩国产| 在线看欧美日韩| 亚久久调教视频| 亚洲激情视频在线观看| 久9re热视频这里只有精品| 亚洲欧美日本在线| 91精品国产综合久久久久久漫画| 亚洲直播在线一区| 成人亚洲欧美一区二区三区| 精品高清美女精品国产区| 1769国产精品视频| 神马久久资源| 午夜国产精品一区| 国内精品久久久久久久果冻传媒| 国产一区二区电影在线观看| 不卡中文一二三区| 国产精品伊人色| a级毛片免费观看在线| 日韩欧美在线第一页| 久久国产精品 国产精品| 日韩在线观看第一页| 色屁屁草草影院ccyycom| 精品一区二区三区在线观看| 亚洲调教视频在线观看| 亚洲精品视频免费观看| 性xx十八spa按摩| 欧美精品一区二区三区在线| 久久久久久免费视频| 亚洲伦理在线观看| 久久一区二区三区四区五区| 亚洲成年人在线播放| 午夜影视一区二区三区| 亚洲色图日韩av| 日韩av一区二区三区| 欧美又大粗又爽又黄大片视频| 欧美成人国产精品一区二区| 免费不卡亚洲欧美| 9999在线精品视频| 2020国产精品久久精品不卡| 最新在线中文字幕| 北条麻妃一区二区三区在线| 青春草视频在线观看| 污视频网站在线| 日本中文字幕在线| 欧美日韩久久一区二区| 免费看黄色aaaaaa 片| 成人中文视频| sihu影院永久在线影院| 无码人妻一区二区三区免费n鬼沢| 亚洲视频在线播放免费| 日本高清不卡免费| 国产精品三级在线| 一区二区成人精品| 久久中文字幕在线| 精品动漫3d一区二区三区免费版| 蜜桃特黄a∨片免费观看| 国产视频aaa| 欧美精品一区二区三区中文字幕| 2020中文字幕在线播放| 亚洲欧美在线观看| 欧美黄色成人| 国产美女久久| 18成人在线视频| xxxxxwwww免费视频| 91sa在线看| 91麻豆桃色免费看| 欧美日韩国产传媒| 日韩欧美在线观看一区二区三区| 夜色资源站国产www在线视频| 精品久久久久久中文字幕2017| 亚洲尤物在线| 国产成人aa精品一区在线播放| 亚洲国产高清在线观看视频| 国产精品久99| 97影院秋霞午夜在线观看| 亚洲天堂在线视频观看| 国产精品嫩草69影院| 国产精品一区视频| 国产乱码久久久久久| 久久综合伊人77777尤物| 国产日韩中文在线| 在线观看精品| 视频一区二区三区在线看免费看| 亚洲mv在线看| 电影在线观看一区二区| 91黄色免费观看| 波多野结衣家庭教师在线| 午夜视频在线播放| 日本vs亚洲vs韩国一区三区二区| 日本成人激情视频| 精品免费久久久久久久| 久久77777| 国产经典欧美精品| 日韩不卡在线| 欧美激情2020午夜免费观看| 亚洲制服丝袜在线播放| 国产亚洲精品成人av久久ww| 日韩视频一区二区| 91亚洲一线产区二线产区| 成人av综合在线| 国产人与禽zoz0性伦| 欧美野外多人交3| 亚洲美女av黄| av成人动漫| 天海翼在线播放| 国产毛片精品久久| 色婷婷综合成人| 精品午夜久久福利影院| 欧美视频亚洲色图|