Windows API程序设计入门
什么是Windows API:
Windows API又叫做 API 函数, 是 Windows 的核心。
Windows API简介:
Windows API 实际上是以一种新的方法代替了DOS中用软中断的方式。和DOS的结构相比,Win 32的系统功能模块放在Windows的动态链接库(DLL)中。
DLL是一种Windows的可执行文件,采用的是和 .exe文件同样的PE格式。在PE格式文件头的导出表中,以字符串形式指出了这个DLL能提供的函数列表。应用程序使用字符串类型的函数名指定要调用的函数。
实际上,Win32的基础就是由DLL组成的。Win32 API的核心由3个DLL提供,它们是:KERNEL32.DLL——系统服务功能。包括内存管理、任务管理和动态链接等。GDI32.DLL——图形设备接口。利用VGA与DRV之类的显示设备驱动程序完成显示文本和矩形等功能。USER32.DLL——用户接口服务。建立窗口和传送消息等。当然,Win32 API还包括其他很多函数,这些也是由DLL提供的,不同的DLL提供了不同的系统功能。如使用TCP/IP协议进行网络通信的DLL是Wsock32.dll,它所提供的API称为Socket API;专用于电话服务方面的API称为TAPI(Telephony API),包含在Tapi32.dll中。所有的这些DLL提供的函数组成了现在所用的Win32编程环境。
————摘自《win32汇编教程》作者:罗云彬
Windows 窗口
目标:动手写一个基于Windows API的基于窗体、消息循环、事件驱动的Windows C语言风格的Windows程序。
开发软件:vs 2017
程序代码如下:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK Win1(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ; //窗体名
HWND hwnd;//句柄
MSG msg;//消息体
WNDCLASS wndclass;//这义一个窗体类实例
//设置窗体参数
wndclass.style = CS_HREDRAW | CS_VREDRAW ; //样式
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;//窗体实例名,由windows自动分发
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//显示上面的图标titlte
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;//窗口光标
wndclass.hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH) ;//背景刷
wndclass.lpszMenuName=NULL;
wndclass.lpfnWndProc=WndProc;//设置窗体接收windws消息函数
wndclass.lpszClassName= szAppName;//窗体类名
RegisterClass(&wndcls);//设置窗口参数
HWND hwnd;
hwnd = CreateWindow("PCC", "Pcc的窗口", WS_OVERLAPPEDWINDOW, 200, 100, 800, 400, NULL, NULL, hInstance, NULL);//创建窗口名
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK Win1(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch (uMsg)
{
case WM_CHAR:
char szChar[50];
printf(szChar, "char code is %d", wParam);
MessageBox(hwnd, szChar, "char", 0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, "鼠标点击", "消息", 0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc, 0, 0, "你好,Windows!", strlen("00000000000000"));
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC = BeginPaint(hwnd, &ps);
TextOut(hDC, 0, 0, "你好,Windows!", strlen("000000000000000"));
EndPaint(hwnd, &ps);
break;
case WM_CLOSE:
if (IDYES == MessageBox(hwnd, "确认关闭?", "消息", MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}
程序执行效果如下:
窗口循环
关闭窗口
点击"是"程序结束运行。
感谢你的访问!