WindowsAPI编程⼊门
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) ;
return0 ;
}
该程序的 #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);第⼀个参数通常是⼀个窗⼝句柄。
第⼆个参数是在信息框⾥出现的⽂本字符串。
第三个参数是标题栏上显⽰的⽂本字符串。
第四个参数是以前缀MB_开头的⼀些常量组合。⽤以对话框中的按钮,图标等等。
函数的调⽤: MessageBox( hWnd, TEXT("信息框⾥的内容“), TEXT("标题框⾥的标题”), MB_OK);
该函数⼀般都如此调⽤,第四个参数都是 MB_***,以 MB 开头的常量。
(函数的有些参数设置为 NULL, 或者 0 效果是⼀样的,因为⼤多数编译器把 NULL 宏定义为 0)windows程序设计第7版pdf
(注意:遇到程序在弄懂之后⼀定要⾃⼰去敲,⼀定要⾃⼰去敲,⼀定要⾃⼰去敲)
(注意:遇到程序在弄懂之后⼀定要⾃⼰去敲,⼀定要⾃⼰去敲,⼀定要⾃⼰去敲)
(注意:遇到程序在弄懂之后⼀定要⾃⼰去敲,⼀定要⾃⼰去敲,⼀定要⾃⼰去敲)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。