Windows API程序设计入门

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;
}

程序执行效果如下:

在这里插入图片描述

窗口循环
在这里插入图片描述

关闭窗口

在这里插入图片描述

点击"是"程序结束运行。

感谢你的访问!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值