初识MFC

#include<windows.h>

//6处理窗口过程

// CALLBACK 代表__stdcall 参数的传递顺序,从右到左 以此入栈,并且在函数的返回前 清空堆栈;
LRESULT CALLBACK WindowProc(
	_In_ HWND   hwnd, //消息所属的窗口句柄
	_In_ UINT   uMsg, //具体消息名称  WM_xxx消息名
	_In_ WPARAM wParam, //键盘附加消息
	_In_ LPARAM lParam	//鼠标附加消息
	)	
{
	switch (uMsg)
	{
	case WM_CLOSE:
		DestroyWindow(hwnd);//DestroyWindow 发送一个消息 WM_DESTROY
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_LBUTTONDOWN: //鼠标左键按下事件
	{
		char buf[200];
		int xPos = LOWORD(lParam);
		int yPos = HIWORD(lParam);
		wsprintf(buf, TEXT("鼠标位置为:x = %d, y = %d"), xPos, yPos);
		MessageBox(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);
		break;
	}
	case WM_KEYDOWN:	//键盘按下事件
		MessageBox(hwnd, TEXT("键盘按下"), TEXT("提示"),  MB_OK);
		break;
	case WM_PAINT:	//绘图
	{
		PAINTSTRUCT ps; //绘图结构体
		HDC hdc = BeginPaint(hwnd, &ps);
		TextOut(hdc, 100, 30, TEXT("绘图"), strlen("绘图"));
		EndPaint(hwnd, &ps);
	}
	default:
		break;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

//程序入口函数
//WINAPI 代表__stdcall 参数的传递顺序,从右到左 以此入栈,并且在函数的返回前 清空堆栈;
int WINAPI WinMain(
	HINSTANCE hinstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nShowCmd)
{
	//1,设计窗口
	//2,注册窗口
	//3,创建窗口
	//4,显示与更新
	//5,通过循环取消息
	//6,处理消息(窗口过程)

	//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);//设置图标,如果第一个参数是NULL,使用系统提供的图标
	wc.hInstance = hinstance;//应用程序实例句柄,传入WinMain中的形参即可。
	wc.lpfnWndProc = WindowProc;// 回调函数,窗口过程
	wc.lpszClassName = TEXT("WIN");//指定窗口类名称
	wc.lpszMenuName = NULL;//菜单名称
	wc.style = 0;//显示风格 0 代表默认风格

	//2,注册窗口类
	RegisterClass(&wc);

	//3,创建窗口
	/*
	lpClassName, 类名
	lpWindowName, 标题名
	dwStyle,  WS_OVERLAPPEDWINDOW 风格
	x,y, 显示坐标   CW_USEDEFAULT 默认值
	nWidth,  宽 高
	nHeight, 
	hWndParent,  父窗口 nuLL
	hMenu, 菜单 NULL;
	hInstance,   实例句柄 hInstance
	lpParam		附加值 NULL
	*/
	HWND hwnd =CreateWindow(wc.lpszClassName, TEXT("hello world"), WS_OVERLAPPEDWINDOW, 500, 500, 1000, 300, NULL, NULL, hinstance, NULL);
	
	//4,显示和更新
	ShowWindow(hwnd,SW_SHOWNORMAL);
	UpdateWindow(hwnd); 

	//5,通过循环取消息
	/*
	typedef struct tagMSG {
	HWND        hwnd; 主窗口句柄
    UINT        message;	具体消息名称
    WPARAM      wParam;	附加消息 键盘消息
    LPARAM      lParam; 附加消息 	鼠标消息
    DWORD       time;	消息产生时间
    POINT       pt;	附加消息 鼠标消息(x,y)
	#ifdef _MAC
    DWORD       lPrivate;
#endif*/

	MSG msg;
	while (1)
	{
		/*
		 _Out_ LPMSG lpMsg, 消息(指针)
		_In_opt_ HWND hWnd,	捕获窗口 填NULL代表捕获所有窗口
		_In_ UINT wMsgFilterMin, 最小和最大的过滤消息,一般填入0
		_In_ UINT wMsgFilterMax); 填入0 代表捕获所有的消息	
		*/
		if (GetMessage(&msg, NULL, 0, 0) == FALSE)
		{
			break;
		}
		
		//翻译消息
		TranslateMessage(&msg);
		//不为false 分发消息
		DispatchMessage(&msg); 
	}

	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值