带颜色的静态文本框
具体参考文章《Using colors in CEdit and CStatic》,此文使用了一个类继承并扩展了CStatic控件的功能。
超链接
MFC中,有超链接控件,感觉不大好用,于是找了个基于CStatic的自定义控件的文章《Hyperlink control》。若要使用此控件,可能需要对它的源码略作修改。
选择文件夹对话框
直接参考文章《CFolderDialog - Selecting Folders》即可,它里面对Windows的API进行了封装,具体细节参考源码。
MD5转码
采用文章《Use Windows Crypto API to calculate a MD5 string》内的方案即可。不过这个是非Unicode编码的,使用的时候需要注意。
附加控制台
这个功能是指在MFC程序起来的时候,弹出控制台打印,一般用来调试。此部分参考下面语句:
[cpp]
int hCrt;
FILE *hf;
// 创建一个新的控制台
AllocConsole();
// 绑定到标准输出
hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
hf = _fdopen( hCrt, "w" );
// 替换标准输出stdout,让printf可用
m_stdoutOld = *stdout;
*stdout = *hf;
// 清空输出缓存
setvbuf( stdout, NULL, _IONBF, 0 );
// 测试
printf("my console is running from printf\n");
std::cout << "my console is running from std::cout" << std::endl;
int hCrt;
FILE *hf;
// 创建一个新的控制台
AllocConsole();
// 绑定到标准输出
hCrt = _open_osfhandle((long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
hf = _fdopen( hCrt, "w" );
// 替换标准输出stdout,让printf可用
m_stdoutOld = *stdout;
*stdout = *hf;
// 清空输出缓存
setvbuf( stdout, NULL, _IONBF, 0 );
// 测试
printf("my console is running from printf\n");
std::cout << "my console is running from std::cout" << std::endl;
回调
MFC中,难免要用到回调机制,直接采用库sigslot即可,该库只有一个头文件。具体用法参考《libjingle源码分析之一:Signal机制》。