最近在寫一個MFC程序,感覺MFC發展了很多年,應該是趨於完善的;具體表現在:相關的文檔比較全,相關功能的Demo可以很方便的google到。因此,在MFC上做一些基本功能應該是沒問題的。
MFC文檔
功能
托盤圖標
NOTIFYICONDATAW m_IconData;
m_IconData.cbSize = sizeof(NOTIFYICONDATAW);
m_IconData.uCallbackMessage = m_messageId; // Try icon的消息ID
m_IconData.dwInfoFlags = NIIF_INFO;
m_IconData.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 設定圖標接受的消息
m_IconData.uID = ID_TRAY_ICON; // 用來區分的icon的ID
m_IconData.hWnd = hWnd; // 接受消息的窗口
m_IconData.hIcon = m_hIconOffLine; // IDI_TRAY是在資源文件中定義的ICON的ID,可在資源sheet中用自帶工具生成。
CMsg info(IDS_TRAY_VERSION);
wcscpy(m_IconData.szTip, info);
Shell_NotifyIcon(NIM_ADD, &m_IconData);
更多細節可以參考:NOTIFYICONDATA structure,Shell_NotifyIcon
function。多語言
m_hInsChs = LoadLibrary(_T("LangChs.dll")); // LangChs.dll爲某個語言對應的dll。
AfxSetResourceHandle(m_hInsChs);
可以參考文章《Internationalization and Multiple Language Support》,其中包含了一個可運行、測試的Demo。屬性頁對話框
if (!m_initializeDialog.m_hWnd) { // 判斷對話框是否創建。
m_initializeDialog.SetWizardMode(); // 切換到嚮導模式
m_initializeDialog.Create(); // 創建並顯示
} else {
m_initializeDialog.SetForegroundWindow(); // 若已創建,則顯示出來
}
保持文件夾
HANDLE hDir = CreateFileW(dirpath,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_BACKUP_SEMANTICS,
NULL);
細節可參考文檔:CreateFile function。帶顏色的靜態文本框
超鏈接
選擇文件夾對話框
MD5轉碼
附加控制檯
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;