首页 > 编程语言 >C++:win11下的VScode构建百度Comate

C++:win11下的VScode构建百度Comate

时间:2024-07-05 21:42:57浏览次数:5  
标签:stHwnd Comate VScode TEXT WM nullptr C++ stWndClass

一.  VScode的安装

  • 官网下载地址https://code.visualstudio.com/  (选择好对应的系统版本)
  • 汉化:安装完软件后,打开软件界面的"扩展商店",搜索Chinese,下载相应的插件,如下图:

二.  配置C++开发环境

  VSCode只是一个高级的编辑器,可以用来写C++代码,不能直接编译代码。所以,如果我们要能使用VSCode搭建C/C++的编译和调试环境,还必须有编译器使用。为了方便,我们就使用MinGW-w64windows平台的一个gcc编译器。

  1.配置gcc编译器

    • 配置环境变量:下载完成后,可以解压到指定的目录(目录名尽量不要带中文),bin目录下集成了编译器的集成程序。

    • 验证gcc配置成功:打开"命令行", 输入如下:

  2. 安装C/C++插件

    

  3.  配置g++编译器

    • 打开目标文件:先打开一个C++工程文件夹,如下图:

    • 配置步骤:鼠标的光标点在test.cpp文件里,然后"ctrl + shift + p"呼出"C/C++:编辑配置(UI)",进去配置如下图:

    • 配置(具体的某个)工程的参数配置:点击"终端"--"配置任务"--"C/C++g++.exe生成活动文件",生成如下文件,文件里添加了C++配置信息:

    • 编译代码:点击"终端"--"运行生成任务",生成*.exe文件,如下图

  4.调试代码

    • 配置方法如下图,:配置完成后就可以像vs20xx一样,使用F5F9等调试代码了。

