亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 孫鑫vc++講座筆記-(1)windows程序內(nèi)部運(yùn)行機(jī)制.txt

?? VC++技術(shù)內(nèi)幕精講
?? TXT
字號:
,windows程序設(shè)計(jì)是種事件驅(qū)動方式的程序設(shè)計(jì),主要基于消息的。當(dāng)用戶需要完成某種功能時(shí),需要調(diào)用OS某種支持,然后OS將用戶的需要包裝成消息,并投入到消息隊(duì)列中,最后應(yīng)用程序從消息隊(duì)列中取走消息并進(jìn)行響應(yīng)。2,消息結(jié)構(gòu):typedef struct tagMSG { // msg HWND hwnd; //接收消息的窗口句柄。和哪個(gè)窗口相關(guān)聯(lián)。 UINT message; //消息標(biāo)識。消息本身是什么。 WPARAM wParam; //消息的附加信息。具體取決于消息本身。 LPARAM lParam; DWORD time; //消息投遞時(shí)間。 POINT pt; //消息投遞時(shí),光標(biāo)在屏幕上的位置。 } MSG; 

3,消息隊(duì)列:每個(gè)應(yīng)用程序OS都為它建立一個(gè)消息隊(duì)列,消息隊(duì)列是個(gè)先進(jìn)先出的緩沖區(qū),其中每個(gè)元素都是一個(gè)消息,OS將生成的每個(gè)消息按先后順序放進(jìn)消息隊(duì)列中,應(yīng)用程序總是取走當(dāng)前消息隊(duì)列中的第一條消息,應(yīng)用程序取走消息后便知道用戶的操作和程序的狀態(tài),然后對其處理即消息響應(yīng),消息響應(yīng)通過編碼實(shí)現(xiàn)。

4,使用VC編程除了良好的C基礎(chǔ)外還需要掌握兩方面:一,消息本身。不同消息所代表的用戶操作和應(yīng)用程序的狀態(tài)。二,對于某個(gè)特定的消息來說,要讓OS執(zhí)行某個(gè)特定的功能去響應(yīng)消息。

5,Window程序入口:int WINAPI WinMain( HINSTANCE hInstance, // 當(dāng)前事例句柄。 HINSTANCE hPrevInstance, // 先前事例句柄。 LPSTR lpCmdLine, // 命令行指針 int nCmdShow // (窗口)顯示的狀態(tài));說明:WinMain函數(shù)是Windows程序入口點(diǎn)函數(shù),由OS調(diào)用,當(dāng)OS啟動應(yīng)用程序的時(shí)候,winmain函數(shù)的參數(shù)由OS傳遞的。

6,創(chuàng)建一個(gè)完整的窗口需要經(jīng)過下面四個(gè)操作步驟:一,設(shè)計(jì)一個(gè)窗口類;如:WNDCLASS wndcls;二,注冊窗口類; 如:RegisterClass(&wndcls);三,創(chuàng)建窗口; 如:CreateWindow(),CreateWindowEX();四,顯示及更新窗口。如:ShowWindow(),UpdateWindow();

說明:創(chuàng)建窗口的時(shí)候一定要基于已經(jīng)注冊的窗口類.

7,Windows提供的窗口類:typedef struct _WNDCLASS { UINT style; //窗口的類型 WNDPROC lpfnWndProc; //窗口過程函數(shù)指針(回調(diào)函數(shù)) int cbClsExtra; //窗口類附加字節(jié),為該類窗口所共享。通常0。 int cbWndExtra; //窗口附加字節(jié)。通常設(shè)為0。 HANDLE hInstance; //當(dāng)前應(yīng)用程序事例句柄。 HICON hIcon; //圖標(biāo)句柄 LoadIcon(); HCURSOR hCursor; //光標(biāo)句柄 LoadCursor(); HBRUSH hbrBackground; //畫刷句柄 (HBRUSH)GetStockObject(); LPCTSTR lpszMenuName; //菜單名字 LPCTSTR lpszClassName; //類的名字 } WNDCLASS; 

8,窗口類注冊:ATOM RegisterClass( CONST WNDCLASS *lpWndClass // address of structure with class // data);

9,創(chuàng)建窗口:HWND CreateWindow( LPCTSTR lpClassName, // pointer to registered class name LPCTSTR lpWindowName, // pointer to window name DWORD dwStyle, // window style int x, // horizontal position of window int y, // vertical position of window int nWidth, // window width int nHeight, // window height HWND hWndParent, // handle to parent or owner window HMENU hMenu, // handle to menu or child-window identifier HANDLE hInstance, // handle to application instance LPVOID lpParam // pointer to window-creation data);

10,顯示和更新窗口窗口:BOOL ShowWindow( HWND hWnd, // handle to window int nCmdShow // show state of window);BOOL UpdateWindow( HWND hWnd // handle of window);

11,消息循環(huán):MSG msg;while(GetMessage(&msg,...)) //從消息隊(duì)列中取出一條消息{ TranslateMessage(&msg); //進(jìn)行消息(如鍵盤消息)轉(zhuǎn)換 DispatchMessage(&msg); //分派消息到窗口的回調(diào)函數(shù)處理,(OS調(diào)用窗口回調(diào)函數(shù)進(jìn)行處理)。}

其中://**The GetMessage function retrieves a message from the calling thread's message queue and places it in the specified structure. //**If the function retrieves a message other than WM_QUIT, the return value is nonzero.If the function retrieves the WM_QUIT message, the return value is zero. If there is an error, the return value is -1. 

BOOL GetMessage( LPMSG lpMsg, // address of structure with message HWND hWnd, // handle of window UINT wMsgFilterMin, // first message UINT wMsgFilterMax // last message);

//The TranslateMessage function translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function. BOOL TranslateMessage( CONST MSG *lpMsg // address of structure with message);

//The DispatchMessage function dispatches a message to a window procedure. LONG DispatchMessage( CONST MSG *lpmsg // pointer to structure with message);

12,窗口過程函數(shù)(回調(diào)函數(shù))原型:The WindowProc function is an application-defined function that processes messages sent to a window. The WNDPROC type defines a pointer to this callback function. WindowProc is a placeholder(占位符) for the application-defined function name. 

LRESULT CALLBACK WindowProc( //這里WindowProc是個(gè)代號名字。 HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter);

說明:兩種函數(shù)調(diào)用約定(__stdcall 和 __cdecl):#define CALLBACK __stdcall //__stdcall 標(biāo)準(zhǔn)調(diào)用預(yù)定,是PASCAL 調(diào)用約定,象DELPHI使用的就是標(biāo)準(zhǔn)調(diào)用約定#define WINAPIV __cdecl // __cdecl 是C 語言形式的調(diào)用約定。

主要區(qū)別:函數(shù)參數(shù)傳遞順序 和 對堆棧的清除上。問題:除了那些可變參數(shù)的函數(shù)調(diào)用外,其余的一般都是__stdcall約定。但 C/C++編譯默然的是__cdecl約定。所以如果在VC等環(huán)境中調(diào)用__stdcall約定的函數(shù),必須要在函數(shù)聲明的時(shí)加上 __stdcall 修飾符,以便對這個(gè)函數(shù)的調(diào)用是使用__stdcall約定(如使用DELPHI編寫的DLL時(shí)候)。(VC中可通過這途徑修改:project|settings..|c/c++|...)

在窗口過程函數(shù)中通過一組switch語句來對消息進(jìn)行處理:如:LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ switch(uMsg) { case WM_PAINT: ... break; case ... break; case WM_CLOSE: //DestroyWindow(hwnd); //銷毀窗口,并發(fā)送WM_DESTROY消息。 break; case WM_DESTROY: //PostQuitMessage(0); //發(fā)送WM_QUIT消息到消息隊(duì)列中,請求終止。 //GetMessage()取到WM_QUIT消息后,返回0,退出消息循 // 環(huán),從而終止應(yīng)用程序。 break; default: return DefWindowProc(hwnd,uMsg,wParam,lParam); //用缺省的窗口過程處理我們不感興趣的消息(其它消息)。 //這是必須的。 }//switch return 0;}//WindowProc

13,DestroyWindow()函數(shù)和PostQuitMessage()函數(shù)原型://**The DestroyWindow function destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages。

BOOL DestroyWindow( HWND hWnd // handle to window to destroy);

//**The PostQuitMessage function indicates to the system that a thread has made a request to terminate (quit). It is typically used in response to a WM_DESTROY message. //**The PostQuitMessage function posts a WM_QUIT message to the thread's message queue and returns immediately; the function simply indicates(預(yù)示,通知) to the system that the thread is requesting to quit at some time in the future. 

When the thread retrieves the WM_QUIT message from its message queue, it should exit its message loop and return control to the system.

VOID PostQuitMessage( int nExitCode // exit code);14,關(guān)于DC句柄獲取:a)使用BeginPaint(),EndPaint()對。注意只能在響應(yīng)WM_PAINT消息時(shí)使用。b)使用GetDc(),ReleaseDC()對。注意他們不能在響應(yīng)WM_PAINT中使用。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲精品一区| 伊人色综合久久天天人手人婷| 伊人开心综合网| 日本一区二区综合亚洲| 精品一区二区国语对白| 日韩欧美一区二区免费| 亚洲丝袜精品丝袜在线| 日韩片之四级片| 亚洲亚洲精品在线观看| 精品一二三四区| proumb性欧美在线观看| 一区二区三区中文字幕| 日韩欧美一区二区免费| 欧美一区午夜精品| 中文字幕 久热精品 视频在线| 狠狠色丁香久久婷婷综| 老鸭窝一区二区久久精品| 久久久久久黄色| 中文欧美字幕免费| 亚洲女同ⅹxx女同tv| 国产精品美女一区二区三区| 国产精品丝袜在线| 日本美女一区二区三区视频| 欧美一区二区三区四区久久| 一区精品在线播放| 国产综合成人久久大片91| 久久精品视频一区| 洋洋av久久久久久久一区| 亚洲国产岛国毛片在线| 中文字幕精品一区| 精品国产乱码久久| 国产精品1区2区| 在线观看三级视频欧美| 欧美高清一级片在线| 99久久久无码国产精品| 欧美日韩一区二区三区不卡| 一本一道久久a久久精品综合蜜臀| 日韩一区二区免费视频| 欧美男男青年gay1069videost| 91丨porny丨在线| 高清不卡一区二区| 亚洲素人一区二区| 91丨porny丨最新| 日本乱人伦aⅴ精品| 亚洲成人av福利| 亚洲自拍欧美精品| 成人免费高清视频| 亚洲精品视频一区| 日本人妖一区二区| 亚洲一区免费视频| 成人黄页毛片网站| 欧美精三区欧美精三区| 国产精品一区二区在线观看网站| av网站免费线看精品| 韩国理伦片一区二区三区在线播放| 91福利小视频| 久久久久久久综合| 亚洲男人天堂av网| 日本一区二区三区国色天香| 中文字幕av在线一区二区三区| 久久久久久久精| 麻豆精品在线视频| 成人性生交大片免费看中文网站| 国产精品正在播放| 亚洲欧美日本在线| 欧美日韩成人综合天天影院 | 欧美性大战xxxxx久久久| 亚洲欧洲日韩av| 中文字幕一区二区三区在线不卡 | 亚洲国产综合色| 亚洲国产一区视频| 91在线精品秘密一区二区| 日韩一区二区不卡| 一区二区三区不卡在线观看 | 日本不卡视频在线| 亚洲精品免费在线| 韩国女主播一区| 中文字幕亚洲欧美在线不卡| 日本少妇一区二区| 欧美一区二区三区视频在线| www.在线欧美| 精品久久一区二区| 日韩不卡一二三区| 国产日韩欧美制服另类| 久久综合精品国产一区二区三区 | 综合分类小说区另类春色亚洲小说欧美| 蜜臀久久99精品久久久久宅男| 欧美高清在线精品一区| 午夜成人在线视频| 亚洲欧美二区三区| 日韩精品中文字幕一区二区三区| 亚洲美女视频在线| 中文字幕一区二区三区不卡在线 | 精品三级av在线| 亚洲区小说区图片区qvod| 99久久国产综合色|国产精品| 日韩精品一区二区在线| 99精品热视频| 国产欧美一区二区精品久导航 | 91麻豆产精品久久久久久 | 欧美一区二区在线免费观看| 国产精品久久久久影院| 紧缚奴在线一区二区三区| 日韩一级完整毛片| 国产一区在线视频| 久久99久久精品欧美| 精品国产123| 精彩视频一区二区三区| 中文字幕永久在线不卡| 欧美日韩一区成人| 亚洲欧美色一区| 久久尤物电影视频在线观看| 99精品久久久久久| 欧美另类变人与禽xxxxx| 欧美一区二区三区性视频| 久久99精品久久久久婷婷| 国产成人在线影院| 欧美大胆人体bbbb| 丁香婷婷综合色啪| 色哟哟精品一区| 国产精品538一区二区在线| 欧美男女性生活在线直播观看| 色综合久久久久综合体| 色婷婷av一区二区三区软件 | 麻豆精品视频在线观看免费| 日韩免费在线观看| 久久九九久精品国产免费直播| 国产精品系列在线| 国产精品色在线观看| 欧美日韩在线播放| 香蕉成人啪国产精品视频综合网| ww亚洲ww在线观看国产| 成人av资源网站| 精品播放一区二区| av男人天堂一区| 91在线你懂得| 精品一区二区国语对白| 成人av在线看| 884aa四虎影成人精品一区| 91麻豆免费在线观看| 国产网站一区二区| 国产欧美精品一区二区色综合朱莉| 国产精品久久免费看| 91丨porny丨国产入口| 97se亚洲国产综合自在线观| 亚洲二区在线观看| 综合分类小说区另类春色亚洲小说欧美| 色婷婷综合久久久久中文一区二区| 丰满白嫩尤物一区二区| 91精品啪在线观看国产60岁| 在线一区二区三区四区| 2021中文字幕一区亚洲| 亚洲精品乱码久久久久久久久| 久久66热re国产| 97久久精品人人爽人人爽蜜臀| 精品欧美乱码久久久久久| 亚洲精品高清在线| 欧美剧在线免费观看网站 | 成人av免费观看| 国产剧情av麻豆香蕉精品| 亚洲国产欧美在线人成| 欧美日韩国产经典色站一区二区三区 | 成人国产电影网| 国产精品久久久久久久第一福利 | 色噜噜狠狠成人网p站| 国产精品一区二区在线播放| 欧美日韩中字一区| fc2成人免费人成在线观看播放 | 一区二区三区日韩欧美| 九色综合狠狠综合久久| ...av二区三区久久精品| 欧美亚洲动漫精品| 国产精一品亚洲二区在线视频| 精品成a人在线观看| 欧美日韩国产美| 成人午夜视频在线观看| 久久精品999| 亚洲在线视频免费观看| 日韩av中文在线观看| 精品久久人人做人人爱| 欧美日韩的一区二区| 亚洲精品欧美激情| 日韩女优电影在线观看| 国产成人av在线影院| 99久久国产综合精品女不卡| 91精品久久久久久久99蜜桃| 精品国产青草久久久久福利| 99久久伊人久久99| 蜜桃免费网站一区二区三区| 中文字幕永久在线不卡| 丁香激情综合国产| 亚洲欧洲国产专区| 人人精品人人爱| 91福利资源站| 亚洲最色的网站| 欧美老肥妇做.爰bbww| 无码av免费一区二区三区试看 | 亚洲第一电影网| 天天操天天色综合| 日韩一区在线播放|