在状态栏显示信息
状态栏中缺省会显示按键状态和我们当前选择的菜单、工具条的描述信息。我们也可以朝状态栏中显示自己的信息。本文介绍如何在状态栏中显示当前鼠标位置和鼠标所在位置的颜色。
为了显示一个定制消息,我们需要为程序创建一个可以关联更新消息的元素(字符串资源),然后再在状态栏中给它创建对应的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的消息,从而位置和颜色就被显示了。
发表于 @ 2008年03月30日 23:02:00|评论(loading...)|编辑