C++:win11下的VScode构建百度Comate
一. VScode的安装
- 官网下载地址:https://code.visualstudio.com/ (选择好对应的系统版本)
- 汉化:安装完软件后,打开软件界面的"扩展商店",搜索Chinese,下载相应的插件,如下图:
二. 配置C++开发环境
VSCode只是一个高级的编辑器,可以用来写C++代码,不能直接编译代码。所以,如果我们要能使用VSCode搭建C/C++的编译和调试环境,还必须有编译器使用。为了方便,我们就使用MinGW-w64:windows平台的一个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一样,使用F5,F9等调试代码了。
路径宏 | 注释 |
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 }
5. 关于Comate
对比java,python来说,就当前的版本,C++被扩展的场景和调试方法还有待优化。