随笔分类 - MFC相关
记录mfc开发的技巧与点滴
摘要:1.关于超前引用这是个一般不太会接触到的问题,我是因为想要让view类和doc类之间的访问变得简单才遇到了这个问题。我的设想是:在doc类中设置一个指向view的成员变量,但是加上之后总提示我该类(view类)未被定义,我就奇了怪了,头文件也是包含过的,即view类和doc类的cpp文件中都包含了彼此的头文件。上网查了下,发现这个是C++的机制造成的,编译器在编译的时候只会根据头文件的顺序编译一次,在doc类的cpp中,是先包含的doc.h然后是view.h,因此,不可能在doc类中定义view类的指针,因为那时候view还没有包含进来。因此这种情况叫超前引用,网上原文如下:更一般的情况,类A
阅读全文
摘要:最近在做一个工程的代码优化工作,想整理下遇到的问题,以便日后查找方便。1.MFC读写配置文件。读写配置文件主要依赖于两个函数,分别是:WritePrivateProfileString和GetPrivateProfileString,其函数原型分别如下:1 BOOL WritePrivateProfileString(2 LPCTSTR lpAppName, // 指向指定字段的字符串3 LPCTSTR lpKeyName, // 指向指定键的字符串4 LPCTSTR lpString, // 指向指定值的字符串5 LPCTSTR lpFileName // 指向文件名称字符串6 );1 DW
阅读全文
摘要:MFC中相对路径有时候会抽风,你问我为什么,我也不知道。比较好的方法就是获得绝对路径,这是一种较为稳妥且移植性较好的解决方式。基本方法是调用一个函数:GetModuleFileName,这个函数会返回exe文件的路径,包括exe文件名,所以要做的事情就是把*.exe那段给去掉。代码如下:CString 类名::GetFilePath() { char exepath[MAX_PATH]; CString strdir,tmpdir; memset(exepath,0,MAX_PATH); GetModuleFileName(NULL,exepath,MAX_PATH); tmpdir=exep
阅读全文
摘要:这个一个比较神奇的问题,起因是有一次程序需要,需要将显示图像的区域变成有滚动条形式,这就不得不考虑用scrollview类来实现。看网上的一些方法,主要有两种实现形式:一种是直接在对话框中创建视图。还有一种是用子类化。先谈第一种:先在对话框中定义自己的视图对象MyView *m_pView;在对话框的CPP中1CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD)//构造函数[代码]第二重方法是子类化:在对话框上放一个简单空间比如RECTANGLE,然后在对话框重定义视图的对象MyView *m_pView;在对话框的CPP中1CAboutDlg::C
阅读全文
摘要:最近在写一个图像编辑软件,环境是MFC,但是MFC的视图刷新机制使得图像闪烁得非常厉害(图像缩放时尤其明显),在网上查了一些资料,最好的方法是用双缓冲的方式显示,这里总结一下。 双缓冲的原理可以这样形象的理解:把电脑屏幕看作一块黑板。首先我们在内存环境中建立一个“虚拟“的黑板,然后在这块黑板上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块黑板(屏幕)上。采取这种方法可以提高绘图速度,极大的改善绘图效果。主要实现代码如下:[代码] 主要思路就是先创建一个虚拟dc和一张虚拟位图,用于将图像输出到虚拟设备上,内容在虚拟设备挥好后再输出到真实dc上显示出来
阅读全文
摘要:vs2010性能是优越的,但是相对来说cpu和内存开销也大了, 一般对于我这种只用来写mfc程序的却是是有点臃肿,修改一下配置也许会更好。1.解决工程文件夹过大的问题。用向导生成的mfc程序动辄就100M+,非常不爽,解决方法是修改回退位置,打开工具-选项-文本编辑器-c/c++ 选择高级-回退位置-始终使用回退位置,回退位置设置一个固定目录,这样数据库文件sdf就不会往工程目录里写,而写在一个固定位置,可以定期删除这个固定目录释放空间。2.界面精简。vs2010界面上有些东西是不需要的,如团队合作一些什么的。为了加快启动速度,可以将vs2010界面上的冗余菜单和按钮取消掉,需要的时候可以再打
阅读全文
浙公网安备 33010602011771号