VC++中状态栏操作

来源:互联网 发布:js原生获取表单的值 编辑:程序博客网 时间:2024/05/21 06:16

如何操作状态栏

为在状态栏中显示正确的信息,曾为此绞尽脑汁,在网上查找及在相关书籍上看到一些方法,我归纳出两种方法

1. 状态栏的创建使用应用向导生成如下:
 CStatusBar  m_wndStatusBar;
;
  if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create bar!");
   return FALSE;
  }

 用响应消息的方法

 要响应的消息有WM_MENUSELECT,WM_SETMESSAGESTRING两个私有消息,
 看下面的源代码
 第一个消息的响应函数
 void  CMainFrame::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSystemMenu)
{
 CString sFileName;
 if(nItemID == AFX_IDS_IDLEMESSAGE){
  sFileName = "就绪";

  // Set prompt in status bar.
  SendMessage(WM_SETMESSAGESTRING, (WPARAM)0, (LPARAM)(LPCTSTR)sFileName);
  return;
 }
 if(nFlags & MF_SEPARATOR)
  return;
 if(nFlags & (MF_SYSMENU | MF_POPUP))
  return;

 sFileName = "菜单提示";

 // Set prompt in status bar.
 SendMessage(WM_SETMESSAGESTRING, (WPARAM)0, (LPARAM)(LPCTSTR)sFileName);
}

 第二个消息响应函数
 LRESULT CMainFrame::OnSetMessageString(WPARAM wParam, LPARAM lParam)
{
 ...
 CWnd* pMessageBar = GetMessageBar();  //  获取状态栏窗口指针
 if (pMessageBar != NULL)
 {
  LPCTSTR lpsz = NULL;
  CString strMessage;
  ...
         
         // Set text of status bar
  pMessageBar->SetWindowText(lpsz);  //  显示状态栏信息
 }
 ...
}
 
 其它地方要在状态栏中显示信息,发送WM_SETMESSAGESTRING消息,将信息字符串作为参数传递即可

例如:在视图窗口中发送消息::SendMessage(AfxGetMainWnd()->m_hWnd, WM_SETMESSAGESTRING, 0, (LPARAM)(LPCTSTR)str);


 
2. 使用CStatusBar类的成员函数SetPaneText显示指定的消息
 创建 CStatusBar  m_wndTipsBar变量
 创建自己的状态提示栏
 if (!m_wndTipsBar.Create(this, WS_CHILD|WS_VISIBLE|CBRS_BOTTOM, ID_SLSTATUS_BAR) || 
  !m_wndTipsBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
  {
   TRACE0("Failed to create bar!");
   return FALSE;
  }
 设置第二个小方格的宽度, 自己定义的消息将在此方格中显示
 m_wndTipsBar.SetPaneInfo(1, ID_SEPARATOR, SBPS_NORMAL, 400);
 第一个小方格显示系统定义的消息
 如在上述的WM_SETMESSAGESTRING消息响应函数中有下面的语句
 CStatusBar* pBar = &m_wndTipsBar;
 
 GetMessageString(wParam, strMessage);  
 lpsz = strMessage;
        // Set text of status bar
 pBar->SetPaneText(0, lpsz);
 
 其它地方要在状态栏中显示信息,用如下语句
 CStatusBar* pBar = (CStatusBar*)&pFrame->m_wndTipsBar;
 pBar->SetPaneText(1, (LPCTSTR)str1.GetBuffer(256));
 

原创粉丝点击