一、怎么形象地理解MFC编程框架?
我来微软面试的时候,有两个面试官都好奇地问我MFC是什么东西?我解释完后,他们还说"我还以为是微软又新搞了个什么东西"
微软自己都不用了的东西,你也别学了吧!就是一个大坑!
二、C++ MFC 如何编写实现“在编辑框里选中不同位置的字符或字符串”的功能?
谢邀。
编辑框自绘。
不需要很复杂(需要自己实现一个Edit操作)的从CWnd派生,直接从CEdit派生。
在OnPaint中,默认绘制之后,添加多选的矩形区域绘制的逻辑 即可。
void CCustomEdit::OnPaint()
{
Default();
CClientDC dc(this);
//dc.LineTo( 100, 100 );
//此处随便画
}
需要半透明,考虑使用GDIPlus,类似于这样。
三、为什么MFC程序普遍使用对话框去创建控件?
没问题啊,你可以用代码创建按钮,编辑框这些啊。
mfc里大多数控件都是一个对话框。。。你获取这些控件的句柄不也是用的GetDlgItem
函数么
四、感觉自学mfc太难了,但学校有作业要做必须学,有什么建议?
换成VS2019+Qt插件开发,入手容易且开发效率高,其安装配、界面设计和编程过程参见《C++程序设计精要教程》视频第34~第36讲,注意都选x86或同时选x64。完整安装配置、开发实例参见《C++程序设计精要教程学习指导与习题解答》,习题15.3公交转乘,结合简单的数学建模和面向对象建模,功能涉及窗口、菜单、按钮、标签、编辑框、悬浮提示及自动消隐、文件捜索与读写,地图背景显示与前景线路绘制,地图热点感知与信息提示,转乘线路批量绘制与定时批量自动消隐。
五、MFC真的过时了吗?
一 开篇
说到GUI界面,首先要提一下控制台应用程序,即能够运行在MS-DOS环境中的程序,通常控制台应用程序没有可视化界面,只是通过字符串来显示结果信息。它常常被应用在测试、监控变量等用途,用途较为单一,要实现复杂功能还是得编写GUI界面程序。结合自己项目中做过的算法的快速迭代确实使用到了控制台程序的优势,比如在OpenCV中我们一般在int main(int argc, char** argv)函数中实现,如:
//算法核心
while (vid.read(src)){
//创建窗口
namedWindow("Source", WINDOW_AUTOSIZE);
resizeWindow("Source", src.cols, src.rows);
//假设通过一系列算法处理得到了全局变量xDisplacement 的值
outStream << 2*xDisplacement << "\n";//直接输出变量xDisplacement的值
}
所以,上述实际上采用了一行代码实现了控制台应用程序的结果输出,但是没有实现出复杂的效果,实在是不能满足一些项目的要求。所以我就找到了cvui这个库文件,它可以实现实时动态的绘制曲线,而且绘制效率很高,这个库文件大神已经给写好了,我们只负责调用就可以,而且可以实现快速高效的GUI界面的功能,具体可以百度一下。
谈完OpenCV的应用,我们接下来说下OpenGL的应用,之前实现的三维频谱图的重建用到了这个技术来绘制频谱图,OpenGL可谓是从底层直接实现绘制的功能,效率非常之高,做图形学一般绕不开这个技术,当然了还有DirectX。当时自己实现时候先是写了一个简单的控制台应用程序,带简单的界面,目的先实现坐标系的绘制,顺带将.txt数据文件进行处理成二维动态数组读到内存中,这样就方便C++进行操作。后面要实现一个完整的小软件,采用了MFC单文档多视图的架构,最后编译的程序加上一些.net库(为了跨多操作系统运行)才1M多一点,OpenGL程序感觉执行起来不比DirectX差。
二 GUI界面推荐
C++语言的GUI界面比如MFC,QT,它们只是程序的一个框架,可以认为是一个已经做好的西装,但是还缺少细节的一些修饰和定制。当然如果只是实现题主要求,达到应用级别,你可以采用MFC和QT任何一种,我不认为QT有那么好用,开发起来很快,但是好处就是控件多、控制细节漂亮,所以这就是题主的一个取舍问题,如果这两种技术全没有学过,我觉得MFC、QT任意选一种均可以上手开始学。如果之前对MFC很熟悉,有现成的项目,那么改改移植过来照样能快速使用,我不认为MFC做出的界面很丑,有非常漂亮的MFC界面程序,尤其是采用了单文档多视图、多文档多视图等技术的,界面布局还是题主需要在编程中慢慢熟悉。如果学习和做项目为了后续的发展考虑,我觉得QT更有前途一些,还有更大的优势就是QT可以一次编译多次跨平台使用,是不是很香。
三 结论
当今的MFC主要应用在特定的领域,如股票软件、工控领域、科研中程序的快速实现,不需要太复杂花哨的界面,但是可应用性和QT比还是小很多。