第一个MFC程序

#include <Windows.h>

//CALLBACK __stdcall 参数的传入顺序:右向左,入栈,函数返回前清空栈

LRESULT CALLBACK WindowProc(
	HWND hWnd, //消息产生的窗口句柄
	UINT Msg,//具体消息名称 ,WM_XXX消息名(消息名A)A代表鼠标等
	WPARAM wParam,//键盘消息
	LPARAM lParam //鼠标消息
	);

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;//应用程序实例句柄
	wc.lpfnWndProc = WindowProc;//回调函数
	wc.lpszClassName = TEXT("first");// 指定窗口类名称
	wc.lpszMenuName = NULL;//菜单
	wc.style = 0; // 显示风格 0代表默认风格
	
	//2.注册窗口
	RegisterClass(&wc);

	//3.创建窗口
	/*lpClassName, 类名
	lpWindowName, 标题名字
	dwStyle, // WS_OVERLAPPEDWINDOW//风格
	x, 显示坐标 // CW_USEDEFAULT
	y
	nWidth,宽高
	nHeight,
	hWndParent, //父窗口 无即NULL
	hMenu,//菜单NULL
	hInstance, //实例句柄
	lpParam //附加值 鼠标的附加等 null
	*/
	HWND hwnd = CreateWindow(wc.lpszClassName,
		TEXT("Windows"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, hInstance, nullptr);

	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);
	MSG msg;
	/*
	 HWND        hwnd; //主窗口
	UINT        message;//具体消息名称
	WPARAM      wParam;//附加消息,键盘消息
	LPARAM      lParam;// 附加消息,鼠标
	DWORD       time;// 消息产生的时间
	POINT       pt;//附加消息   鼠标消息 (坐标点x,y)
	*/
	while(1) {
		/*
		_Out_ LPMSG lpMsg,//消息
		_In_opt_ HWND hWnd,//捕获窗口 填入NULL代表捕获所有窗口和者进程消息
		_In_ UINT wMsgFilterMin, //最小最大过滤消息 一般为零
		_In_ UINT wMsgFilterMax); // 填0代表捕获所有消息
		*/
		if (GetMessage(&msg, NULL, 0, 0) == false) {
			break;
		}
		//不为false

		//翻译消息
		TranslateMessage(&msg);

		//分发消息
		DispatchMessage(&msg);


	}
	return 0;
}

//6.处理消息(窗口过程)
LRESULT CALLBACK WindowProc(
	HWND hWnd, //消息产生的窗口句柄
	UINT Msg,//具体消息名称 ,WM_XXX消息名(消息名A)A代表鼠标等
	WPARAM wParam,//键盘消息
	LPARAM lParam //鼠标消息
	) {
		//消息的处理
		switch(Msg) 
		{//根据不同消息,做不同处理
			case WM_CLOSE:{
				DestroyWindow(hWnd);//如果只是点关闭,是没有真正解锁进程,而是DestroyWindow 发送另一个消息WM_DESTROY,
				break;
			}
			case WM_DESTROY:{
				PostQuitMessage(0);//另上面getMessage()==false,真正关闭程序
			}
			case WM_LBUTTONDOWN://鼠标左键按下
				int xpos = LOWORD(lParam);
				int ypos = LOWORD(lParam);
				//弹出窗口,参数1那个窗口 2内容,3标题
				MessageBox(hWnd,TEXT("hello"),TEXT("success"),MB_OK);

		}

		//返回默认处理方式
		return DefWindowProc(hWnd,Msg,wParam,lParam);
}

posted @ 2023-03-10 14:05  壹剑霜寒十四州  阅读(69)  评论(0编辑  收藏  举报