c_win32窗体的创建

c_win32窗体的创建

#include <Windows.h>
//6、处理消息(窗口过程)回调函数
//CALLBACK 代表__stdcall 参数传递顺序 从左到右 依次进栈 在函数返回前 清空栈
LRESULT CALLBACK WindowProc(
	  HWND hwnd,//消息所属的窗口句柄 
	  UINT uMsg,//具体消息名称 WM_XXX消息名
	  WPARAM wParam,//键盘消息
	  LPARAM lParam//鼠标消息
) {
	switch (uMsg)
	{
	case WM_CLOSE:
		//所有以XXXWindow为结尾的方法 都不会进入消息队列中 而是直接执行
		DestroyWindow(hwnd);//DestroyWindow 发送另一个消息 WM_DESTORY
		break;
	case WM_DESTROY:
		PostQuitMessage(0);//0表示正常退出
		break;
	case WM_LBUTTONDOWN: //鼠标按下事件
	{//注意 c语言中在case后面写多行代码要加{} c++中则不需要
		int xPos = LOWORD(lParam);//坐标
		int yPos = HIWORD(lParam);
		char buf[1024] = {0};
		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, 500, 200, TEXT("你好 世界!"), strlen("你好 世界!"));//绘画文字

		EndPaint(hdc, &ps);//结束绘画
		break;
	}
	}
	//返回值使用默认处理方式
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
//WINAPI 代表是 __stdcall 参数传递顺序 从左到右 依次进栈 在函数返回前 清空栈
int WINAPI WinMain(HINSTANCE hInstance,	//应用程序实例 H:句柄
	HINSTANCE hPrevInstance,	//上一个应用程序实例 Win32环境下 参数一般为空 
	LPSTR lpCmdLine,		//命令行参数 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);//设置光标 第一个参数若为空 表示使用系统提供的光标
	wc.hIcon = LoadIcon(NULL, IDI_HAND);//设置图标 第一个参数若为空 表示使用系统提供的图标
	wc.hInstance = hInstance;//应用程序实例句柄(传入WinMain中的形参即可)
	wc.lpfnWndProc = WindowProc;//回调函数(窗口过程)
	wc.lpszClassName = TEXT("Window");//指定窗口类名称
	wc.lpszMenuName = NULL;//指定菜单名称
	wc.style = 0;//显示风格 0代表默认风格
	//2、注册窗口
	RegisterClass(&wc);
	//3、创建窗口
	/*
	lpClassName, //类名
	lpWindowName, //标题名
	dwStyle, //风格(正常 最大化 最小化)
	x, //显示坐标(显示坐标 距离左上角偏移多少)
	y,	
	nWidth, //宽(窗口的宽高)
	nHeight, //高
	hWndParent, //父窗口(上一级窗口)
	hMenu, //菜单
	hInstance, //实例句柄
	lpParam  //附加值
	*/
	HWND hwnd= CreateWindow(wc.lpszClassName, TEXT("我的窗口"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
	//4、显示和更新
	ShowWindow(hwnd, SW_SHOWNORMAL);//正常化显示窗口
	UpdateWindow(hwnd);
	//5、循环队列取消息
	/*
	 HWND        hwnd;//主窗口句柄
    UINT        message;//具体消息名称
    WPARAM      wParam;//附加消息(键盘消息)
    LPARAM      lParam;//附加消息(鼠标消息)
    DWORD       time;//消息产生时间
    POINT       pt;//附加消息 鼠标消息(检测鼠标在哪个坐标)
	*/
	MSG msg;
	while (1)
	{
		/*
     _Out_ LPMSG lpMsg,//消息
    _In_opt_ HWND hWnd,//捕获窗口 NULL代表捕获所有窗口
    _In_ UINT wMsgFilterMin,//最小与最大的过滤的消息 一般填入零
    _In_ UINT wMsgFilterMax//填零表示捕获所有
		*/
		if (GetMessage(&msg,NULL,0,0)==FALSE)//等于false结束
		{
			break;
		}
		//翻译消息
		TranslateMessage(&msg);//主要是防止组合键
		//分发消息
		DispatchMessage(&msg);
	}	return 0;
}

效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值