QQ 作為國民級即時通訊軟體,其界面交互設計極具參考價值。本系列將分上、下兩篇,詳細記錄如何使用 VC++ MFC 從零開始模擬 QQ 核心界面功能。上篇著重於資源獲取、登入界面剖析、任務列圖示動態顯示等基礎建設。
QQ 安裝目錄下的 QQface 資料夾包含所有頭像圖片。使用 Resource Hacker 對 QQ.exe 進行資源導出,可獲得完整的 .ico 圖示檔,免去自行繪製之苦。
QQ 登入時,任務列圖示會在「離線/隱身/上線」狀態間閃爍切換。此效果可透過 Shell_NotifyIcon API 實現:
NOTIFYICONDATA nid;
void CMyQQDlg::DisplayInTask()
{
if (isDisplayInTask) {
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;
nid.uID = IDR_QQMENU;
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
nid.hIcon = m_hIcon;
lstrcpy(nid.szTip, _T("任務列圖示"));
nid.uCallbackMessage = WM_DISPLAYTASKICON;
Shell_NotifyIcon(NIM_ADD, &nid);
isDisplayInTask = FALSE;
} else {
Shell_NotifyIcon(NIM_DELETE, &nid);
isDisplayInTask = TRUE;
}
}
// 在 OnInitDialog 中觸發閃爍模擬
isDisplayInTask = TRUE;
DisplayInTask(); Sleep(500);
OnOutline(); Sleep(500);
OnHidden(); Sleep(500);
OnOutline(); Sleep(500);
OnHidden();
Shell_NotifyIcon 支援 NIM_ADD、NIM_MODIFY、NIM_DELETE 三種操作,配合 Sleep 或計時器即可產生閃爍效果。
QQ 支援 Ctrl+Alt+Z 快速呼出主面板,此需註冊全域熱鍵(RegisterHotKey)並在托盤選單中對應處理。
下篇將重點實現以下模組:

界面模擬的關鍵在於「觀察細膩、邏輯嚴密、實現靈活」。本文奠定的資源基礎與架構規劃,為後續核心模組開發鋪平道路。完整原始碼請參考知識庫下載。