Windows程序的內部運行原理_第1頁
Windows程序的內部運行原理_第2頁
Windows程序的內部運行原理_第3頁
Windows程序的內部運行原理_第4頁
Windows程序的內部運行原理_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、WindowsWindows程序的程序的內部運行原理內部運行原理Windows程序設計是完全不同于程序設計是完全不同于Dos環(huán)境下的程序環(huán)境下的程序設計,是一種事件驅動的程序設計方法。主要是基設計,是一種事件驅動的程序設計方法。主要是基于于消息消息的。當用戶需要完成某種功能時,會調用的。當用戶需要完成某種功能時,會調用OS的某種支持,的某種支持,OS將用戶的需要包裝成某種消息,并將用戶的需要包裝成某種消息,并投遞到消息隊列當中。然后利用應用程序從消息隊投遞到消息隊列當中。然后利用應用程序從消息隊列中取走消息并進行響應。列中取走消息并進行響應。操作系統(tǒng)操作系統(tǒng)輸入輸出設備輸入輸出設備應用程序應用

2、程序消息隊列消息隊列操作系統(tǒng)能操作系統(tǒng)能操縱輸入輸操縱輸入輸出設備,以出設備,以執(zhí)行特定的執(zhí)行特定的功能功能操作系統(tǒng)能操作系統(tǒng)能感知輸入輸感知輸入輸出設備的狀出設備的狀態(tài)變化態(tài)變化 應用程序可應用程序可以通知操作以通知操作系統(tǒng)執(zhí)行某系統(tǒng)執(zhí)行某個具體的動個具體的動作作 操作系統(tǒng)能操作系統(tǒng)能夠將輸入設夠將輸入設備的變化上備的變化上傳給應用程傳給應用程序序 在應用程序中要完成某個功能,都是以函數調用的形式實現的,在應用程序中要完成某個功能,都是以函數調用的形式實現的,同樣,應用程序也是以函數調用的方式來通知操作系統(tǒng)執(zhí)行相同樣,應用程序也是以函數調用的方式來通知操作系統(tǒng)執(zhí)行相應的功能的。操作系統(tǒng)所能完

3、成的每一個特殊功能通常都有一應的功能的。操作系統(tǒng)所能完成的每一個特殊功能通常都有一個函數與其對應。也就是說,操作系統(tǒng)把它能完成的功能以函個函數與其對應。也就是說,操作系統(tǒng)把它能完成的功能以函數的形式提供給應用程序使用,應用程序對這些函數的調用就數的形式提供給應用程序使用,應用程序對這些函數的調用就叫做系統(tǒng)調用。這些函數的集合就是叫做系統(tǒng)調用。這些函數的集合就是windows操作系統(tǒng)提供給操作系統(tǒng)提供給應用程序的編程接口,即應用程序的編程接口,即API。如。如CreateWindow就是一個就是一個API函數,應用程序中調用這個函數,操作系統(tǒng)就會按照該函數提函數,應用程序中調用這個函數,操作系統(tǒng)

4、就會按照該函數提供的參數信息產生一個相應的窗口。供的參數信息產生一個相應的窗口。 應用程序如何通知操作系統(tǒng)應用程序如何通知操作系統(tǒng)執(zhí)行某個功能執(zhí)行某個功能比如用戶在某個程序活動時按下一個鍵,操作系統(tǒng)馬上能夠感比如用戶在某個程序活動時按下一個鍵,操作系統(tǒng)馬上能夠感知到這一事件,并且能知道用戶按下的是哪個鍵,操作系統(tǒng)并知到這一事件,并且能知道用戶按下的是哪個鍵,操作系統(tǒng)并不決定對這個事件如何做出反應,而是將這一事件轉交給應用不決定對這個事件如何做出反應,而是將這一事件轉交給應用程序,由應用程序決定如何對這一事件做出反應。程序,由應用程序決定如何對這一事件做出反應。好比有只蚊子叮了我們一口,我們的神

