VS2005使用技巧

1.选择CPU的类型
    使用过EVC的朋友都知道,EVC支持诸如ARMV4、ARMV4I、MIPS、X86等多种CPU类型。但是除了STANDARD SDK之外,其他的SDK通常都是限定了CPU类型的。例如PPC2003是ARMV4的,而Mobile5是ARMV4I的。
    大家都知道,ARMV4、ARMV4I是两套颇有渊源的指令集,前者编的程序可以运行在支持后者的机器上,但反过来则不行。这就带来了一个新的问题。
    最近我负责向一个PPC2003的程序添加新功能,该功能是由第三方以静态库的方式提供的,那个库是ARMV4I的。在默认情况下,是不能链接到PPC2003程序中的。由于这个程序比较复杂,用Mobile5重新编过,需要对代码作较大修改。所以可以考虑修改链接器的CPU类型。当然这种方法只是一种偷懒的方法,常会产生一些深层次的链接错误,并不推荐。
方法:
   1)EVC
    Project->Settings->Link->General->Project Options,将/MACHINE:ARM改为/MACHINE:THUMB。
   2)VS2005
    Project->Properties->Linker->Command Line->Additional options,将/MACHINE:ARM改为/MACHINE:THUMB。
    类似的我们还可以修改链接内核版本,例如我们用Windows Mobile 5 SDK编译程序,如果想让它的行为与PPC 2003相同的话,可以将/subsystem:windowsce,5.01改为/subsystem:windowsce,4.20
    这个方法在VGA编程时是很有用的,PPC 2003下VGA是320*240的分辨率,而WM5下是640*480的分辨率。有时可能需要用这个方法移植一些老程序。

2.LNK2005问题
    http://www.cnblogs.com/hyamw/archive/2007/01/11/618021.html
    http://topic.csdn.net/t/20050525/17/4035191.html
    当然还有终极大招——命令行的/FORCE选项,不过这是不得已而为之。明知有问题,却采用此暴力流,链接是没问题了,但链接后的东西是否可用,那就只有天知道了。

3.最近做一个嵌入式的项目,需要做一个全屏的MFC对话框。刚接到手时,着实没怎么在意这个小东西。岂料刚开始做,问题就出来了。VC的对话框编辑器使用DLU作为长度单位,而我的项目需要以像素为单位。经过无数实践和查找资料后,我终于找到了一个方法。
1)创建一个Bitmap资源,图片的大小与你所需大小一致。
2)在对话框中添加该图片,按照图片的大小调整对话框的大小即可。
    在EVC4下我试过该方法,但不成功。网上有的人说VC 6和VC 2005下,同样的字体、大小,DLU和像素之间的换算值是不同的,估计这也是微软在新形势下对工具的一种调整。DLU这种东西,问世的年代比较久远,它主要解决的是在分辨率较小的年代,如何清晰显示字体的问题。在当时这是个首要问题,但现在UI设计的关键已经转移到窗口的贴图上,对于图片而言,像素才是标准单位。
    这里需要注意的是1 DLU在横向和纵向上对应的像素值,随设备不同而不同,在我实验的几款设备中,用上面的方法基本横向都没问题,但纵向就不一定正确了。
    最后再提一下控件的Z值问题。虽然在对话框编辑器中,没有明显的地方设置Z值(Z值决定当两个控件重叠时,谁在上面),但其实是可以修改的,调整一下控件的TAB值即可。

4.自绘按钮时,发现即使使用了DT_VCENTER来绘制字体,字体在按钮上的位置也不居中,后来发现还需要添加DT_SINGLELINE才行。

5.在MFC中要实现换行效果,除了要在字符串中添加/n之外,还需要将DrawText设置成~DT_SINGLELINE。

6.执行.bat文件时,如果不想让它运行完后直接关闭窗口,可以为该文件创建快捷方式,右键点击该快捷方式,在“属性”的“快捷方式”页的“目标”栏的最前面添加%comspec% /k。

7.工程向导
某些SDK可能比较古老,没有匹配VS2005的向导文件,可以采用以下办法试试:找到向导对应的.vsz文件,将Wizard所在行改为Wizard=VsWizard.VsWizardEngine.8.0,但不同版本的向导之间,还是有差别的,因此这一招在某些情况下,可能无效。

8.win32控制台工程,如果在运行时,不希望有控制台窗口,只要在程序中加上:
 #pragma comment( linker, "/subsystem:/"windows/" /entry:/"mainCRTStartup/"" )
  反过来如果某个win32控制台工程运行过快,以至于看不清控制台窗口的输出时,可以在主程序的末尾加上:
system("pause");

你可能感兴趣的:(VS2005使用技巧)