【原创】VS2012中生成的对话框太丑了,怎么办?
1赞最近在做一款基于VS2012 MFC的bmp转mif的软件(做好的软件如图1所示)时,遇到了许多尴尬的问题。而在本博文中要阐述的是编码问题。
图1 BMP2Mif软件界面
在新建MFC工程的时候,有“使用unicode库”这个选项可以选择,如图2所示。
图2 新建MFC工程时勾选“使用unicode库”
假设选择“使用unicode库”,MFC工程编译后生成的对话框风格(这里以添加一个按钮为例)如图3所示,感觉还过意得去,哈哈~~别高兴太早!因为BMP2Mif软件生成的mif文件加载到ROM中,Quartus II编译时会报错,如图4所示。
图3 在使用unicode库的情况下生成的对话框
图4 编译报错
根据错误提示可以知道,生成的mif文件不是正确的格式。为什么会这样?很简单,Quartus II软件识别不了unicode编码,但它可以识别ANSI编码。怎么办?当然是unicode转ANSI啦。该方法是可行的,直接将CString转换成CStringA。那么有没有更简单的方法呢?有,就在新建MFC工程时,去掉“使用unicode库”选项,如图5所示。
图5 新建MFC工程时不勾选“使用unicode库”
MFC工程编译后生成的对话框风格(这里以添加一个按钮为例)如图6所示,太丑了,太丑了,真看不下去了(相对图3来说),虽然Quartus II编译没有报错。为了追求完美,必须修改按钮的风格。下一步该做什么?自绘按钮?当然没问题。那有没有更简单的办法?有,打开stdafx.h头文件,将程序清单1所示的代码的第一行和最后一行注释掉就可以了,效果如图7所示。这样,不但可以生成正确编码格式的mif文件,而且界面也挺好看的。所谓“鱼和熊掌二者可兼得”,哈哈~~
图6 在不使用unicode库的情况下生成的对话框
程序清单1
//#ifdef _UNICODE #if defined _M_IX86 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") #elif defined _M_X64 #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") #else #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #endif //#endif
图7 最终效果图