在CMyDocument中得到状态栏的指针后,是不是直接用SetPaneText()就可以在状态栏显示文字了?

解决方案 »

  1.   

    在mainframe中将其设为公有变量。。
    在doc中包含mainframe的头文件后用AfxGetMainWnd()并将这个指针强行转为CMainframe*
      

  2.   

    CMainframe* pFrame=(CMainframe*)AfxGetMainWnd();
    pFrame->m_wndStatusBar
      

  3.   

    CMainframe* pFrame=(CMainframe*)AfxGetMainWnd();
    pFrame->m_wndStatusBar
      

  4.   

    照各位说的作了,还是有点问题
    在CMyDoc::OnNewDocument()中加入CMainframe* pFrame=(CMainframe*)AfxGetMainWnd();
    pFrame->m_wndStatusBar.SetPaneText(0,"Connecting to DB ");可是状态栏没有什么变化呀,还是“就绪”两个字
      

  5.   

    MFC在空闲时间会自动把状态栏设为"就绪"
      

  6.   

    当然了,在默认状态下,状态栏的各栏都已用作特殊用途。上面的文字随时都会自动更改,将下面的ID分别改成你自己在String Table定义的ID才行。static UINT indicators[] =
    {
    ID_SEPARATOR,           // status line indicator
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
    };
      

  7.   

    应该这样:
    CStatusBar* pStatus;pStatus = (CStatusBar*)AfxGetApp()->m_pMainWnd->GetDescendantWindow
    (AFX_IDW_STATUS_BAR)//获取状态栏窗口指针然后你再:
     pStatus->SetPaneText(0,"Connecting to DB ");试试看
      

  8.   

    按照hnyyy(前进)的方法试了一下,的确可以在状态栏上显示文字了,只是所有状态栏上的pane都缩到左边去了,估计只占状态栏长度的十几分之一,这是什么原因啊?
      

  9.   

    abcd_efg(风雪中永生) :
    那是因为MFC的代码里面,把状态栏的默认得第一格的分格加上了SBPS_STRETCH,这样可以伸缩第一格,但是修改成你自己的之后就没有这个分格了,所以后面的pane都跑上前来了。你可以试试这个:
    把它加在CMainFrame::OnCreate函数创建状态栏的后面
    m_wndStatusBar.GetPaneInfo();
    DWORD dwStyle = m_wndStatusBar.GetPaneStyle(2);
    dwStyle |= SBPS_STRETCH | SBPS_NOBORDERS;
    m_wndStatusBar.SetPaneStyle(0,dwStyle);