近期code中遇到的几个问题

总结一下近期code时遇到的几个问题,从小到大说起。

 

1.VC提供了一中ATL对象RichTextBox,可以很方便的在界面中插入RTF等格式的资源,比如可以插入公式编辑器中的内容等,但是存在一个问题,如果当我们使用了皮肤库(总之造成对话框背景颜色发生变化),变成非系统支持的颜色时,RichTextBox的背景是不可以透明的。自己实现了一个累CMyRichTextBox来实现背景透明。但问题出现了,当将一个RichTextBox对象关联了一个CMyRichTextBox对象时,如果在他之上圈一个Group(注意先后顺序)则不会出错。但如果先放了一个Group,再在它上面放RichTextBox并关联对象,那么RichTextBox就不会显示。

 

2.代码中我想对一个bool变量比如叫flag赋值为true,不小心写成了flag == true,然后浪费了一个小时调试,粗心大意害死人。

 

3.在一个对话框类的头文件中定义了一个宏(为了替换基类)

#define CDialog CXTResizeDialog

导致在另一个对话框类,比如叫CTestDlg中关联RadioButton的int类型的成员变量无法初始化也出发赋值,它始终是一个负的很大的数。跟踪调试发现,CTestDlg类居然是CXTResizeDialog的子类(但CTestDlg的头文件中它是派生自CDialog),通过查找#include发现了问题:

CMainFrame.cpp中include了IncidentRayTableDlg.h,也就是包含了上述那个宏;

而这之后CMainFrame.cpp中又include了TestDlg.h;

这就表示,在编译CTestDlg这个类时,CDialog已经被替换成了 CXTResizeDialog ,导致出错。

所以,头文件的包含顺序很重要,切忌不可随意包含。

 

4.项目的Release版本需要确保在未配置OpenCASCADE开发环境的机器上运行,多次尝试,均出现启动系统的时候Runtime Error。参看晚上的解决方法(如修改环境变量等)都不好使,因为我把我开发它时用的机器上面的与OpenCASCADE有关的环境变量都删了后仍然看可以顺利运行,这说明与环境变量无关。通过在测试机器上不重新编译直接调试Debug版本发现,在文档类的构造函数中,去掉下面几行代码,Release即可运行:

Handle_AIS_Trihedron aTrihedron;
Handle_Geom_Axis2Placement aTrihedronAxis=new Geom_Axis2Placement(gp::XOY());
aTrihedron=new AIS_Trihedron(aTrihedronAxis);
myAISContext->Display(aTrihedron);

这几行代码属于OpenCASCADE开源库,作用是在三维空间产生一个三维坐标参考系的函数。

你可能感兴趣的:(测试,文档,include,RadioButton,rtf)