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函數:
第一個參數通常是一個窗口句柄。
第二個參數是在信息框里出現的文本字符串。
第三個參數是標題欄上顯示的文本字符串。
第四個參數是以前綴MB_開頭的一些常量組合。用以對話框中的按鈕,圖標等等。
函數的調用: MessageBox( hWnd, TEXT("信息框里的內容“), TEXT("標題框里的標題”), MB_OK);
該函數一般都如此調用,第四個參數都是 MB_***,以 MB 開頭的常量。
(函數的有些參數設置為 NULL, 或者 0 效果是一樣的,因為大多數編譯器把 NULL 宏定義為 0)
(注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)
(注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)
(注意:遇到程序在弄懂之后一定要自己去敲,一定要自己去敲,一定要自己去敲)