路径宏 注释
workspaceRoot VSCode中打开文件夹的路径
workspaceRootFolderName VSCode中打开文件夹的路径, 但不包含"/"
file 当前打开的文件
relativeFile 当前打开的文件,相对于workspaceRoot
fileBasename 当前打开文件的文件名, 不含扩展名
fileDirname 当前打开文件的目录名
fileExtname 当前打开文件的扩展名

 

    • 测试代码     
 1 #include <windows.h>
 2 #include "CommCtrl.h"
 3 
 4 #define IDC_BTN_TEST (101)
 5 
 6 //窗口过程函数 
 7 LRESULT CALLBACK pfnWndProc(HWND stHwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam)
 8 {
 9     RECT stRect = { 0 };
10 
11     //WM_窗口消息
12     //WM_COMMAND:控件消息,看下文button按钮的创建可知,控件本身也是窗口,为了区别于主窗口消息,将控件的窗口消息进行封装放在wParam参数里
13     //WM_NOTIFY:对WM_COMMAND进行扩展
14     switch (uiMsg)
15     {
16     case WM_CREATE:
17         GetClientRect(stHwnd, &stRect);
18         CreateWindow(WC_BUTTON, TEXT("创建button按钮"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, (stRect.right - stRect.left) / 2 - 60, (stRect.bottom - stRect.top) / 2 - 15, 120, 30, stHwnd, (HMENU)IDC_BTN_TEST, nullptr, nullptr);
19         break;
20     case WM_LBUTTONDOWN:
21         MessageBox(nullptr, TEXT("按下鼠标左键"), TEXT("鼠标测试"), MB_OK);
22         break;
23 
24     case WM_KEYDOWN:
25         MessageBox(nullptr, TEXT("按下键盘"), nullptr, MB_OK);
26         break;
27     case WM_COMMAND:
28         if ((IDC_BTN_TEST == LOWORD(wParam)) && (BN_CLICKED == HIWORD(wParam)))//button按钮测试
29         {
30             MessageBox(NULL, TEXT("Button被按下"), TEXT("Button测试"), MB_OK);
31         }
32         break;
33     case WM_DESTROY:
34         PostQuitMessage(0);
35         break;
36     default:
37         return DefWindowProc(stHwnd, uiMsg, wParam, lParam);
38     }
39     return 0;
40 }
41 
42 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
43 {
44     MSG stMsg = { 0 };
45     HWND stHwnd = { 0 };
46     WNDCLASS stWndClass = { 0 };
47 
48     const TCHAR szAppName[] = TEXT("windowsUI");
49     stWndClass.style = CS_HREDRAW | CS_VREDRAW;
50     stWndClass.lpfnWndProc = pfnWndProc;
51     stWndClass.cbClsExtra = 0;
52     stWndClass.cbWndExtra = 0;
53     stWndClass.hInstance = hInstance;
54     stWndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
55     stWndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
56     stWndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
57     stWndClass.lpszMenuName = nullptr;
58     stWndClass.lpszClassName = szAppName;
59 
60     if (!RegisterClass(&stWndClass))//注册窗口类
61     {
62         MessageBox(NULL, TEXT("Regiester failure"), szAppName, MB_ICONERROR);
63         return 0;
64     }
65 
66     stHwnd = CreateWindow(szAppName, //创建窗口
67         TEXT("windows UI"),
68         WS_OVERLAPPEDWINDOW,
69         CW_USEDEFAULT,
70         CW_USEDEFAULT,
71         800,
72         600,
73         nullptr,
74         nullptr,
75         hInstance,
76         nullptr);
77 
78     ShowWindow(stHwnd, iCmdShow); //显示窗口
79     UpdateWindow(stHwnd);
80 
81     while (GetMessage(&stMsg, nullptr, 0, 0))//消息循环
82     {
83         TranslateMessage(&stMsg);
84         DispatchMessage(&stMsg);
85     }
86 
87     return stMsg.wParam;
88 }
View Code

  5. 关于Comate

    对比java,python来说,就当前的版本,C++被扩展的场景和调试方法还有待优化。

 

标签:stHwnd,Comate,VScode,TEXT,WM,nullptr,C++,stWndClass
From: https://www.cnblogs.com/zhoushen4576/p/18285201

相关文章

  • 【并查集】浅谈思想 & 代码实现 & 实战例题(C/C++)
    思想综述并查集(Union-Find)算法的主要操作包括两种:合并(Union):将两个不相交的集合合并成一个集合。查询(Find):查询两个元素是否属于同一个集合。并查集算法的核心思想是使用树(通常是森林)来表示这些不相交的集合,其中每个集合被表示为一棵树,树的根节点代表这个集合的标识(或称为代表......
  • 引用个数为什么会影响内存泄漏 c++例子
    在C++中,内存泄漏通常与手动管理内存有关,而不是直接由引用计数引起,因为C++标准库本身并不提供自动的引用计数功能。但是,我们可以通过一个例子来间接说明引用(或指针)管理不当如何导致内存泄漏,尤其是当涉及复杂对象结构和所有权关系时,这种管理不当往往体现在循环引用上。基本概念......
  • C++实现计算程序运行的时间
    在C++中,计算程序运行时间可以使用多种方法,其中<chrono>库提供了精确的时间测量功能,适用于C++11及更高版本。以下是一个简单的示例,展示如何使用std::chrono来计算程序运行时间:#include<iostream>#include<chrono>intmain(){  //获取程序开始执行的时间点  au......
  • C++ 基础的输入输出介绍
    C++基础的输入输出介绍在C++编程的世界中,输入输出是连接程序与用户界面的桥梁,是实现人机交互不可或缺的部分。对于初学者而言,掌握C++中基本的输入输出方式——使用cin进行输入和使用cout进行输出,是踏入C++编程大门的第一步。本文将详细介绍如何在C++程序中利用cin和cout来......
  • C++ UTF-8编解码
    icu编解码数据:externconstUConverterSharedData  _MBCSData,_Latin1Data,  _UTF8Data,_UTF16BEData,_UTF16LEData,_UTF32BEData,_UTF32LEData,  _ISO2022Data,   _LMBCSData1,_LMBCSData2,_LMBCSData3,_LMBCSData4,_LMBCSData5,_LMBCSData6......
  • C++——模板详解(下篇)
    一、非类型模板参数模板参数分为类型形参与非类型形参。类型形参即:出现在模板参数列表中,跟在class或者typename之后的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用。namespaceH{//定义一个模板类型的......
  • C++list的模拟实现
    链表节点 template<classT> structListNode { ListNode(constT&data=T()) : _data(data) { } ListNode<T>*_prev=nullptr; ListNode<T>*_next=nullptr; T_data; };因为之后要访问这个类的成员变量函数和结构体,所以在这里将class直接改为struct......
  • Linux 交叉编译(toolchain) ARM aarch64版 libc++.so 库
    前言全局说明libc++源码libc++是LLVM项目提供的一个C++标准库的实现,它是KonaKart等项目的基础。由于libc++是开源>的,因此您可以在其官方仓库中找到源代码。一、说明如果您想要阅读libc++的源代码,可以按照以下步骤进行:访问libc++的官方GitHub仓库:https://github.com/llv......
  • C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结
    C++结构体C++基础知识持续更新,今天来记录结构体的基本知识,包括结构体的定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中的const的使用场景,以及结构体的案例。1.结构体的定义和使用结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。......
  • C++基础语法篇
    一、语法1.定义变量并赋值:数据类型 变量名=值;2.宏常量定义#define会报错,提示转换:constexprauto数据类型常量名=常量值;3.定义普通(局部)常量:const 数据类型常量名=常量值;4.sizeof关键字,查询占用空间 sizeo......