5、經末梢(相當于操作系好比有只蚊子叮了我們一口,我們的神經末梢(相當于操作系統(tǒng))馬上感知到這一事件,并傳遞給我們的大腦(相當于應用統(tǒng))馬上感知到這一事件,并傳遞給我們的大腦(相當于應用程序)。我們的大腦最終決定如何對這一事件做出反應,如將程序)。我們的大腦最終決定如何對這一事件做出反應,如將蚊子趕走,或是將蚊子拍死。對事件做出反應的過程就是消息蚊子趕走,或是將蚊子拍死。對事件做出反應的過程就是消息響應。響應。操作系統(tǒng)能夠將輸入設備的變化操作系統(tǒng)能夠將輸入設備的變化上傳給應用程序上傳給應用程序操作系統(tǒng)是怎樣將感知到的事件傳遞給應用程序的呢?操作系統(tǒng)是怎樣將感知到的事件傳遞給應用程序的呢?這是通過消

6、息機制(這是通過消息機制(Message)來實現的。操作系統(tǒng)將每個事)來實現的。操作系統(tǒng)將每個事件都包裝成一個稱為消息的結構體件都包裝成一個稱為消息的結構體MSG來傳遞給應用程序。來傳遞給應用程序。typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG; 關于消息和消息隊列關于消息和消息隊列窗口句柄消息的名字消息的附加參數窗口是屏幕上的一個矩形區(qū)域,應用程序窗口是屏幕上的一個矩形區(qū)域,應用程序在該區(qū)域中顯示數據并等待鼠標點擊。在該區(qū)域中顯示數據并

7、等待鼠標點擊。WindowsWindows應用程序的用戶界面可以包含許多應用程序的用戶界面可以包含許多窗口,當然要對這些窗口進行標識。窗口,當然要對這些窗口進行標識。窗窗 口口操作系統(tǒng)要管理和操作這些資源,都是通過句柄來找到對應操作系統(tǒng)要管理和操作這些資源,都是通過句柄來找到對應的資源。按資源的類型,又可將句柄細分成的資源。按資源的類型,又可將句柄細分成圖標句柄(圖標句柄(HICON)、光標句柄()、光標句柄(HCURSOR),),窗口句柄(窗口句柄(HWND),應用程序實例句柄(),應用程序實例句柄(HINSTANCE)等各種類型的句柄。等各種類型的句柄。操作系統(tǒng)給每一個窗口指定的一個唯一的

8、標識號即窗口句柄。操作系統(tǒng)給每一個窗口指定的一個唯一的標識號即窗口句柄。句柄就是資源的標識,就象指針一樣,我們要索引這樣一個句柄就是資源的標識,就象指針一樣,我們要索引這樣一個資源,就需要通過句柄去索引它。資源,就需要通過句柄去索引它。句柄:句柄: 資源的標識資源的標識int x,y; x=30,y=40;/x和和y既可以既可以用來表示坐標點,也可以用來表示寬度和用來表示坐標點,也可以用來表示寬度和高度,還可以用來表示身高和體重。高度,還可以用來表示身高和體重。typedef int WIDTH;typedef int HEIGHT;WIDTH x;HEIGHT y;/好處:我們從變量的類型就

9、可以知道好處:我們從變量的類型就可以知道x和和y是用來表示是用來表示寬度和高度。寬度和高度。從變量的類型區(qū)分變量的用途從變量的類型區(qū)分變量的用途操作系統(tǒng)會為每個應用程序建立一個消息隊列。這個隊列是個操作系統(tǒng)會為每個應用程序建立一個消息隊列。這個隊列是個先進先出的緩沖區(qū)。消息隊列中的每個元素都是一條消息。操先進先出的緩沖區(qū)。消息隊列中的每個元素都是一條消息。操作系統(tǒng)將生成的消息放在消息隊列里。第一條消息放入第一格,作系統(tǒng)將生成的消息放在消息隊列里。第一條消息放入第一格,第二條消息放入第二格,依次類推。應用程序總是取走消息隊第二條消息放入第二格,依次類推。應用程序總是取走消息隊列中的第一條消息。第

10、一條消息取走后,第二條消息往前移,列中的第一條消息。第一條消息取走后,第二條消息往前移,成為第一條,剩余的消息依次前移。應用程序取得消息后,便成為第一條,剩余的消息依次前移。應用程序取得消息后,便能知道用戶的操作以及應用程序的狀態(tài)的變化。能知道用戶的操作以及應用程序的狀態(tài)的變化。當收到消息的時候,會編寫針對這個消息的處理代碼,這個過當收到消息的時候,會編寫針對這個消息的處理代碼,這個過程就叫消息響應。消息響應是通過程序實現的,程就叫消息響應。消息響應是通過程序實現的,這就是這就是WindowsWindows應用程序的主要代碼區(qū)。應用程序的主要代碼區(qū)。消息隊列消息隊列消息隊列消息隊列PostMe

11、ssageSendMessage在消息響應過程中,我們可能要調用操作系統(tǒng)提供的其他在消息響應過程中,我們可能要調用操作系統(tǒng)提供的其他APIAPI函函數以便完成特定的功能。例如收到窗口關閉的消息,我們就可數以便完成特定的功能。例如收到窗口關閉的消息,我們就可以調用一個銷毀窗口的以調用一個銷毀窗口的APIAPI函數函數DestroyWindowsDestroyWindows去關閉該窗口,去關閉該窗口,或者彈出一個消息框提示用戶是否真的要關閉該窗口。或者彈出一個消息框提示用戶是否真的要關閉該窗口。消息隊列消息隊列Windows程序的入口函數程序的入口函數int APIENTRY _tWinMain

12、( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);WinMain函數函數實例句柄:當運行一個程序的時候,這個運行的程序就叫實例。先前應用程序實例句柄命令行參數顯示的狀態(tài)(1)設計一個窗口類)設計一個窗口類(2)注冊窗口類)注冊窗口類(3)創(chuàng)建窗口)創(chuàng)建窗口(4)顯示及更新窗口)顯示及更新窗口窗口的創(chuàng)建窗口的創(chuàng)建設計窗口類設計窗口類窗口類的類型Typedef struct tagWNDCLASSEXW UINT cbSize; UINT style; WNDPROC lpfnWndProc

