VC++中状态栏上添加坐标显示功能

来源:互联网 发布:知名网红淘宝店有哪些 编辑:程序博客网 时间:2024/05/17 07:53

本程序是基于VC6.0  MFC SDI写。

CMainFrame中:

1.         添加窗格:先在String Table里面先定义ID_INDICATOR_POINT,然后将其到状态栏各窗格标志的数组indicators中:

static UINT indicators[] =

{

       ID_SEPARATOR,           // status line indicator,状态提示

       ID_SEPARATOR,//状态栏内空窗格

       ID_INDICATOR_POINT,//光标的坐标

       ID_INDICATOR_CAPS,//大小写状态

       ID_INDICATOR_NUM,//数字

       ID_INDICATOR_SCRL,//滚动

};

 

2.         OnCreate中,添加:

      m_wndStatusBar.SetPaneInfo(0,0,SBPS_POPOUT,100);

      m_wndStatusBar.SetPaneInfo(1,ID_SEPARATOR,SBPS_POPOUT,120);

 

//状态栏要输出标题提示的窗格

      m_wndStatusBar.SetPaneInfo(2,ID_INDICATOR_POINT,SBPS_STRETCH,120);

3.         添加命令更新消息,更新状态栏(此函数必须添加,不然状态栏不显示坐标)

MainFrame.h中添加:

afx_msg void OnUpdatePane (CCmdUI *pCmdUI);

MainFrame.cpp中添加

映射:

       ON_UPDATE_COMMAND_UI(ID_INDICATOR_POINT,OnUpdatePane)

响应函数:

void CMainFrame::OnUpdatePane(CCmdUI *pCmdUI)

{

    pCmdUI->Enable();

}

4.         在视类添加MW_MOUSEMOVE消息响应函数,并其中添加代码,显示坐标

void CXXView::OnMouseMove(UINT nFlags, CPoint point)

{

    // TODO: Add your message handler code here and/or call default

    CClientDC dc(this);

    CString str;

 

    CMainFrame *pMainFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;

    CStatusBar *pStatus = &(pMainFrame->m_wndStatusBar);

    if (pStatus)

    {

           str.Format("x=%d,y=%d",point.x,point.y);

           BOOL bRtn =pStatus->SetPaneText(2,str);

 

//               str.Format("x=%d,y=%d",point.x,point.y);

//              CSize size=dc.GetTextExtent(str);  

//               int nIndex=pStatus->CommandToIndex(ID_INDICATOR_POINT);  

//        pStatus->SetPaneInfo(nIndex,ID_INDICATOR_POINT,SBPS_NORMAL,size.cx*2);  

//               pStatus->SetPaneText(nIndex,str); (若在OnCreate中没添加上面所说的代码,则可以用这部分代码,功能一样)

    }

 

    CView::OnMouseMove(nFlags, point);

}

 

 

5.         总结

总的过程就是,添加窗格标识ID,然后用SetPaneInfoSetPaneText设置并显示需要的信息,最后,一定要添加标识ID的更新命令响应函数,不然,得不到预期的结果。

 

同样,对于状态栏上显示时间,也一样的,添加窗格标识,然后添加WM_TIMER消息并在其响应函数中添加对于的代码,最后同样需要添加命令更新函数。