Code date creation的开发技术介绍

📅 2026/7/24 22:29:11
Code date creation的开发技术介绍
C图形化数据生成器 Code date creation 开发技术笔记作者starryfast本文基于源码 v7.0.0Exceed 正式版记录开发过程中的技术选型、架构设计与核心实现供技术同行参考。1. 技术选型与工程配置1.1 开发环境语言标准C兼容 C11集成开发环境Visual Studio Code编译器MinGW-w64g内置版本仅支持 C11同时支持用户指定系统 g 路径目标平台Windowsx86_64独立 exe无需额外运行时1.2 关键宏定义#define_CRT_SECURE_NO_WARNINGS#defineWIN32_LEAN_AND_MEAN#define_WIN32_WINNT0x0603// 支持 Windows 8.1 及以上 APIWIN32_LEAN_AND_MEAN精简 Windows 头文件减少编译时间。_WIN32_WINNT 0x0603启用 Windows 8.1 及以上的 API 特性如DwmSetWindowAttribute圆角窗口。1.3 链接库与清单#pragmacomment(lib,comctl32.lib)#pragmacomment(lib,comdlg32.lib)#pragmacomment(lib,advapi32.lib)#pragmacomment(lib,shell32.lib)#pragmacomment(lib,gdi32.lib)#pragmacomment(lib,gdiplus.lib)#pragmacomment(lib,uxtheme.lib)#pragmacomment(lib,dwmapi.lib)依赖库说明comctl32通用控件InitCommonControlsExcomdlg32通用对话框GetOpenFileName、ChooseColoradvapi32注册表操作RegCreateKeyEx、RegSetValueExgdiplus图片加载与渐变绘制uxtheme/dwmapi主题支持与窗口圆角清单依赖声明了 Common Controls 6.0.0.0启用视觉样式XP 风格及以上。1.4 GDI 初始化GdiplusStartupInput gdi;GdiplusStartup(g_gdiplusToken,gdi,NULL);GdiplusStartup初始化 GDI返回 token 用于GdiplusShutdown。所有 GDI 对象Image、Graphics、LinearGradientBrush依赖此初始化。2. 图形界面架构2.1 窗口过程与消息循环采用经典 Win32 消息驱动模型while(GetMessage(msg,NULL,0,0)){TranslateMessage(msg);DispatchMessage(msg);}WndProc处理的核心消息包括WM_CREATE创建所有子控件、加载配置、初始化 GDIWM_COMMAND按钮点击、下拉选择、复选框切换WM_SIZE更新滚动条范围和页面大小WM_VSCROLL/WM_MOUSEWHEEL滚动响应WM_ERASEBKGND绘制背景渐变或图片WM_CTLCOLORSTATIC/WM_CTLCOLOREDIT/WM_CTLCOLORBTN自定义控件颜色2.2 滚动机制与常见的一体化滚动不同本工具采用子控件整体偏移的方式实现滚动voidScrollToPosition(HWND hWnd,intnewPos){intdeltaYlastPos-newPos;// 遍历所有子控件逐个调整其 Y 坐标childGetWindow(hWnd,GW_CHILD);while(child){SetWindowPos(child,NULL,pt.x,pt.ydeltaY,...);childGetNextWindow(child,GW_HWNDNEXT);}InvalidateRect(hWnd,NULL,FALSE);}这种方式的优势是所有子控件的相对位置关系保持不变只整体平移。适用于控件数量较多、布局复杂的窗口。滚动范围g_totalContentHeight在WM_CREATE中根据所有控件位置计算得出WM_SIZE中动态更新滚动条信息。2.3 窗口圆角BOOL immersiveTRUE;DwmSetWindowAttribute(hWnd,DWMWA_WINDOW_CORNER_PREFERENCE,immersive,sizeof(immersive));利用dwmapi实现窗口圆角仅 Windows 11 有效。3. 控件系统3.1 四种模式切换工具通过单选框切换四种工作模式模式 ID名称功能0随机生成配置参数批量生成.in文件1自编译提供 AC 代码自动生成.out2打包 ZIP将已生成文件打包为.zip3实用工具110 系统小工具SwitchMode函数实现模式切换通过ShowWindow(SW_HIDE/SW_SHOW)控制不同控件组的显隐。每个模式对应一组控件 ID 数组。3.2 字体两种字体g_hFontNormalMicrosoft YaHei UI-20pt用于普通控件g_hFontLogCascadia Code-16pt用于日志和预览编辑框等宽字体创建后通过WM_SETFONT发送给所有子控件。3.3 自定义颜色控件通过WM_CTLCOLORSTATIC/WM_CTLCOLOREDIT消息实现caseWM_CTLCOLORSTATIC:{SetTextColor(hdc,g_textColor);SetBkMode(hdc,TRANSPARENT);return(LRESULT)g_hBrushBg;}caseWM_CTLCOLOREDIT:{SetTextColor(hdc,g_textColor);SetBkColor(hdc,g_bgColor);return(LRESULT)g_hBrushEdit;}g_hBrushBg和g_hBrushEdit在颜色变化时重建并通过ApplyColorSettings刷新全窗口。4. 随机数据生成引擎4.1 随机数实现随机数生成采用rand() 手动扩展intrandomInt(intmin,intmax){returnminrand()%(max-min1);}longlongrandomBetween(longlonga,longlongb){if(ab)swap(a,b);unsignedlonglongrange(unsignedlonglong)(b-a)1;unsignedlonglongr((unsignedlonglong)rand()30)|((unsignedlonglong)rand()15)|(unsignedlonglong)rand();returna(longlong)(r%range);}种子在wWinMain中初始化srand((unsigned)time(NULL))。4.2 数据类型下拉框支持七种数据类型索引类型参数配置0整数随机值域范围可重复1整数不重复值域范围使用std::set去重2字符串小写长度3字符串大写长度4字符串混合长度5浮点数随机值域范围double输出6日期时间年份/月/日/时/分/秒随机类型切换时动态显示/隐藏对应的参数控件IDC_EDIT_RANGE1/2或IDC_EDIT_STRLEN。4.3 生成函数GenerateInputFiles是核心生成函数参数包括start/end文件编号范围如 1~10 生成 10 个.indataType数据类型1~7range1/range2值域strLen字符串长度countPerFile每文件元素个数writeCount是否在文件首行写入元素个数vars额外变量键值对在数据前输出customCharset自定义字符集额外变量解析vectorExtraVarParseExtraVars(HWND hEdit){// 支持两种格式// 1. namevalue// 2. name value空格分隔}生成的.in文件格式示例n 10 a b c 1 2 3 4 5 6 7 8 9 104.4 特殊类型生成浮点数生成doubleval(double)rand()/RAND_MAX*200.0-100.0;fwprintf(fp,L%.6f ,val);日期时间生成intyrandomInt(2000,2030);intmrandomInt(1,12);intdrandomInt(1,28);fwprintf(fp,L%04d-%02d-%02d %02d:%02d:%02d ,y,m,d,h,min,s);5. 自编译模式5.1 编译执行流程CompileAndRunBatch和CompileAndRunSingle实现自编译调用CreateProcess执行g编译命令编译成功后对每个.in文件运行生成的可执行文件通过输入重定向读取.in输出重定向写入.out5.2 进程创建SECURITY_ATTRIBUTES sa{sizeof(sa),NULL,TRUE};CreatePipe(hRead,hWrite,sa,0);HANDLE hNullCreateFileW(LNUL,GENERIC_READ,...);STARTUPINFOW si{sizeof(si)};si.dwFlagsSTARTF_USESTDHANDLES;si.hStdOutputhWrite;si.hStdErrorhWrite;si.hStdInputhNull;CreateProcessW(NULL,cmd,NULL,NULL,TRUE,0,NULL,NULL,si,pi);编译命令示例g.exe source.cpp -o temp_ac.exe运行命令示例cd /d outdir temp_ac.exe 1.in 1.out5.3 管道与重定向编译时使用管道捕获stdout/stderr运行时不捕获直接重定向到文件。CreatePipe创建匿名管道hWrite传给子进程作为标准输出父进程通过hRead读取编译信息。运行子进程时使用_wsystem而非CreateProcess简化命令构造支持cd /d和重定向符号。6. ZIP 打包模块6.1 自主实现的 ZIP 格式工具没有使用第三方压缩库而是手写 ZIP 文件格式#pragmapack(push,1)structZipLocal{uint32_tsig;// 0x04034b50uint16_tvn,fl,mt;uint16_tmt2,md;uint32_tcrc;uint32_tcs,us;uint16_tnl,el;};structZipCentral{...};structZipEOCD{...};#pragmapack(pop)PackRecordedFilesToZip函数按 ZIP 规范写入对每个文件计算 CRC32写入 Local File Header写入文件名UTF-8 编码写入文件数据最后写入 Central Directory 和 End of Central Directory6.2 CRC32 实现staticuint32_tcrc32_table[256];staticvoidinit_crc32(){for(uint32_ti0;i256;i){uint32_tci;for(intj0;j8;j)c(c1)^((c1)?0xEDB88320:0);crc32_table[i]c;}}staticuint32_tcalc_crc32(constvoid*d,size_t len){uint32_tc0xFFFFFFFF;for(size_t i0;ilen;i)c(c8)^crc32_table[(c^((uint8_t*)d)[i])0xFF];returnc^0xFFFFFFFF;}标准 CRC32 算法与 ZIP 格式要求的校验值一致。6.3 文件命名打包时从完整路径中提取文件名src.substr(src.find_last_of(L\\/) 1)。文件名转换为 UTF-8 编码写入 ZIP。7. 主题与颜色系统7.1 颜色存储颜色值存储在全局变量g_textColor和g_bgColor中通过注册表持久化voidSaveColorSettings(){RegSetValueExW(hKey,LTextColor,0,REG_DWORD,(BYTE*)g_textColor,sizeof(COLORREF));RegSetValueExW(hKey,LBgColor,0,REG_DWORD,(BYTE*)g_bgColor,sizeof(COLORREF));}7.2 预设主题十个预设主题按钮经典白底、暗夜灰底、护眼绿底、柔和米色、深蓝科技、黄昏橙紫、森林暗绿、极简灰白、粉彩樱花、黑金奢华caseIDC_THEME_WHITE:SetPresetTheme(RGB(0,0,0),RGB(255,255,255));break;caseIDC_THEME_DARK:SetPresetTheme(RGB(230,230,230),RGB(50,50,50));break;// ...7.3 颜色选择器ShowColorDialog调用系统ChooseColor对话框依次选择文字颜色和背景颜色。7.4 渐变背景g_gradColors存储多个颜色值DrawBackground使用LinearGradientBrush绘制水平渐变if(g_gradColors.size()2){vectorGdiplus::Colorcolors;vectorREALpositions;for(inti0;icount;i){colors.push_back(Color(GetRValue(c),GetGValue(c),GetBValue(c)));positions.push_back((REAL)i/(count-1));}LinearGradientBrushbrush(Rect(0,0,w,h),Color::White,Color::Black,LinearGradientModeHorizontal);brush.SetInterpolationColors(colors.data(),positions.data(),count);g.FillRectangle(brush,0,0,w,h);}ShowGradientDialog允许用户通过多次ChooseColor选择多个颜色保存到注册表。8. 背景图片8.1 图片加载使用 GDI 的Image::FromFile加载图片g_pBgImageImage::FromFile(path.c_str());if(g_pBgImageg_pBgImage-GetLastStatus()Ok){// 保存路径到注册表}支持格式JPG、PNG、BMP通过文件对话框过滤。8.2 图片绘制DrawBackground中保持宽高比缩放intiwg_pBgImage-GetWidth(),ihg_pBgImage-GetHeight();floatscalemax((float)w/iw,(float)h/ih);intdw(int)(iw*scale),dh(int)(ih*scale);g.DrawImage(g_pBgImage,(w-dw)/2,(h-dh)/2,dw,dh);居中显示超出部分裁剪。8.3 图片缓存g_hBGBitmap缓存绘制后的位图避免每次WM_ERASEBKGND重新绘制渐变或缩放图片voidUpdateBGCache(HWND hWnd){// 仅在窗口尺寸变化时重建位图if(g_hBGBitmapg_bgCacheSize.cxwg_bgCacheSize.cyh)return;// 创建兼容位图绘制背景缓存}WM_ERASEBKGND直接使用BitBlt将缓存位图复制到窗口 DC大幅提升绘制性能。9. g 编译器管理9.1 自动检测AutoFindGpp按以下顺序搜索程序自身目录及../mingw64/bin/PATH环境变量跳过 RedPanda常见安装路径MinGW、TDM-GCC、CodeBlocks、Dev-Cpp遍历所有固定/可移动磁盘根目录深度限制 6 层跳过 Windows、System32、WinSxS 等系统目录9.2 路径存储注册表路径HKEY_CURRENT_USER\Software\TestDataGenerator\GppPathvoidSaveGppPath(constwstringpath){RegSetValueExW(hKey,LGppPath,0,REG_SZ,(BYTE*)path.c_str(),...);}工具启动时自动加载保存的路径。10. 实用工具集成10.1 系统工具调用110 工具按钮通过ShellExecuteW调用系统命令voidOpenCalculator(HWND hWnd){ShellExecuteW(NULL,Lopen,Lcalc.exe,NULL,NULL,SW_SHOWNORMAL);}voidOpenRegEdit(HWND hWnd){ShellExecuteW(NULL,Lopen,Lregedit.exe,NULL,NULL,SW_SHOWNORMAL);}10.2 网络工具百度搜索构造 URLhttps://www.baidu.com/s?wd 关键词二维码生成调用https://api.qrserver.com/v1/create-qr-code/IP 查询打开ip.cn天气查询打开tianqi.qq.com10.3 交互式工具部分工具通过自定义InputBox函数获取用户输入BOOLInputBox(HWND hWnd,constwchar_t*title,constwchar_t*prompt,wchar_t*out,intmaxLen);例如定时关机、打开网址、密码生成等均使用此对话框。11. 数据持久化11.1 注册表键值路径HKEY_CURRENT_USER\Software\TestDataGenerator存储项TextColor/BgColor颜色设置GppPathg 路径BackgroundImage背景图片路径GradColorCountGradColor0..N渐变色列表11.2 配置文件SaveConfig/LoadConfig通过WritePrivateProfileString和GetPrivateProfileString读写.ini文件WritePrivateProfileStringW(LSettings,LStart,start,file);GetPrivateProfileStringW(LSettings,LStart,L1,buf,32,file);支持保存和加载生成参数起始 ID、结束 ID、数据类型、范围、长度、个数等。12. 版本迭代技术记录版本日期技术变化5.0.02026-06-12首个版本完成 Win32 GUI 框架、基础数据类型生成、主题切换6.0.02026-06-19新增 ZIP 打包模块手写 ZIP 格式自编译模式注册表持久化PRO 1.0.02026-06-20稳定性修复参数校验增强Future2026-06-21集成 110 工具图片加载优化g 自动检测增强Exceed 7.0.02026-07-12渐变色支持图片缓存优化DWM 圆角窗口自定义 InputBox13. 总结本文基于源码 v7.0.0 记录了 Code date creation 的核心技术实现纯 Win32 API GDI构建图形界面无第三方 GUI 框架依赖手写 ZIP 格式实现文件打包无压缩库依赖自定义 InputBox实现轻量级用户输入对话框注册表 INI 文件实现配置持久化背景图片缓存 渐变实现灵活的主题系统自编译模式通过CreateProcess调用 g支持批量生成整个工具在 Windows 原生 API 上构建依赖少、体积小所有功能均为自主实现。本文基于源码实际内容撰写所有技术细节均可从代码中验证。