MFC底层设计

本文详细介绍了Windows编程的基础知识,包括窗口的创建、消息处理、键盘和鼠标事件响应以及绘图操作。通过一个完整的示例程序,展示了如何使用Windows API进行基本的窗口编程。

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

//学习自黑马程序员视频
#include <Windows.h>
LRESULT CALLBACK windowProc(
	HWND hwnd,//消息句柄
	UINT uMsg,//具体消息
	WPARAM wParam,//键盘附加消息
	LPARAM lParam//鼠标附加消息
)
{
	switch (uMsg) {
	case WM_CLOSE:
		DestroyWindow(hwnd);//不会关闭程序,不进入消息队列,直接调用窗口过程,发送WM_DESTROY
		break;
	case WM_DESTROY://关闭程序
		PostQuitMessage(0);
		break;
	case WM_LBUTTONDOWN:// 鼠标左键按下
	{//此处加括号,因为定义了变量
	int xPos = LOWORD(lParam);
	int yPos = HIWORD(lParam);
	char buf[1024];
	wsprintf(buf, TEXT("x=%d,y=%d"), xPos, yPos);
	MessageBox(hwnd, buf, TEXT("left mouse down"), MB_OK);

	break;
	}
	case WM_KEYDOWN:
		MessageBox(hwnd, TEXT("keydown"), TEXT("keydown"), MB_OK);
		break;
	case WM_PAINT:
	{
		PAINTSTRUCT pg;
		HDC hdc = BeginPaint(hwnd, &pg);
		TextOut(hdc, 100, 100, TEXT("HELLO"), strlen("HELLO"));
		EndPaint(hwnd, &pg);
	}
	break;
	}
	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
//WINAPI ——stdcall的宏 从右到左一次入栈,并在函数返回前清空

int WINAPI WinMain(
	HINSTANCE hlnstance,// 应用程序实例句柄
	HINSTANCE hPrevInstance,//上一应用程序句柄,一般为空
	LPSTR lpComdlines,//char* argv[]
	int nSHowCmd// 显示命令,最大化,最小化,正常
)
{
	//1.设计窗口
	WNDCLASS wc;
	wc.cbClsExtra = 0;//额外的类内存
	wc.cbWndExtra = 0;//窗口附加内存
	wc.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH);//设置背景
	wc.hCursor = LoadCursor(NULL, IDC_HAND);// 设置光标,第一个NULL表示使用系统提供
	wc.hIcon = LoadIcon(NULL, IDI_ERROR);//图标
	wc.hInstance = hlnstance;//应用程序示例窗口句柄
	wc.lpfnWndProc = windowProc;//窗口过程函数,回调函数
	wc.lpszClassName = TEXT("WIN");//窗口名字
	wc.lpszMenuName = NULL;//菜单
	wc.style = 0;// 显示风格 0为默认风格
	//2.注册窗口
	RegisterClass(&wc);
//3.创建窗口
	HWND hwnd=CreateWindowW(wc.lpszClassName, TEXT("WINDOWS"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,NULL,NULL,hlnstance,NULL);
//显示和更新
	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);
//通过循环取消息
	MSG msg;
	while (1)
	{
		
		if (GetMessage(&msg, NULL, 0, 0)==FALSE)
		{
			break;
		}
		//翻译消息,例如crtl+C之类
		TranslateMessage(&msg);
		//分发消息
		DispatchMessage(&msg);
	}
	//处理消息,窗口过程


	return 0;//返回值
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值