13、; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; HICON hIconSm; WNDCLASSEXW#ifdef UNICODEtypedef WNDCLASSEXW WNDCLASSEX;在我們的程序中經常要用到一類變量,這個變量里的在我們的程序中經常要用到一類變量,這個變量里的每一位每一位(bit)都對應某一特性。當該變量的某位為都對應某

14、一特性。當該變量的某位為1時,時,表示有該位對應的哪種特性,當該位為表示有該位對應的哪種特性,當該位為0時,即沒有該時,即沒有該位所對應的特性。當變量中的某幾位同時為位所對應的特性。當變量中的某幾位同時為1時,就表時,就表示同時具有幾種特性的組合。一個變量中的哪一位代示同時具有幾種特性的組合。一個變量中的哪一位代表哪種意義,不容易記憶,所以根據特征的英文拼寫表哪種意義,不容易記憶,所以根據特征的英文拼寫的大寫去定義一些宏,該宏所對應的數值中僅有與該的大寫去定義一些宏,該宏所對應的數值中僅有與該特征相對應的那一位為特征相對應的那一位為1,其余的位都為,其余的位都為0。CS_VREDRAW=0X0

15、001, CS_HREDRAW=0X0002, CS_DBLCKS=0X0008, CS_NOCLOSE=0X0200。它。它們的共同點就是只有一位為們的共同點就是只有一位為1,其余位都為,其余位都為0.窗口類的類型窗口類的類型如果希望某一變量的數值既有如果希望某一變量的數值既有CS_VREDRAW特性,特性,又有又有CS_HREDRAW特性,只需使用二進制特性,只需使用二進制OR操作操作符符將它們進行或運算相組合。將它們進行或運算相組合。如如style=CS_VREDRAW| CS_HREDRAW| CS_NOCLOSE。如果希望在某一變量原有的幾個特征上去掉其中一個如果希望在某一變量原有的

