系统基本服务是 Windows API 最基本的内容,是最常使用到的程序接口。系统基本服务API 包括以下几个方面。
对文件的基本操作包括文件的创建、打开、读写、关闭、删除,文件属性的设置与获取,目录操作,以及磁盘分卷的操作,还包括镜像文件、加密文件系统等。
主要是内在的分配、共享、释放等内容,包括虚拟内存管理、分页机制、堆管理等。
包括进程主程序( exe)、模块、动态链接库(dll)的编写;线程的基本概念,线程创建、遍历、同步等操作;进程与权限;线程与纤程等内容。
包括设备对象等基本概念。加载与卸载驱动程序,控制驱动程序,与驱动程序通信等。
包括如何开发调试器,程序运行错误的处理,日志的记录、Windows 可执行文件的结构等。
包括注册表的操作,如打开注册表,读取、写入键值,创建、删除键;还包括系统基本信息的获取和设置,如系统目录、系统版本、计算机名等。
包括使用共享文件进行进程间通信的方法, 使用消息进行进程间通信的方法,使用邮槽、管道等进行进程间通信的方法,使用网络共享进行进程间通信的方法。
消息机制是 Windows 系统中很重要的一种机制。几乎所有的 Windows 应用程序都在与消息打交道,而 Windows 的消息机制又是依赖于定时器的。所以了解 Windows 消息机制是学习Windows 应用程序开发的重要内容。
Windows 的系统基本服务还包括性能监视、电源管理、索引与数据存储等。
系统管理是 Windows 系统中很重要的内容。 Windows 系统提供了以下方面的 API 供应用
程序开发人员使用,包括:管理控制台接口、程序安装、系统恢复、任务调度、Windows 运
程管理。
用户界面开发是 Windows 应用程序开发的重要内容。Windows 用户界面主要包括两个部分, Windows Shell 和 Windows 图形用户界面。Windows 图形用户界面包括窗口对象的相关内容,界面资源,控件、用户数据交换(粘贴板等)和用户输入的处理。
包括一些基本数据概念和对象:窗口类、消息对列、窗口过程(消息处理函数)、窗口属性等。主要包括的 API 有窗口类注册的函数、窗口建立与关闭函数、窗口属性修改函数等。
资源是 Windows 应用程序中很重要的一项内容,在可执行文件中,专门有用于存储资源的节。这里所说的资源是界面资源,包括图标、菜单、字符串、版本信息、对话框、动态光标、插入号(Carets)等。资源的处理涉及众多 API 函数。
包括对话框、键盘加速器(快捷键)、键盘输入、鼠标输入、原始数据输入等。这些概念是程序通过用户界面与用户进行交互的基本概念。
包括 Atom 表(包括了若干字符串和标识符)、粘贴板、数据复制、动态数据交接等基本概念,是用户和应用程序通过用户界面进行数据交换的主要载体。
Windows 系统提供了不少于 30 种的控件供应用程序使用,其中最常用的几种包括 Edit控件(文本框)、Button 控件(按钮)、ListView 控件(列表)、ToolTip 控件(提示框)、ComboBox 控件(下拉选择框)、Tree-View 控件(树)、Rich-Edit 控件(多功能文本框)、Tab 控件(分页)、Process 控件(进度条)等。
Windows 桌面浏览器(explorer.exe)的功能强大,Windows Shell 应用程序可以利用WindowsShell 桌面的程序接口达到管理系统、定制图标和默认程序、扩展桌面功能等目的。
下面的一个程序使用了与图形用户界面相关的一些函数。程序中,首先注册了窗口类,然后创建了一个窗口,创建窗口时指定的窗口的属性和窗口消息的处理函数。函数消息的处理函数大多调用系统默认函数来处理。
#include
#include
HINSTANCE hinst;
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
/*显示一个窗口*/
int WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow){
WNDCLASSEX wcx; //窗口类
HWND hwnd;//窗口句柄
MSG msg;//消息
BOOL fGotMessage;//是否成功获取消息
hinst = hInstance;//应用程序实例句柄
//设置窗口类的数据结构
wcx.cbSize = sizeof(wcx);//结构体大小
wcx.style = CS_HREDRAW | CS_VREDRAW;//样式:大小改变时重绘界面
wcx.lpfnWndProc = MainWndProc;//窗口消息处理函数
wcx.cbClsExtra = 0;//不使用类内存
wcx.cbWndExtra = 0;//不使用窗口内存
wcx.hInstance = hInstance;//所属的应用程序实例句柄
wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);//图标:默认
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);//光标:默认
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//背景:白色
wcx.lpszMenuName = NULL;//菜单:不使用
wcx.lpszClassName = "这是一个窗口";
wcx.hIconSm = (HICON)LoadImage(hInstance, MAKEINTRESOURCE(5),
IMAGE_ICON, GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CXSMICON),
LR_DEFAULTCOLOR);
//注册窗口类
if (!RegisterClassEx(&wcx)){
return 1;
}
//创建窗口
hwnd = CreateWindow(
"MainWClass",//窗口名
"CH 2-3",//窗口标题
WS_OVERLAPPEDWINDOW,//窗口样式
CW_USEDEFAULT,//水平位置X
CW_USEDEFAULT,//垂直位置Y
CW_USEDEFAULT,//宽度
CW_USEDEFAULT,//高度
(HWND)NULL,//父窗口:无
(HMENU)NULL,//菜单:使用窗口类菜单
hInstance,//应用程序实例句柄
(LPVOID)NULL//窗口创建时数据:无
);
if (!hwnd){
return 1;
}
//显示窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
//消息循环
while (fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0) != 0
&& fGotMessage != -1){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam){
switch (uMsg)
{
case WM_DESTROY:
ExitThread(0);
return 0;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
}