標籤:有一個 最小化 任務管理 機器 區別 進程 str div oms
Windows 工作原理的中心思想就是“動態連結”概念。Windows 自身帶有一大套函數,應用程式就是通過調用這些函數
來實現它的使用者介面和在螢幕上顯示文本和圖形的。這些函數都是在動態連結程式庫裡實現的。
這些檔案的名稱都帶有尾碼 .dll,或有時帶有 .exe。
Windows 的 3 個主要子系統:核心(kernel),使用者(user),GDI。
核心 負責作業系統的傳統工作:如 記憶體管理,檔案輸入/輸出 以及任務管理等。
使用者 指的是使用者介面,負責所有的視窗管理。
GDI 就是圖形裝置介面,負責在螢幕或印表機上顯示文本與圖形。
在 Windows 程式中,調用 Windows 函數與調用 C 語言的庫函數沒有什麼兩樣。
最主要的區別就是 C 語言庫函數的機器代碼會直接連結到你的程式碼中去,而 Windows 函數則是放到你的程式之外的 DLL 裡。
Windows 程式運行時,它通過一個叫“動態連結”的進程與 Windows 介面。
每個 Windows 的 EXE 檔案包含它所要用到的各個動態連結程式庫以及庫中的函數的引用地址。
當一個 Windows 程式被裝入記憶體後,程式中的函數調用都被解析 DLL 函數入口的指標,同時這些被調用的函數也被裝入記憶體。
當連結 Windows 程式以生存可執行檔時,一定得連結你的編程環境所提供的特殊的“匯入庫”。
這些匯入庫包含所有 Windows 函數調用要碰到的動態連結程式庫的名字及引用資訊。連結程式利用這些資訊構建 EXE 檔案中的表格,
當裝入程式的時候,Windows 要靠這些表格來解析 Windows 函數調用。
另外值得提醒的一點是,MFC 是對 API 的封裝,隱藏了許多複雜的情節。
Windows 的 Hello World!程式:
#include <windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){ MessageBox (NULL, TEXT ("Hello, World!"), TEXT ("HelloMsg"), MB_OKCANCEL) ; return 0 ;}
該程式的 #include<windows.h> 就是像 C 語言的 #include<stdio.h> 一樣重要的標頭檔。
而 int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
就像 C 語言的 int main(void) 一樣,都是程式的入口。C 程式的入口是 main,Windows 程式的入口是 WinMain。
絕大多數的 Windows 程式都遵循“匈牙利標記法”:
變數名前都有一個短首碼,用以表明該變數的資料類型。
首碼 |
資料類型 |
c |
char 或 WCHAR 或 TCHAR |
by |
BYTE(無符號字元) |
n |
short(短整型) |
i |
int(整型) |
x,y |
int,表示 x 座標和 y 座標 |
cx,cy |
int,表示 x 或 y 的長度,c 表示“count”(計數) |
B 或 f |
BOOL(int); f 表示“flag” |
w |
WORD(無符號短整型) |
l |
LONG(長整型) |
dw |
DWORD(無符號長整型) |
fn |
函數 |
s |
字串 |
sz |
以零結束的字串 |
h |
控制代碼 |
p |
指標 |
WinMain的第一個參數叫做"執行個體控制代碼"(Instance Handle)。控制代碼就是一個數值,用它來標識某些東西。
控制代碼是一個 4byte 的數值,可用來標識 視窗,按鈕,表徵圖,捲軸,輸出裝置,控制項或者檔案等等。
WinMain的第二個參數通常是 NULL。
WinMain的第三個參數是用來運行程式的命令列(CommandLine)。
WinMain的第四個參數是用來指明程式最初如何顯示。(最大化到全屏,正常顯示,最小化到工作列)。
MessageBox函數:
函數原型:int WINAPI MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);
第一個參數通常是一個控制代碼,可以為NULL。
第二個參數是在資訊框裡出現的文本字串。
第三個參數是標題列上顯示的文本字串。
第四個參數是以首碼MB_開頭的一些常量組合。用以對話方塊中的按鈕,表徵圖等等。
函數的調用: MessageBox( NULL, TEXT("資訊框裡的內容“), TEXT("標題框裡的標題”), MB_OK);
該函數一般都如此調用,第四個參數都是 MB_***,以 MB 開頭的常量。
Windows API 編程入門