C语言基本的窗口开发

举报
计算机魔术师 发表于 2022/08/28 18:54:39 2022/08/28
【摘要】 🤵‍♂️ 个人主页: @计算机魔术师👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。更新时间:2022/4/18 🎏visual studio 2022编译器🎏打开项目流程:创建主函数 🙋‍♂️==重点重点!!!==🙋‍♂️必须要设置,不然在设置类配置回调函数中不允许其命名为常字符,就会报错!! 🎏创建文件,放入代码#include"windows.h"#defi...

在这里插入图片描述

🤵‍♂️ 个人主页: @计算机魔术师
👨‍💻 作者简介:CSDN内容合伙人,全栈领域优质创作者。

更新时间:2022/4/18

  • 🎏visual studio 2022编译器

🎏打开项目流程:在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 创建主函数

在这里插入图片描述

🙋‍♂️==重点重点!!!==

🙋‍♂️必须要设置,不然在设置类配置回调函数中不允许其命名为常字符,就会报错!!

在这里插入图片描述
重点重点!!!

  • 🎏创建文件,放入代码

#include"windows.h"
#define PageSizex 500 //窗口宽
#define PageSizey 600 //窗口长
LRESULT CALLBACK CallBack(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam);//声明回调函数


//WINAPI: 调用约定,调用约定,主要是参数的入栈顺序,这个栈空间的清理者,
// 在其他代码中 __stdcall, APIENTRY都是一样,可以转到定义查看,
// 
//句柄:一个数 ;作用:窗口的唯一标志

int WINAPI WinMain(
	HINSTANCE hInstance, //当前实例句柄 英文单词:hinstance
	HINSTANCE hPreinstance, //前一个实例的句柄
	LPTSTR ipcmdline,  //传递给系统胡命令行参数
	int ncmdshow  //默认为1,指定窗口的打开方式:隐藏,最大,最小显示
)
{
	//初始化窗口类
	WNDCLASSEX  wc; // window class extra与 wndclass 的扩展
	HWND hWnd; //窗口句柄 Handle to the window
	MSG mSg; //信息接受 message

	//配置窗口类
	wc.cbClsExtra = 0;  //对窗口类的额外空间
	wc.cbSize = sizeof(WNDCLASSEX); //类的结构体大小
	wc.hInstance = hInstance; //当前窗口实例句柄
	wc.hCursor = NULL;// 光标 不需要设为 NULL 也可自行加载系统光标 LoadCursor(NULL,IDC_HAND);
	wc.cbWndExtra = 0; //对窗口的额外空间
	wc.hIcon = NULL;//图标 不需要可以设为NULL 可以将NULL换为系统默认图标 LoadIcon(NULL,IDI_ERROR); 
	wc.hbrBackground = (HBRUSH)COLOR_WINDOW;    //背景更换颜色 
	wc.hIconSm = NULL; //小图标 不需要设为 NULL 也可自行加载系统图标 LoadIcon(NULL, IDI_ERROR); 
	wc.lpfnWndProc = CallBack; //回调函数名
	wc.lpszClassName = "FirstWin"; //名字不能重复!给操作系统看的
	wc.lpszMenuName = NULL;  //菜单名 不需要设为 NULL
	wc.style = CS_HREDRAW | CS_VREDRAW; //窗口类样式:hrizons redaw | vertical redaw 垂直刷新和水平刷新 

	//12个成员少一个不可以!!!

	//注册窗口对象
	//RegisterClassEx(&wc) 返回数据类型 ATOM unsigned short 注册成功返回非0,失败返回0
	if (0 == RegisterClassEx(&wc))
	{

		int a = GetLastError(); //函数生成对应的错误码,可用工具查询注册失败的原因 

		return 0;
	};

	//创建窗口      lp 是一个指针的意思   指针英文:pointer 
	hWnd = CreateWindowEx(
		WS_EX_TOPMOST, //dwExStyle 窗口附加属性:显示在最顶层
		"FirstWin", // lpClassName 窗口类的名字, 给系统看的,同前 
		"俺的第一个窗口",  //lpWindowName 窗口显示的名字
		WS_OVERLAPPEDWINDOW,  //dwStyle 窗口创建风格 可以一个或多个用 | 连接
		100, //x 指定窗口的显示的x坐标,相对与桌面
		100, //y 指定窗口的显示的y坐标,相对与桌面
		PageSizex, //nWidth 窗口宽度
		PageSizey, //nheight 窗口高度
		NULL,  //hWndParent 副窗口句柄
		NULL, //hMenu 窗口菜单
		hInstance, //hInstance 当前实例句柄
		NULL //lpParam 
	);

	if (NULL == hWnd) //窗口句柄  窗口唯一标识
	{
		return 0;
	}

	//显示窗口
	ShowWindow(hWnd, ncmdshow); //指定窗口显示方式,这里为1,标准显示窗口样式 同上
	// 隐藏返回0, 可视返回非0	

//得到消息
	while (GetMessage(
		&mSg, //指向信息体的指针
		NULL,// 指定窗口句柄 选择处理那个窗口的消息  NULL/非NULL的区别,全部句柄接受
		0, 0 //设定处理消息的范围 这里为全部范围
	))
	{

		TranslateMessage(&mSg); //翻译消息,将按键虚拟消息转化为字符消息并寄送到调用线程的信息队列里,

		DispatchMessage(&mSg); //分发消息到系统,系统去调用我们的回调函数callback(过程函数) 
		//信息类型 :标准消息 命令消息 通知消息 自定义消息

	}

	return 0;
}


 // LRESULT 处理消息产生的一个有符号值	CALLBACK调用约定
   
LRESULT CALLBACK CallBack(
	HWND hWnd, //窗口句柄
	UINT nMsg, //消息ID  UIMT 其实就是一个unsigned int
	WPARAM wParam, LPARAM lParam //每条信息所带的两条数据 'word'数据类型,’long‘数据类型
) 
{
	PAINTSTRUCT pst;
	HDC hDC;
	switch (nMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0); //在点击窗口关闭键 返回0给Getmessage函数 停止信息接受循环
		//点击叉叉 会经过  WM_CLOSE->WM_DESTORY->WM_QUIT  处理消息 
		break;
	}
	return DefWindowProc(hWnd, nMsg, wParam, lParam);//默认系统处理其他消息
	//保持系统连贯性

}

  • 🙌ctrl + F5 运行!

效果如下
在这里插入图片描述

俺的第一个窗口创建成功!!!✌

			   🤞到这里,你如果对增删改查还有什么疑问🤞
		🐱‍🏍欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🐱‍🏍
			🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。