写点什么

C 语言基本的窗口开发

  • 2022 年 8 月 28 日
    广东
  • 本文字数:2101 字

    阅读完需:约 7 分钟


🤵‍♂️ 个人主页: @计算机魔术师👨‍💻 作者简介: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 运行!


效果如下


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


         🤞到这里,你如果对增删改查还有什么疑问🤞    🐱‍🏍欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🐱‍🏍      🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳
复制代码


用户头像

还未添加个人签名 2022.08.13 加入

还未添加个人简介

评论

发布
暂无评论
C语言基本的窗口开发_8月月更_计算机魔术师_InfoQ写作社区