C语言基本的窗口开发

简介: C语言基本的窗口开发

🎏visual studio 2022编译器

🎏打开项目流程:图片.png图片.png图片.png

  • 创建主函数

图片.png

🙋‍♂️重点重点!!!

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

图片.png

图片.png

  • 🎏创建文件,放入代码
#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 运行!

效果如下

图片.png

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



相关文章
|
8月前
|
自然语言处理 中间件 编译器
C语言的编译器和中间件开发
C语言的编译器和中间件开发
|
2月前
|
传感器 人工智能 物联网
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发
C 语言在计算机科学中尤其在硬件交互方面占据重要地位。本文探讨了 C 语言与硬件交互的主要方法,包括直接访问硬件寄存器、中断处理、I/O 端口操作、内存映射 I/O 和设备驱动程序开发,以及面临的挑战和未来趋势,旨在帮助读者深入了解并掌握这些关键技术。
74 6
|
2月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
63 1
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
62 1
|
2月前
|
传感器 存储 物联网
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点
在物联网(IoT)快速发展的今天,C语言作为物联网开发中的关键工具,以其高效、灵活、可移植的特点,广泛应用于嵌入式系统开发、通信协议实现及后端服务构建等领域,成为推动物联网技术进步的重要力量。
69 1
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
66 2
|
2月前
|
存储 网络协议 物联网
C 语言物联网开发之网络通信与数据传输难题
本文探讨了C语言在物联网开发中遇到的网络通信与数据传输挑战,分析了常见问题并提出了优化策略,旨在提高数据传输效率和系统稳定性。
|
4月前
|
存储 传感器 物联网
结合物联网开发探讨C语言的变量
在物联网(IoT)开发中,C语言的变量起着至关重要的作用。由于物联网设备资源有限,C语言的高效性和对硬件的直接控制使其成为开发嵌入式系统的首选。
|
5月前
|
Linux Shell C语言
C语言与驱动开发基础
C语言与驱动开发基础
48 0

热门文章

最新文章