这个问题和上一个转帖的VS2010 MFC文字过小问题如出一辙,但是那篇帖子里的解决方法只是一个临时的解决方法,对于应用BCG库后的MFC程序,尤其是应用了部分主题以后,即使修改了字体,也会由于UI部分很多地方会调用BCGPGLOBAL_DATA的UpdateFonts导致修改后的font被默认字体覆盖。
其实用源码跟踪了一下后发现,导致中文字体难看的原因其实是Segoe UI这个字体,于是修改了Bcgglobals.cpp中
static const CString strOffice2007FontName = _T(“Segoe UI”);
这行为
static const CString strOffice2007FontName = _T(“Tahoma”);
使用Tahoma字体就可以了。
C, C++, Obj-C
开启Visual Studio下C++的注释TODO自动列表到TaskList窗口功能
用Eclipse写JAVA时已经习惯了在注释里写TODO,然后Tasks小窗口中就能够看到当前source页里的所有TODO,用起来很方便。这几天用VS 2010写MFC时留了很多TODO,才发现开了VS的Task List窗口竟然看不到代码页里的TODO位置,看了一下M$的官方Blog发现原来只有VC++用这个功能时是需要手动开启的,VB、C#都是直接开启的。VC++开启这个功能的位置如下:
Tools->Options->Text Editor->C/C++->Formatting-> Miscellaneous->Enumerate Comment Tasks。
官方说法这个选项在C++里被默认关闭的原因是due to performance reasons。
为SDL窗口模式程序添加menu
一定要窗口模式的程序,还要有menu,找了很多资料都找不到相关内容。
老外说要hack sdl的库,进入底层,HOHO,好深奥,不解,但我就是要实现这个窗口加menu,所以主席说的好,自己动手,丰衣足食!
取得windows中一些特殊文件夹路径的方法
比如当前用户的documents文件夹、windows安装文件夹等,虽然一些软件的默认文档保存位置通过这种方式取得感觉有点恶心,不过在用户未指定默认目录的情况下通过这种方式取得的路径还是比较合理的。
以下内容转抄自Visual C++ Tips,原始链接:http://weseetips.com/2008/05/01/how-to-get-the-path-of-special-folders-in-windows/
Windows have a number of special folder such as my documents, desktop folder etc. They are special because, their path can be different in system to system. So how can you get the path of special folder in windows?
[转]Visual studio 2008/2010 MFC程序Menu、Toolbar字体偏小解决办法
原文:http://www.blogjava.net/luchunwei/archive/2010/06/09/323118.html
首先,这是一个MFC的Bug
http://connect.microsoft.com/VisualStudio/feedback/details/505466/mfc-visual-style-font-size-too-small-to-display-chinese-character-clearly-on-windows-xp
解决时间暂时还不确定,临时的方案如下:
App在InitInstance中加入:
记录VS2010下用BCGControlBar编译程序时的一个小问题
链接期错误信息如下:
win32下combobox控件的一个大量添加数据时的加速技巧
今天在做MFC程序的时候用到了combobox作下拉列表选择,以前也用过这个控件,但是很少有像今天这样大量AddString的情况,而且是做联动list会同时更新3个以上combo的列表项,运行发现会很卡,而且简单用GetTickCount查了一下,发现就是AddString在耗费时间。其实这个操作默认情况下会触发控件的重绘,从而导致浪费了时间,一般情况下,添加项的时候是不会即刻显示的,所以可以通过SetRedraw(FALSE)然后再add的方法就可以有效提高数据添加的速度了,当然结束以后要SetRedraw(TRUE)回来,然后随便用个什么方法触发一下重绘就可以了。
Win7下使用VS2008生成C++ 项目时的link error
最近发现在Win7下使用VS开发C++项目时,在编译生成目标文件的时候总会时不时的出个link错误:fatal error LNK1000: Internal error during IncrBuildImage,还以为是程序写的有问题,后来发现再执行一次build就不会出错了!其实原来在xp下用VS2008也没出过这个问题,直到最近发现出现频率越来越高,受不了了开始寻求解决方法,发现其实是bug,而且ms也已经提供了补丁:http://support.microsoft.com/kb/948127,打上补丁就解决了。
Symbian编译时的Error -1073741819错误
完整错误信息类似下面这样:
make[1]: *** [\Symbian\9.2\S60_3rd_FP1_2\EPOC32\BUILD\…\Gif_Reader.o] Error -1073741819
make[1]: *** Waiting for unfinished jobs….
make[1]: *** Waiting for unfinished jobs….
make[1]: *** Waiting for unfinished jobs….
make: *** [TARGETMGATE] Error 2
这只是在整个过程中的一部分出现,最后提示还是***Build Complete,carbide的problems里也没有任何对应的代码位置提示,很容易误解成sdk或这编译器坏了,网上有人说重装sdk,有人说clean一遍项目。其实这是由于代码里写了一些貌似合法但实际不对的写法,举个具体的例子就是拿对象类型的变量强制转换成指针使用,比如
CCoeControl& iParent;
((CTestAppView*)iParent)->foo();
这样,就会导致这种build错误。
WM下MFC基于对话框(dialog based)程序的最小化
在WM下的MFC基于对话框程序(VS模板自动生成状态下),运行之后右上角显示的是OK图标,点击后走的逻辑是dialog的OnOK()默认逻辑,会直接把对话框程序关闭掉。这个右上角的按钮据说在SDI或MDI程序运行时显示的是X,会有对应smart minimize的功能,就是点了是最小化隐藏的功能。开始尝试使用ShowWindow(SW_MINIMIZE)的方法来最小化对话框程序,发现结果是右上角的ok没了,下面的左右软键菜单没了,但程序主窗口还在显示,没有像用过的其他程序那样ok按了以后显示windows的today界面。后来换用ShowWindow(SW_HIDE),这样确实是隐藏了,也看见today了,但是再想重新打开程序就不行了,htc的应用程序列表里没有我的程序,开进程管理器直接激活进程倒是可以,但是切换的话会提示说程序窗口已被隐藏XX,不能再打开了,只能强制结束进程。
其实这个问题好像很早以前就被发现了,据说是个today的bug,详情看这:QA: How to create Today-friendly dialog based application?,默认对话框的窗口类型是WS_POPUP,而默认情况下基于对话框程序的这个dialog window的parent就是today这个窗口(等价于windows的desktop),最小化或者直接激活today显示会导致触发其子窗口的显示,所以又把dialog给弄出来了,解决方法倒是相当简单:把WS_POPUP样式换成WS_OVERLAPPED!