MFC
文章平均质量分 59
XZHOUMIN
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MFC视图中绘制图形缩放和滚动条的处理
本文介绍了一个基于MFC的图形绘制与缩放实现方案,通过解析GeoJSON路网数据实现地图绘制。重点阐述了四种坐标系(世界坐标、逻辑坐标、设备坐标和屏幕坐标)的转换关系:世界坐标通过缩放和平移转为逻辑坐标,再通过滚动偏移转为设备坐标。关键技术包括:1)坐标转换公式;2)滚轮缩放时保持鼠标点位置不变的算法;3)滚动范围的计算与调整。该方案利用MFC自动处理逻辑到设备的映射,开发者只需关注世界坐标与逻辑坐标之间的转换,实现了地图的平滑缩放和滚动查看功能。原创 2025-08-29 14:24:48 · 897 阅读 · 0 评论 -
如何在CGridCtrl的下列combo格子中即时获取修改的值
但对于combo获取到的值就是上次的值,而不是下拉修改的值,只有在焦点失去后才能获取到修改后的值。CGridCtrl是一个常用的格子控件,每个格子还可以设置为不同的类型,比如按钮,checkbox,combo等。经过研究,需要将下拉框的值改变时将值写入到格子中,同时将消息发送到格子的父窗口(一般是对话框。正常情况下,在OnNotify消息中处理数据变化,对于格子为edit的没有任何问题。然后在对话框中实现这个消息就可以即时获取下拉变化时选取的值。对于常规使用是没有问题的,你后期获取格子的值就行。原创 2025-08-08 14:22:52 · 213 阅读 · 0 评论 -
【MFC】多工具栏如何保存状态(续)
我原来的方法是绕过,现在考虑若修改LoadState这个函数不就直接解决了问题了。有了这个思路就好办了,我们可以用C++的3大特性之一继承来做这个事情。工具栏的数量大幅减少,其中红框的是我们加的扩展工具栏保存的状态数据,绿框是两个菜单栏的状态数据,蓝框是标准工具栏就是MFC默认工具栏的状态保存数据。其中pane和basepane对应的数字是工具栏的父类和祖类的保存的状态数据,通过数字一一对应。其中的方法有点无奈,经过我最新的研究,有了更好的方法。其中数字的含义上一篇已经讲过了。具体代码可以见绑定的资源。原创 2024-12-26 10:02:33 · 642 阅读 · 0 评论 -
【MFC】如何修改多文档视图的标签
为了在切换窗口时保持标题,需要修改子框架的以下函数。以下代码演示创建时设置标题,并保存到子框架中。新建一个调用菜单,并实现其内容。新建工程同之前的几篇博客。注意不要调用父类的函数。源代码见文章绑定的资源。原创 2024-12-21 09:46:49 · 574 阅读 · 0 评论 -
【MFC】多工具栏如何保存状态
LoadState的3个参数其中后两个都是用默认参数,导致最后调用的路径生成的为strSection.Format(AFX_REG_SECTION_FMT, (LPCTSTR)strProfileName, nIndex);MFC中的工具栏本来只有一个,如果想增加几个工具栏是比较简单,但现在一个重要的问题是,状态无法保存,导致每次打开,工具栏就会出现问题,要么偏移位置要么显示不出。经过研究,发现是MFC框架中的一个bug,就是在保存工具栏时,将两个工具栏都保存到注册表的同一个路径中了。以下是加载工具栏了,原创 2024-12-19 08:02:26 · 533 阅读 · 0 评论 -
【MFC】如何读取rtf文件并进行展示
rtf是微软的一个带格式的文件,比word简单,我们可以用写字板等程序打开编辑。下面以具体实例讲解如何在自己程序中展示rtf文件。首先使用VS2022创建一个MFC的工程。原创 2024-12-13 08:21:55 · 836 阅读 · 0 评论 -
MFC如何创建一个浮动的带选项卡(TAB页)的对话框
现在咱们有了4个类,把他们装配起来,其中CMyFrame是最外层的框架,其中包含CMySheet,CMySheet再包含两个最终需要显示的对话框CYX,CYC。第一个错误是因为咱们是用成员变量来实例化的,没有对应的构造函数,一会咱们改下表单类就能解决,后面两个错误是还没有创建对话框和属性页进行绑定。首先在CMyFrame中增加一个CMySheet的表单实例,然后在OnCreate方法中创建表单实例的窗体并调整位置,显示其内容。现在编译没有问题了,最后一步工作,将两个对话框,或者说是属性页装配到表单上。原创 2024-12-11 08:34:06 · 751 阅读 · 0 评论 -
MFC中如何创建一个非模态对话框
对话框是编程中常用的一个控件,非模态对话框与用户交互更加友好,用户不必关闭对话框就能进行其他操作,比如拷贝黏贴,对比数据,执行其他命令。由于无模态对话经常使用,且用法类似,因此我把它写成了一个类,每次只要继承即可使用非模态对话框,不再重复做哪些繁琐的操作。不需要考虑指针释放,不需要考虑多次调用,这些都已经在非模态对话框已经都做好了。因为只是演示对话框的使用,因此我们直接用向导的默认值直接生成工程。找一个可以调用此对话的地方演示效果,就在菜单中吧,加一个菜单项。这个对话框就是以后你需要给用户展示用的。原创 2024-12-09 09:08:12 · 647 阅读 · 0 评论 -
MFC实现全屏功能
其中2000是一个ID,会在全屏时自动多出一个按钮,按钮ID就是这个2000,实现这个COMMANDID,即可对应关闭全屏,当然用escape键也可以关闭全屏。默认是显示菜单的,可以用在oncreate调用EnableFullScreenMainMenu(FALSE);的方法,即可不显示菜单。根据MFC的描述,不需要继承CFullScreenImpl 类,它已经集成到了框架类中,用以下方法即可进行管理。随着MFC的升级,MFC框架本身就具备了全屏的功能。这个ID可以随便取一个,不要冲突接口。原创 2024-12-05 08:12:07 · 754 阅读 · 0 评论 -
MFC中如何在工具条动态增加菜单
明明这里:pPopup->GetSafeHmenu (), GetCmdMgr ()->GetCmdImage (ID_BORDER_1, FALSE)创建的地方的代码:在void CFormatBar::OnReset ()函数中,此函数为CMFCToolBar的虚函数,在创建bar的时候就会调用。在原有的toolbar上有一个按钮ID为ID_BORDER_1,这里就将其替换为menubar。获取的image是ID_BORDER_1,这个IDR_BORDER_TYPE是怎么弄上去的。原创 2024-12-01 08:12:44 · 702 阅读 · 0 评论 -
VS2022的MFC的ReadString的问题
最后解决办法是,继承CStdioFile类,重写ReadString函数,或增加一个ReadString函数(改个名)。用vs2022CStdioFile类读取文件时,当文件中出现有一段0,不是字符串0而是16进制0,会导致直接读取结束,但实际文件还有很长,则后面的内容无法读入。但现在我要处理的文件中有16进制0,文件又需要全部读完,用VS2022的函数就行。但在处理异常情况下,VC6的函数就要优一些,至于为何VS2022的函数要这样修改,我还没有搞明白。若是正常的文本,中间不会出现二进制0的。原创 2024-11-27 07:36:34 · 586 阅读 · 0 评论 -
网易博客旧文----如何将BCGSOFT的格子控件用到微软的MFC工程中
2、用CBCGPEditView的GetGridCtrl()方法获取指向CBCGPGridCtrl实例的一个指针,然后调用CBCGPGridCtrl的格子的各种方法来绘制表格。我想了一个解决办法,就是调用CBCGPGridCtrl的SetColorTheme方法,而参数来源于自己整理跟踪出的数据,数据见最后。2013-07-09 14:28:33| 分类: MFC | 标签: |举报 |字号大中小 订阅。MFC支持各种皮肤风格的变换,由于新加的格子控件不在MFC整个控制系统内,因此无法跟随其变换颜色。原创 2024-10-21 07:31:11 · 734 阅读 · 0 评论 -
网易博客旧文----关于BCGGrid自动分组的研究
主要使用的两个类CBCGPGridCtrl和CBCGPGridView,如果需要在VIEW中使用格子,直接使用CBCGPGridView即可,这个视图已经包含了CBCGPGridCtrl的一个实例,用GetGridCtrl获取后进行操作即可。在 CMyGridView 的OnCreate方法中,不再执行CBCGPGridView的OnCreate方法,而是执行CView的OnCreate方法,并且创建 CMyGridCtrl 的一个实例,作为 CMyGridView 的成员变量,创建时对格子做各种初始化。原创 2024-10-19 10:35:21 · 660 阅读 · 0 评论 -
网易博客旧文----Xtreme ToolkitPro 的CommandBarsDesigner编辑生成的界面如何使用
codejock公司的Xtreme ToolkitPro界面控件中的CommandBarsDesigner是一个界面编辑器,它既可以编辑一般的工具条菜单,也可以编辑ribbon工具条,想学会这个编译器不难,一个是图形界面的,另外一个是有帮助文档。但编辑生成的界面如何在程序中使用,很少有提到的。著名的界面开发商Codejock Software开发的MFC界面控件和BCGsoft公司开发的BCGControlBarPro界面有得一拼。经过研究,终于知道了如何使用,先记录如下,以飨大家。原创 2024-10-17 08:33:43 · 604 阅读 · 0 评论 -
网易博客旧文----VC2008内存泄露的查找
从上图可以看出,无论是否定义了_CRTDBG_MAP_ALLOC或_CRTDBG_MAP_ALLOC_NEW,系统均会将内存分配纳入管理,即在程序最后调用_CrtDumpMemoryLeaks()函数均会报告程序泄漏情况,不同的是,定义了这两个宏后,可以在输出泄漏内存时,增加源代码和行数这两个有用的信息。在MFC中若调用malloc分配内存,虽然可以监视内存泄漏,但文件名和行号不会输出,因为MFC程序中没有定义_CRTDBG_MAP_ALLOC,若需要,可自行定义这个预定义变量。原创 2024-10-15 13:11:08 · 631 阅读 · 0 评论 -
网易博客旧文----CString显示中文的一些认识
实际上Read函数和CFile也有不同,我发现,它会将其中的0x0D去掉,即原来是0x0D,0x0A,实际读上来就只有0x0A了。经过研究,发现CString在UNICODE方式下,内部编码用的是UTF8,因此需要将中文转换为UTF8方式,才能正常输出。在常规方式下,用CString的format方法,调用%c的方式,在中文为ASC编码方式时,这样没有任何问题。至于test中的两个值,可以用以上网上获取的方式,判断是否大于127的方式来一次取两个。可以看到当文件为UTF8方式时,文件开始的标识是。原创 2024-10-13 13:36:31 · 540 阅读 · 0 评论 -
MFC多文档界面(MDI)应用程序中,子框架中的停靠窗口CDockablePane状态保存
在主框架中,向导生成的几个停靠窗CDockablePane状态会自动保存,即在第二次打开时,停靠窗的大小和位置会和上次的状态一致,这对于使用者来说是非常友好的。有两个地方,一个是APP类中的虚函数SaveCustomState()中遍历所有子框架,对状态进行保存,保存在状态需要取不同的名字。对于多个子框架,需要对整个名称进行管理,以保证加载到正确的子框架中,因为多个子框架中,每个子框架中的停靠窗的个数和内容可以完全不同。创建并显示停靠窗,在子框架的OnCreate函数中实现,和主框架相同,在此不在赘述。原创 2024-09-13 08:45:03 · 669 阅读 · 0 评论 -
内存泄漏查找参考
为找出内存泄漏,有两个办法,一个是要求其他的lib库分配内存时,需要调用_malloc_dbg并传入行号和文件名,可以用宏的__LINE__和__FILE__传入行号和文件。结果没有输出有问题的文件名和行号,验证了上述的问题,就是微软之前的版本应该是可以的,现在的win10sdk的内存监视方面有问题。由于MFC这块做得比较完善,因此在MFC程序中用new来申请内容时可以进行监视,最后定位内存泄漏的,用malloc就需要自己加点代码了。经过研究,在mfc程序中,直接调用new的情况下,内存泄漏是可以定位的。原创 2024-09-26 08:23:18 · 962 阅读 · 0 评论
分享