16、幾個特征上去掉其中一個特征,用取反之后再進行與運算就能夠實現。特征,用取反之后再進行與運算就能夠實現。如如styl& CS_NOCLOSE。窗口類的類型窗口類的類型設計窗口類設計窗口類窗口過程函數typedef struct tagWNDCLASSEXW UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCWSTR lpszMenuN

17、ame; LPCWSTR lpszClassName; HICON hIconSm; WNDCLASSEXW回調函數的原理回調函數的原理:當應用程序收到給某一窗口的消息時:當應用程序收到給某一窗口的消息時(消息通常與窗口相關),就應該調用某一函數來處理這(消息通常與窗口相關),就應該調用某一函數來處理這條消息。這一調用過程不用應用程序自己來實施,而由操條消息。這一調用過程不用應用程序自己來實施,而由操作系統(tǒng)來完成,但是,回調函數本身的代碼必須由應用程作系統(tǒng)來完成,但是,回調函數本身的代碼必須由應用程序自己完成。對于一條消息,操作系統(tǒng)到底調用應用程序序自己完成。對于一條消息,操作系統(tǒng)到底調用應用

18、程序中的哪個函數(回調函數)來處理呢?操作系統(tǒng)調用的就中的哪個函數(回調函數)來處理呢?操作系統(tǒng)調用的就是接受消息的窗口所屬的類型中的是接受消息的窗口所屬的類型中的lpfnWndProc成員指成員指定的函數。每一種不同類型的窗口都有自己專用的回調函定的函數。每一種不同類型的窗口都有自己專用的回調函數,該函數是通過數,該函數是通過lpfnWndProc成員指定的。成員指定的。 窗口過程函數窗口過程函數汽車廠家生產汽車好比應用程序創(chuàng)建窗口,用戶使用汽車廠家生產汽車好比應用程序創(chuàng)建窗口,用戶使用汽車好比操作系統(tǒng)管理窗口,某種汽車在銷售前就指汽車好比操作系統(tǒng)管理窗口,某種汽車在銷售前就指定好了修理站(

19、類似回調函數),當用戶的汽車出現定好了修理站(類似回調函數),當用戶的汽車出現故障后(類似窗口接受到消息),汽車用戶(類似操故障后(類似窗口接受到消息),汽車用戶(類似操作系統(tǒng))自己直接找到修理站去修理,不用廠家(類作系統(tǒng))自己直接找到修理站去修理,不用廠家(類似應用程序)親自將車送到修理站去修理,但修理站似應用程序)親自將車送到修理站去修理,但修理站還得由廠家事先建造好。還得由廠家事先建造好。窗口過程函數窗口過程函數typedef struct tagWNDCLASSEXW UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtr

20、a; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBac kground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; HICON hIconSm; WNDCLASSEXW設計窗口類設計窗口類類的額外參數窗口的實例句柄光標的句柄畫刷的句柄菜單的名字類的名字圖標的句柄小圖標的句柄創(chuàng)建窗口創(chuàng)建窗口HWND CreateWindow( HWND CreateWindow( LPCTSTRLPCTSTR lpClassName, , /已注冊的窗口

21、類的名字LPCTSTRLPCTSTR lpWindowName, , / 窗口的名字,即標題欄上顯示的文字 DWORDDWORD dwStyle, , / 窗口的類型 intint x, , / 窗口顯示時左上角的x坐標intint y, , /窗口顯示時左上角的y坐標intint nWidth, , / 窗口寬度 intint nHeight, , / 窗口高度 HWNDHWND hWndParent, , / 父窗口的句柄 HMENUHMENU hMenu, , / 菜單的句柄 HINSTANCEHINSTANCE hInstance, , / 實例的句柄 LPVOIDLPVOID lpP

22、aram / 與窗口相關的附加參數 ););消息循環(huán)消息循環(huán)hAccelTable =LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_WINMAIN2); 裝載指定的加速鍵表。(加速鍵就是比如你按Ctrl+N會新建文檔,Ctrl+S會保存文檔,這些組合鍵就是加速鍵。使用加速鍵首先要建立加速鍵的資源,然后在程序初始化的時候LoadAccelerators,然后在WinMain主消息循環(huán)中調用TranslateAccelerator)GetMessage是從消息隊列中取消息,操作系統(tǒng)會為是從消息隊列中取消息,操作系統(tǒng)會為每個應用程序建立一個消息隊列。每

