发布日期:2025-10-14 09:36浏览次数:
行,今天折腾了半天C++写桌面程序,可算搞出个小玩意儿了。跟大伙儿唠唠这过程,全是血泪教训。
上来第一件事,装家伙事儿。寻思着Visual Studio名气大,咔咔一顿下载,好家伙,好几个G,泡杯茶等它下完再装完,小半天过去了。装完了打开一看,乌泱泱一堆按钮,眼都花了,赶紧新建项目。
项目类型选的Windows桌面应用,选C++那个模板,叫什么“Windows桌面应用程序”,一堆看不懂的子项,闭眼选了个默认的。名字嘛随手打“myFirstApp”,爱咋咋地。
建完项目一瞧,心凉半截。文件好几个,一堆看不懂的代码怼脸上。最关键有个叫的东西,还有啥Windows.h
,啥WndProc
函数。哎哟我去,这啥玩意儿?看教程说这就是窗口入口,硬着头皮研究。
知道要点:得注册窗口类,得创建窗口,还得有个大循环不停处理消息。照着模板抄。抄代码就跟描红似的,先注册个WNDCLASS
还是WNDCLASSEX
的玩意儿,填那些名字、样式啥的,填得我脑子发胀。
搞了半天光有个黑乎乎的窗口,按钮?文本框?教程里别人直接拖进去!定睛一看,C++原生的Win32 API写界面,想加个按钮?没门!全得一行行码出来!手搓按钮跟砌砖似的。
HWND hButton = CreateWindow(
L"BUTTON", // 祖宗类型固定写死 "BUTTON"
L"点我", // 按钮上的字
WS_TABSTOP WS_VISIBLE WS_CHILD BS_DEFPUSHBUTTON, // 样式组合拳,老长了
50, 50, // 位置x,y
100, 30, // 宽和高
hWnd, // 爹窗口的句柄
(HMENU)IDC_MY_BUTTON, // 按钮ID,还得自己定义
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), // 传实例句柄,拗口
NULL
就这坨玩意儿,就为了放个按钮!还得自己处理点击消息!在WndProc
里面跟大海捞针一样找那个按钮的ID,找着了再加一堆case WM_COMMAND:
... 加个文本框,复制粘贴,改参数,血压都上来了。
写不了几行,必须来点红彤彤的错误码助兴。什么未定义标识符,少了分号,最绝的是字符宽窄问题。字符串老老实实用L"按钮"
这种宽字符,忘了加L
,编译器脸一翻就是不认识,翻书查为又耗掉半小时。
好不容易跑起来了,按钮一点,没反应!调试,在case IDC_MY_BUTTON
里面设个断点,半天点断点它都不进来。!原来是消息处理里面return 0;
早了,挡住了!层层排查比破案还累。
终于忍不了了,这么折腾啥年月是个头。听说Qt和wxWidgets是救星。下载Qt,又是巨无霸安装包,下到手软。安装还得选组件,MSVC、MinGW,傻傻分不清,挑个头大的勾上。
打开Qt Creator,嚯,清爽多了!新建项目选“Qt Widgets Application”,一路点下去。界面设计器(Qt Designer)自动蹦出来。这回是真能拖控件了!拽个按钮,拉个文本框,双击按钮写槽函数...
// C++部分终于像人话了
void MainWindow::on_pushButton_clicked()
ui->label->setText("Hello Desktop World!");
点一下按钮,文本框真的变字了!感动得快哭出来。Qt帮你干掉了90% Win32那堆破事。打包发布又是另一座山(依赖dll要带上),但好歹功能有了。
这趟折腾完,是真佩服那些用MFC时代熬过来的人。C++做桌面,能搞,但别跟自己较劲玩纯API。至于为啥不直接用C#或者Electron?问就是——我头铁!