作者:zhoujiamurong | 郵箱:zhoujiamurong@163.com
版權所有,轉載請聯繫作者。
接上節,工具欄與狀態欄外觀已就緒,本節實現:
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); }
效果:加上映射後,工具欄按鈕從灰色變為可用狀態,點擊彈出對話框。
UINT statusIDs[] = { 0, 0, ID_INDICATOR_NUM, ID_INDICATOR_CAPS }; // 新增一個窗格
m_wndStatusBar.SetIndicators(statusIDs, 4); // 數量改為 4
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
// ... 既有映射 ...
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
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);
}
運行程序,移動滑鼠,狀態欄即時顯示座標,類似畫圖軟體。
資源視圖 → String Table → 添加兩項:
ID_INDICATOR_NUM, Caption: NUMID_INDICATOR_CAPS, Caption: CAP按下 NumLock / CapsLock,狀態欄對應窗格即顯示「NUM」「CAP」。
本節完成了工具欄交互、狀態欄動態信息顯示與系統鍵盤狀態指示。下一節進入 GDI 繪圖,實現簡單繪圖程序。