# LiuGrid9_vs2022 **Repository Path**: rjliu/liu-grid9_vs2022 ## Basic Information - **Project Name**: LiuGrid9_vs2022 - **Description**: MFC GridCtrl 的 EXT DLL 版本,with VS2022. 1) 使用Win11 + VS2022+Win后,生成的Exe多为x64,故使用VC2022重建. 2) 且用 git 取代 svn. 3) LiuGrid9.dll 最早使用 VC6创建,后迁移到 VC2008,VC2019. 一直Build 为x86 DLL. 2025-08-01 - **Primary Language**: C/C++ - **License**: Not specified - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-01 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LiuGrid9_vs2022 #### 介绍 MFC GridCtrl 的 EXT DLL 版本,with VS2022. 1) 使用Win10/11 + VS2022后,生成的 exe 多为x64,故使用VC2022重建. 2) 且 版本控制软件改用 git ,取代此前的 svn. 3) LiuGrid9.dll 最早使用 VC6创建,后迁移到 VC2008,VC2019. 一直Build 为x86 DLL. 2025-08-01 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx ## 开发历史 0) LiuGrid9.dll 最早使用 VC6创建,后迁移到 VC2008,VC2019. 一直Build 为x86 DLL. 自从迁移到 Win11 + VS2022 后,生成的 Exe 多为x64 ,故使用VC2022重建了此DLL,以轻装编译为 x64 版 DLL. 且 版本控制软件改用 git ,取代此前的 svn. 1)git 模型: master + develop #### v0000, Initial commit. Create by Gitee, C / C++ + branch : develop , master #### v0001, Create project with VC2022. Wizard = + Wizard = MFC DLL Library; DLL = EXT-DLL. Create with VS2022. + Encoding = UTF-8-BOM, charset = "utf-8-bom", for *.cpp *.h ; all source files ; because Vs2022 IDE = Chinese . + pch.h, pch.cpp 取代了VC2008 时代的 stdafx.h, stdafx.cpp + framework.h, VC2022新增,其内容来自 旧版 stdafx.h + targetver.h 中默认使用 Win11 SDK, 适配运行于 Win11. #### v0002, 修改Wizard 产生的模板,git on 2025-08-01. + LiuGrid9.rc, 修改 DLL 的版本信息 = ver 2.2.7.2508 #### v0003, 修改 Wizard 产生的 vcxproj (Project Properties, Alt+F7 ),git on 2025-08-01. VS > Menu > Project > Properties (Alt + F7) 分别修改 Debug 与Release 2个Configuration Configuration Propertieis: + General: + + Debug: $(TargetName) = Target Name = $(ProjectName)uX64D, 则Build结果为 LiuGrid9uX64D.dll, LiuGrid9uX64D.lib. + + Release: $(TargetName) = Target Name = $(ProjectName)uX64, 则Build结果为 LiuGrid9uX64.dll, LiuGrid9uX64.lib. + Build Events + + Post-Build Event: Command line = copy $(OutDir)$(TargetName).dll C:\LiuVcLib\DLL copy $(OutDir)$(TargetName).lib C:\LiuVcLib\Lib + + Post-Build Event: Description = copy *.dll *.lib to C:\LiuVc\Lib #### v0004, 迁移到 VC2022,git on 2025-08-02. 1 *.cpp , *.h 文件的 Encoding ="utf-8-bom", 取代旧式的是 Encoding ="ANSI,GB2312" 2 *.cpp 中的首行 #include "pch.h" 取代旧式的 #include "stdafx.h" 3 Build 生成 LiuGrid9uX64.DLL 和 LiuGrid9uX64d.DLL。 在 LiuGrid9_H.h 中加入 #if defined _M_IX86 #if defined _M_IX64 4 CGridCtrl::OnTimer(UINT_PTR nIDEvent) 取代 CGridCtrl::OnTimer(UINT nIDEvent) 5 GridCellCombo.cpp void CInPlaceList::EndEdit() { ASSERT( i == GetItemData(i) ); ///改为 i == ; 过去为 i = . Fixed by LiuRujiu, 2025.8.2 } #### v0005, 添加 LiuPeChart 到本Project,git on 2025-08-04. 考虑到 LiuPeChart9.dll 的size 只有几十KB,把 LiuPeChart9 合并到 本 Project. 为此设置了 宏变量 1 在 PCH.h 中,定义了 __LiuGrid__PeGraph__ 1.1 __LiuGrid__PeGraph__ = 10,只编译生成 LiuGrid9uX64.DLL。 此DLL 无 PeGraph 功能,不连接到 PEGRP64G.dll。 Menu > Project > Properties (Alt + F7 ), 在弹出的属性配置对话框中 > General :设置 TargetName = "$(ProjectName)9uX64" 1.2 __LiuGrid__PeGraph__ = 11, 编译生成 LiuGrid9PeGuX64.DLL。 此DLL添加 PeGraph 功能,连接到 PEGRP64G.dll。 Menu > Project > Properties (Alt + F7 ), 在弹出的属性配置对话框中 > General :设置 TargetName = "$(ProjectName)PeG9uX64" 2 在 PeChart.cpp, PeChartBaseView.cpp, PeChartValueDlg.cpp 中,加入条件编译 #if ( __LiuGrid__PeGraph__ == 11 ) #endif 3 Exe 的project 使用时, 分别 include LiuGrid9_H.h LiuGridPeG9_H.h #### v0006, 添加 LiuPeChart 到本Project,git on 2025-08-06. 考虑到 LiuPeChart9.dll 的size 只有几十KB,把 LiuPeChart9 合并到 本 Project. 为此设置了 宏变量 1 PE_H_Def_forRead.h 吸收了 PE_H.h 的功能。以后可以不再需要 PEH.h 了。 2 PE7.0 已支持GDI+, 支持前景色与背景色混合的 alpha , 并定义了宏 PERGB . 它与微软的 ARGB 在数据顺序上是相反的。 PE9.8 已支持Direct2D 和 Direct3D. 这3个新引擎都使用 PERGB。若使用 RGB,则会导致该颜色为透明状态,即屏幕上不显示该前景色。 故把表示颜色的 DWORD = COLORREF 全部由 RGB(r,g,b) 改为 PERGB(a, r,g,b)。 背景知识: COLREF = DWORD = uint32_t Byte3 Byte2 Byte1 Byte0 RGB 0 Blue Green Red PERGB alpha Blue Green Red ARGB alpha Red Green Blue alpha = 0, 前景色 透明, 也即 屏幕上不显示 前景色。 alpha = 255,前景色 不透明。也即 屏幕上只显示 前景色。 alpha = a, 屏幕输出的前景色 = alpha/255 * 设定的前景色 + ( 1 - alpha/255 ) * 当前屏幕背景色。 #define PERGB(a,r,g,b) ((COLORREF)( ((BYTE)(r) | ((WORD)((BYTE)(g))<<8)) | (((DWORD)(BYTE)(b))<<16) | (BYTE)(a)<<24) ) 3 Add 新增函数 CPeChart:: SetChartStyle3(HWND hwndChart, float fSystemFontScale =1.0F); /// for ProE v9.8 CPeChartRt_Base:: void DrawDemoVal_cellEx(int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); void DrawDemoVal_vset (int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); void DrawDemoVal_vsetEx(int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); ### v0007, 添加 2个对话框,(1)用于设定 Chart 的Y轴范围,(2)Line (Subset) To Show/Hide. git on 20250811-20:30. 1 新添加 class CPeChartShowSubsetDlg, 可以 CheckBox 勾选 的方式,设定 哪几条Subset曲线,作图后显示在 Chart. 2 新添加 class CPeChartYAMaxMinDlg, 可以 为 全部(iWorkingAxis, LY, RY)的Y 轴, 查看和设定 显示范围(Max, Min,自动设定). 2.1 在用户修改设定后,调用 ReInit(hwndChart, TRUE) 立即更新Graph。这样当用户按下“设定”按钮后,Chart的坐标轴已经更新。不会等到下一次新数据来到的数据驱动更新。 2.2 CPeChartYAMaxMinDlg 对应的Dlg 的 GUI, Button 顺序修改为:上面BTN=设定,下面BTN=读取Chart状态。 3 控件的ID,重新设计取值. 4 PE 的 Lib 和 Chm 文件加入到 Git. 5 本地git reset 后,强制推送到 远端gitee. ### v0008, Fix CPeChartRt_Base. git on 20250814-12:38. 1 PeChart.h 头文件中 TY,TX 顺序调整为: CPeChartRt_Base { template void DrawDemoVal_vsetEx(int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); } 2 DrawDemoVal_vset() 及 DrawDemoVal_vsetEx() 加入 assert( sizeof(TY) == 8 ) , assert( sizeof(TY) == 4 )等断言,使得与 PEP_bUSINGYDATAII 保持一致。 ### v0009, 提供接口函数. git on 20250814-19:38. 1 模板函数实例化后,不知道为何 DLL却没有能导出 实例化的版本。因此我写了这两个普通的成员函数,作为对外接口,提供给 Exe 调用。 1.1 void CPeChartRt_Base::DrawDemoVal_vsetEx_I (int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); 1.2 void CPeChartRt_Base::DrawDemoVal_vset_I (int cntPtMe, int nTPeriod = 256, double fA = 16.0, double fB = 0, bool bClear = false); ### v0010, V0007的修正. git on 20251020-12:38. 1 class CPeChartYAMaxMinDlg, 当用户 勾选/取消勾选 [自动取值]后,, 对同1行 的Edit_Max, Edit_Min 设 EnableWindow( !bChecked ). ### v0011, V0007的小修正. git on 20251027-12:38. 1 CPeChartYAMaxMinDlg::HideUnusedYaCtrls() 修改 Hide 的条件 2 CPeChartShowSubsetDlg::HideUnusedLines() 修改 Hide 的条件 ### 小知识: $(Configuration) = Release, Debug $(Platform) = x64 $(OutDir) = 编辑框 "Output Directory" 的值 $(IntDir) = 编辑框 "Intermediate Directory" 的值 Output Directory = $(SolutionDir)$(Platform)\$(Configuration)\ , 即 x64\Debug Intermediate Directory = $(Platform)\$(Configuration)\ , 即 x64\Debug $(OutDir)$(TargetName).lib = "x64\Debug\LiuGrid9uX64D.lib" %(Link.OutputFile) = $(OutDir)$(TargetName)$(TargetExt) = = "x64\Debug\LiuGrid9uX64D.dll" 字符串组合 $(IntDir)vc$(PlatformToolsetVersion).pdb x64\Debug\vc143.pdb 旧版本我使用的命令式 : copy $(OutDir)$(ProjectName)ud.dll C:\LiuVcLib\DLL 新版本中修改为: copy $(OutDir)$(TargetName).dll C:\LiuVcLib\DLL copy $(OutDir)$(TargetName).lib C:\LiuVcLib\Lib #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)