crazybird

【原创】VS2012中生成的对话框太丑了,怎么办?

1
阅读(4488)

    最近在做一款基于VS2012 MFC的bmp转mif的软件(做好的软件如图1所示)时,遇到了许多尴尬的问题。而在本博文中要阐述的是编码问题。

0.png

图1  BMP2Mif软件界面

    在新建MFC工程的时候,有“使用unicode库”这个选项可以选择,如图2所示。

1.png

图2  新建MFC工程时勾选“使用unicode库”

    假设选择“使用unicode库”,MFC工程编译后生成的对话框风格(这里以添加一个按钮为例)如图3所示,感觉还过意得去,哈哈~~别高兴太早!因为BMP2Mif软件生成的mif文件加载到ROM中,Quartus II编译时会报错,如图4所示。

2.png

图3  在使用unicode库的情况下生成的对话框

3.png

图4  编译报错

    根据错误提示可以知道,生成的mif文件不是正确的格式。为什么会这样?很简单,Quartus II软件识别不了unicode编码,但它可以识别ANSI编码。怎么办?当然是unicode转ANSI啦。该方法是可行的,直接将CString转换成CStringA。那么有没有更简单的方法呢?有,就在新建MFC工程时,去掉“使用unicode库”选项,如图5所示。

4.png

图5  新建MFC工程时不勾选“使用unicode库”

    MFC工程编译后生成的对话框风格(这里以添加一个按钮为例)如图6所示,太丑了,太丑了,真看不下去了(相对图3来说),虽然Quartus II编译没有报错。为了追求完美,必须修改按钮的风格。下一步该做什么?自绘按钮?当然没问题。那有没有更简单的办法?有,打开stdafx.h头文件,将程序清单1所示的代码的第一行和最后一行注释掉就可以了,效果如图7所示。这样,不但可以生成正确编码格式的mif文件,而且界面也挺好看的。所谓“鱼和熊掌二者可兼得”,哈哈~~

5.png

图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

6.png

图7  最终效果图

3.png


当前已输入293个字符, 您还可以输入9707个字符