首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 模擬 QQ 2002 介面完整實戰 (下):抽屜選單、訊息視窗、桌面懸掛

     編輯:VC 教學

四、抽屜選單 (動畫滑動 + 音效)

QQ 左側導航欄點擊按鈕,對應面板滑動展開,其他面板收合,配合「刷」音效。

核心邏輯


// 記錄首個/末個按鈕位置
CRect rcFirst, rcLast;
GetDlgItem(IDC_QQFRIEND)->GetWindowRect(&rcFirst); ScreenToClient(&rcFirst);
GetDlgItem(IDC_QQQUN)->GetWindowRect(&rcLast);   ScreenToClient(&rcLast);

void CMyQQDlg::ChangeView(int clickIdx) {
    // clickIdx: 1=好友 2=群組 3=最近聯繫人
    // 計算目標 Y 座標,MoveWindow 動畫移動面板
    // 同時 ShowWindow(SW_SHOW/HIDE) 對應 ListCtrl/TreeCtrl
    // 播放音效: PlaySound(_T("slide.wav"), NULL, SND_ASYNC|SND_RESOURCE);
}

按鈕位置技巧

  • 所有按鈕同寬高,便於統一 `MoveWindow` 計算。
  • 在對話框最上/最下放置不可见 `Picture` 控制項作為邊界參考點。

五、訊息對話框:動態建立 + Ctrl+Enter 發送

動態建立 (模板 + Create)


void CMyQQDlg::OnDblclkFriend(NMHDR* pNMHDR, LRESULT* pResult) {
    NM_LISTVIEW* pLV = (NM_LISTVIEW*)pNMHDR;
    CString name = m_List1.GetItemText(pLV->iItem, 0);

    CQQSendMsg* dlg = new CQQSendMsg;
    dlg->m_strTarget = name;
    dlg->Create(IDD_QQ_MESSAGE); // 模態改為非模態
    dlg->SetWindowText(_T("正在與 ") + name + _T(" 聊天"));
    dlg->ShowWindow(SW_SHOW);
}

Ctrl+Enter 快捷鍵 (PreTranslateMessage)


BOOL CQQSendMsg::PreTranslateMessage(MSG* pMsg) {
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN &&
        (GetKeyState(VK_CONTROL) & 0x8000)) {
        OnSend(); return TRUE;
    }
    return CDialog::PreTranslateMessage(pMsg);
}

六、桌面頂端懸掛 (定時器輪詢)


void CMyQQDlg::OnTimer(UINT_PTR nID) {
    if (nID == TIMER_HANG) {
        CPoint pt; GetCursorPos(&pt);
        CRect rc; GetWindowRect(&rc);
        if (rc.PtInRect(pt)) {
            if (rc.top <= 2) MoveWindow(rc.left, 0, rc.Width(), rc.Height()); // 展開
        } else {
            if (rc.top <= 2) MoveWindow(rc.left, 0, rc.Width(), 3); // 收縮為 3px 細線
        }
    }
    CDialog::OnTimer(nID);
}

完整資源清單

  • 企鵝頭像 100 張 (資源 `IDB_QQFACE_0` ~ `IDB_QQFACE_99`)
  • 介面背景、按鈕三態、音效 `slide.wav`、`msg.wav`
  • 圖示 `IDR_MAINFRAME` (任務列托盤用)

聯繫作者

xuwenq88@126.com — 歡迎交流改進建議。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved