c++学习 | Windows 窗口界面

本文详细介绍了Windows界面开发的三种方法:纯API手动创建窗口和控件并响应消息,API半手动创建对话框窗口,以及MFC自动创建窗口和控件并响应消息。通过实例代码展示了Win32窗口程序创建流程、控件创建与消息处理,以及MFC窗口的自动化创建。同时,提到了高级列表控件的使用,并给出了不同类型的控件创建示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习资料 VC驿站
课程资料:课程资料地址
视频讲解:视频讲解地址


一、界面开发三步走

①纯API进行窗口的[手动]创建+[手动]创建控件+[手动]响应消息;
②纯API进行对话框窗口的[半手动]创建+[自动]创建控件+[手动]响应消息;
③MFC窗口的[自动]创建+[自动]创建控件+[自动]响应消息;

备注。为保持程序的灵活性,以及让大家学到更多的东西,针对第③点我们只是界面部分用MFC,其余逻辑部分仍然用WinAPI进行开发。

二、纯API进行窗口的[手动]创建+[手动]创建控件+[手动]响应消息

1.Win32窗口程序的创建流程[手动]

第一步:注册窗口类,指定窗口类的名称与窗口回调函数
第二步:创建窗口,指定注册窗口类,窗口标题,窗口的大小
第三步:显示窗口
第四步:开始消息循环
第五步:窗口函数中处理窗口消息

代码如下:

#include <windows.h>
#include <tchar.h>

static TCHAR szWindowClass[] = _T("WindowClass"); //窗口类名
static TCHAR szTitle[] = _T("我的第一个程序"); //窗口标题

//第五步:窗口函数中处理窗口消息
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
//消息处理函数.参数:窗口句柄,消息,消息参数,消息参数
{
   
	PAINTSTRUCT ps;
	HDC hdc;
	TCHAR greeting[] = _T("大家好!"); //窗口内容

	switch (uMsg)//处理所需的消息
	{
   
	    case WM_CLOSE://窗口关闭的时候添加确认提示框,取消则不关闭窗口
			{
   
			int iRet = MessageBox(hWnd, _T("要关闭窗口吗?"), _T("Tip"), MB_OKCANCEL);
			if (iRet == IDOK) return DefWindowProc(hWnd, uMsg, wParam, lParam);
			}
			break;
		case WM_SIZE://窗口被最大化的时候添加 MessageBox 提示框;
			{
   
				if (wParam == SIZE_MAXIMIZED)
				{
   MessageBox(hWnd, _T("窗口被最大化啦!"), _T("Tip"), MB_OK);}
			}
			break;
		case WM_CREATE://窗口创建的时候添加提示框;
	        MessageBox(hWnd, _T("窗口被创建啦!"), _T("Tip"), MB_OK);
	        break;
		case WM_PAINT://窗口绘制消息
			hdc = BeginPaint(hWnd, &ps);
			TextOut(hdc, 5, 5, greeting, _tcslen(greeting));
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY://当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
			PostQuitMessage(0);
			break;
		default://其他消息交给由系统提供的缺省处理函数
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
			break;
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
//应用程序主函数。参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式
{
   
	//第一步:注册窗口类,指定窗口类的名称与窗口回调函数
	WNDCLASSEX wcex = {
    0 };//RegisterClassEx中的结构指针
	wcex.cbSize = sizeof(WNDCLASSEX);//WNDCLASSEX 的大小
	wcex.lpfnWndProc = WindowProc; //关联消息处理函数
	wcex.lpszClassName = szWindowClass;//类名称

	if (!RegisterClassEx(&wcex))
	//RegisterClassEx注册窗口类,如果函数成功,返回这个窗口类型的标识号;如果函数失败,返回值为FALSE
	{
   
		MessageBox(NULL, _T("注册窗口失败"), _T("Tip"), NULL);
		return 1;
	}


	//第二步:创建窗口,指定注册窗口类,窗口标题,窗口的大小
	HWND hWnd = CreateWindow( //创建一个重叠窗口
		szWindowClass, //窗口类名
		szTitle, //窗口标题,最开头定义过
		WS_OVERLAPPEDWINDOW, //指定创建窗口的风格
		CW_USEDEFAULT, CW_USEDEFAULT,//窗口初始位置
		500, 300, //窗口初始宽、高
		NULL, //指向被创建窗口的父窗口或所有者窗口的句柄
		NULL, //菜单句柄,或依据窗口风格指明一个子窗口标识
		hInstance, //与窗口相关联的模块实例的句柄。
		NULL //指向一个值的指针,该值传递给窗口WM_CREATE消息。
		);

	if (!hWnd)//CreateWindow函数执行成功,返回新创建窗口的窗口句柄,函数执行失败返回NULL
	{
   
		MessageBox(NULL, _T("创建窗口失败!"), _T("Tip"), NULL);
		return 1;
	}

	 //第三步:显示窗口
	ShowWindow(hWnd, nCmdShow);//窗口句柄,窗口激活方式

	// 第四步:开始消息循环
	MSG msg = {
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值