23、個應用程序建立一個消息隊列。BOOL GetMessage( LPMSG lpMsg, / 消息消息 HWND hWnd, / 窗口句柄,表明從哪個窗口的消息隊列中取消息。窗口句柄,表明從哪個窗口的消息隊列中取消息。 UINT wMsgFilterMin, / 消息的最小值消息的最小值 UINT wMsgFilterMax / 消息的最大值消息的最大值 );消息循環(huán)消息循環(huán)通過指定消息的通過指定消息的范圍來過濾消息。范圍來過濾消息。如果都為如果都為0,則,則沒有消息的過濾沒有消息的過濾消息循環(huán)消息循環(huán)TranslateAccelerator(msg.hwnd, hAccelTable, &am

24、p;msg);(當你定義的組合鍵出現時,該函數會把這個組合鍵消息翻譯成hwnd對應的窗口的WM_COMMAND消息,并直接Send到窗口過程,得到處理后該函數才返回)該函數翻譯成功時返回非0值,如果失敗,則返回0值即成功時就不需再調用TranslateMessage和DispatchMessage函數BOOL TranslateMessage( const MSG *lpMsg );/翻譯消息翻譯消息就是對取到的消息對進行轉換。就是對取到的消息對進行轉換。當我們按下鍵盤上的某一個按鍵時,系統(tǒng)會產生當我們按下鍵盤上的某一個按鍵時,系統(tǒng)會產生WM_KEYDOWN和和WM_KEYUP兩個消息,并且參

25、數中提供這個鍵的虛擬掃描碼。兩個消息,并且參數中提供這個鍵的虛擬掃描碼。但用戶按下某個鍵,可能需要知道具體按下的是哪個字符,在但用戶按下某個鍵,可能需要知道具體按下的是哪個字符,在消息的附加參數中提供該鍵的消息的附加參數中提供該鍵的ASCII碼。碼。TranslateMessage會將會將WM_KEYDOWN和和WM_KEYUP兩個消息轉兩個消息轉換成換成WM_CHAR消息,并且將轉換好的消息投遞到消息隊列消息,并且將轉換好的消息投遞到消息隊列中。這個轉換過程不會影響原來的消息,只會產生一個新消息。中。這個轉換過程不會影響原來的消息,只會產生一個新消息。如果我們不用這個函數,則收不到如果我們不

26、用這個函數,則收不到WM_CHAR消息。消息。消息循環(huán)消息循環(huán)DispatchMessage函數的作用是將收到的消息傳給函數的作用是將收到的消息傳給窗口的回調函數,即窗口過程函數去處理??梢赃@樣窗口的回調函數,即窗口過程函數去處理。可以這樣理解,該函數將消息路由給了操作系統(tǒng),操作系統(tǒng)通理解,該函數將消息路由給了操作系統(tǒng),操作系統(tǒng)通過調用窗口過程函數去處理消息。這個窗口過程函數過調用窗口過程函數去處理消息。這個窗口過程函數就是在就是在設計窗口類時設計窗口類時指定的。指定的。每當從消息隊列中取到一條消息時,都會調用窗口過每當從消息隊列中取到一條消息時,都會調用窗口過程函數。因此在該函數中我們要判讀

27、是哪個消息。用程函數。因此在該函數中我們要判讀是哪個消息。用的是的是SWITCH語句。語句。消息循環(huán)消息循環(huán)設計窗口類設計窗口類窗口過程函數typedef struct tagWNDCLASSEXW UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBac kground; LPCWSTR lpszMenuName; LPCWSTR lpszClassName; HIC

