在状态栏显示信息
状态栏中缺省会显示按键状态和我们当前选择的菜单、工具条的描述信息。我们也可以朝状态栏中显示自己的信息。本文介绍如何在状态栏中显示当前鼠标位置和鼠标所在位置的颜色。
为了显示一个定制消息,我们需要为程序创建一个可以关联更新消息的元素(字符串资源),然后再在状态栏中给它创建对应的pane,最后,通过WM_UPDATE_COMMAND_UI修改信息。具体步骤如下:
1. 创建两个字符串资源,分别给予IDS_LOCATION, IDS_COLOR作为其ID,两个字符串资源分别设置初始值0 x 0和(0,0,0)作为位置和颜色的初始值。
2. 在视图类中定义两个CString对象,用于记录位置和颜色信息
CString g_szLocation
=
_T(
"
0x0
"
);
CString g_szColor
=
_T(
"
(0,0,0
"
);
3. 在视图类中增加WM_MOUSEMOVE消息的处理
void
CMyView::OnMouseMove(UINT nFlags, CPoint point)
...
{
// TODO: Add your message handler code here and/or call default
g_szLocation.Format(_T("%3d x %3d "),point.x,point.y);
CDC * pDC = GetDC();
COLORREF color = pDC->GetPixel(point.x, point.y);
g_szColor.Format(_T("(%03d,%03d,%03d)"), GetRValue(color), GetGValue(color), GetBValue(color));
CView::OnMouseMove(nFlags, point);
}
4. 在CMainFrame窗口的cpp文件中添加对这两个变量的声明
extern
CString g_szLocation;
extern
CString g_szColor ;
5. 在CMainFrame实现文件中修改indicators数组的定义,把IDS_LOCATION ,IDS_COLOR加入其中
static
UINT indicators[]
=
...
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
IDS_LOCATION,
IDS_COLOR
}
;
6. 在CFrameWnd::OnCreate函数中状态栏被创建后的代码处插入如下两行
m_wndStatusBar.SetPaneInfo (
4
, IDS_LOCATION, SBPS_NORMAL ,
120
);
m_wndStatusBar.SetPaneInfo (
5
, IDS_COLOR, SBPS_NORMAL ,
120
);
其中4,5分别是IDS_LOCATION, IDS_COLOR在indicators数组中的下标。
7. 在CMainFrame类中添加两个WM_UPDATE_COMMAND_UI消息的处理函数
void
CMainFrame::OnUpdateLocation(CCmdUI
*
pCmd)
...
{
pCmd->SetText (g_szLocation);
}
void
CMainFrame::OnUpdateColor(CCmdUI
*
pCmd)
...
{
pCmd->SetText (g_szColor);
}
8.在CFrameWnd消息映射节插入对IDS_COLOR,IDS_LOCATION的更新消息映射
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//
{{AFX_MSG_MAP(CMainFrame)
//
NOTE - the ClassWizard will add and remove mapping macros here.
//
DO NOT EDIT what you see in these blocks of generated code !
ON_WM_CREATE()
//
}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI(IDS_LOCATION,OnUpdateLocation)
ON_UPDATE_COMMAND_UI(IDS_COLOR,OnUpdateColor)
END_MESSAGE_MAP()
这样,当鼠标移动后,g_szLocation, g_szColor就会被更新,进而触发了对IDS_COLOR, IDS_LOCATION的WM_UPDATE_COMMAND_UI的消息,从而位置和颜色就被显示了。