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

VC++ 精華教程:MFC 入門系列(五)—— 工具欄響應、滑鼠座標與字串表

     編輯:VC++

作者:zhoujiamurong | 郵箱:zhoujiamurong@163.com
版權所有,轉載請聯繫作者。

前言

接上節,工具欄與狀態欄外觀已就緒,本節實現:

  1. 工具欄按鈕消息響應(並順便啟用按鈕)
  2. 狀態欄顯示滑鼠即時座標
  3. 添加字串表讓鎖定鍵指示器生效

1. 工具欄按鈕消息映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    ON_WM_LBUTTONDOWN()
    ON_COMMAND(ID_DISPLAY_UP, OnUp)
    ON_COMMAND(ID_DISPLAY_DOWN, OnDown)
    ON_COMMAND(ID_DISPLAY_LEFT, OnLeft)
    ON_COMMAND(ID_DISPLAY_RIGHT, OnRight)
END_MESSAGE_MAP()

// 處理函數(無參數,返回 void)
void OnUp()   { ::MessageBox(NULL, _T("Up"), _T("消息"), MB_OK); }
void OnDown() { ::MessageBox(NULL, _T("Down"), _T("消息"), MB_OK); }
void OnLeft() { ::MessageBox(NULL, _T("Left"), _T("消息"), MB_OK); }
void OnRight(){ ::MessageBox(NULL, _T("Right"), _T("消息"), MB_OK); }

效果:加上映射後,工具欄按鈕從灰色變為可用狀態,點擊彈出對話框。

2. 狀態欄顯示滑鼠座標

步驟 1:擴展狀態欄窗格

UINT statusIDs[] = { 0, 0, ID_INDICATOR_NUM, ID_INDICATOR_CAPS }; // 新增一個窗格
m_wndStatusBar.SetIndicators(statusIDs, 4); // 數量改為 4

步驟 2:添加滑鼠移動消息映射

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    // ... 既有映射 ...
    ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

步驟 3:實現 OnMouseMove

void OnMouseMove(UINT nFlags, CPoint point) {
    // point 為相對窗口左上角的座標 (CPoint 繼承自 tagPOINT 結構)
    CString str, strX, strY;
    strX.Format(_T("%d"), point.x);
    strY.Format(_T("%d"), point.y);
    str = _T("X: ") + strX + _T("  Y: ") + strY;
    
    // 設置第 1 索引窗格(第 2 個窗格,0 為主窗格)
    m_wndStatusBar.SetPaneText(1, str, TRUE);
}

運行程序,移動滑鼠,狀態欄即時顯示座標,類似畫圖軟體。

3. 字串表讓鎖定鍵指示器工作

資源視圖 → String Table → 添加兩項:

  • ID: ID_INDICATOR_NUM, Caption: NUM
  • ID: ID_INDICATOR_CAPS, Caption: CAP

按下 NumLock / CapsLock,狀態欄對應窗格即顯示「NUM」「CAP」。

總結

本節完成了工具欄交互、狀態欄動態信息顯示與系統鍵盤狀態指示。下一節進入 GDI 繪圖,實現簡單繪圖程序。

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