在状态栏显示信息

在状态栏显示信息

 状态栏中缺省会显示按键状态和我们当前选择的菜单、工具条的描述信息。我们也可以朝状态栏中显示自己的信息。本文介绍如何在状态栏中显示当前鼠标位置和鼠标所在位置的颜色。

为了显示一个定制消息,我们需要为程序创建一个可以关联更新消息的元素(字符串资源),然后再在状态栏中给它创建对应的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的消息,从而位置和颜色就被显示了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值