28、ON hIconSm; WNDCLASSEXW是調用的約定。是調用的約定。vc+中有中有2種調用約定。一種是標準的調用約種調用約定。一種是標準的調用約定,一種是定,一種是C語言的調用約定。標準的調用約定就是語言的調用約定。標準的調用約定就是PASCAL的調用。主要是參數傳遞的順序以及堆棧的清除有些差異。除的調用。主要是參數傳遞的順序以及堆棧的清除有些差異。除了可變參數的函數外,其余的函數都是了可變參數的函數外,其余的函數都是STDCALL的調的調用習慣,但是用習慣,但是c+的編譯環(huán)境,缺省下是的編譯環(huán)境,缺省下是cdecl的調用約定。的調用約定。所以在所以在vc+中要調用中要調用stdcall

29、這樣調用約定的這樣調用約定的API函數的話,就函數的話,就要在函數原型前說明要在函數原型前說明stdcall,回調函數也應該是。,回調函數也應該是。CALLBACK操作系統(tǒng)會在多個不同的時機發(fā)送操作系統(tǒng)會在多個不同的時機發(fā)送WM_PAINT消息:消息:(1)當第一次創(chuàng)建一個窗口時)當第一次創(chuàng)建一個窗口時(2)當改變窗口的大小時)當改變窗口的大小時(3)當把窗口從另一個窗口背后移出時)當把窗口從另一個窗口背后移出時(4)當最大化或最小化窗口時等等)當最大化或最小化窗口時等等這些動作都是由系統(tǒng)管理的,應用只是被動地接收該消這些動作都是由系統(tǒng)管理的,應用只是被動地接收該消息,在消息響應中進行繪制操作

30、;息,在消息響應中進行繪制操作; WM_PAINT消消 息息Windows程序的生與死程序的生與死(1)程序初始化過程中調用)程序初始化過程中調用CreateWindow,為程序,為程序建立一個窗口。建立一個窗口。CreateWindow產生窗口之后會發(fā)送產生窗口之后會發(fā)送WM_CREATE消息給窗口函數。消息給窗口函數。(2)在程序運行的過程中,不斷用)在程序運行的過程中,不斷用GetMessage函數函數從消息隊列中抓取消息。如果該消息是從消息隊列中抓取消息。如果該消息是WM_QUIT,GetMessage會傳回會傳回0而結束而結束while循環(huán),進而結束整個循環(huán),進而結束整個程序。程序。

31、(3)DispatchMessag把消息派送到窗口函數。消息把消息派送到窗口函數。消息將在窗口函數中被判讀并處理。將在窗口函數中被判讀并處理。(4)程序不斷進行()程序不斷進行(2)和()和(3)的操作。)的操作。Windows程序的生與死程序的生與死(5)當按下系統(tǒng)菜單中的)當按下系統(tǒng)菜單中的Close命令時,系統(tǒng)發(fā)送命令時,系統(tǒng)發(fā)送WM_CLOSE消息。一般程序的窗口函數不需要處理該消息,消息。一般程序的窗口函數不需要處理該消息,于是于是DefWindowProc處理它。處理它。(6)DefWindowProc收到收到WM_CLOSE后,調用后,調用DestroyWindow把窗口清除。把

32、窗口清除。DestroyWindow本身又會發(fā)本身又會發(fā)送送WM_DESTROY消息。消息。(7)程序對)程序對WM_DESTROY消息的反應是調用消息的反應是調用PostQuitMessage。(8)PostQuitMessage沒什么其它操作,只是送出沒什么其它操作,只是送出WM_QUIT消息,準備讓消息循環(huán)中的消息,準備讓消息循環(huán)中的GetMessage取得,如取得,如(2)所示,結束消息循環(huán)。)所示,結束消息循環(huán)。WNDCLASSEX wcex;wcex.cbSize= sizeof(WNDCLASSEX); wcex.style= CS_HREDRAW | CS_VREDRAW;wc

33、ex.lpfnWndProc= (WNDPROC)WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= LoadIcon(hInstance, (LPCTSTR)IDI_HELLO);wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName= (LPCSTR)IDC_HELLO;wcex.lpszClassName= szWindowClass;wcex.hIconSm= LoadIcon(wcex.hInstance, (LPCTSTR)ID

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論