对话框程序中手工添加的状态栏:
m_wndStatusBar.SetPaneInfo(0,nID,SBPS_NOBORDERS,120);               //返回值存nID中
m_wndStatusBar.SetPaneText(0,sCurDate);

m_wndStatusBar.SetPaneInfo(1,nID,SBPS_NORMAL,80);//这边设为nID:5000
m_wndStatusBar.SetPaneText(1,strTime);

m_wndStatusBar.SetPaneInfo(2,STATUS_ID,SBPS_NORMAL,100);//第三格是要进行单击响应的
m_wndStatusBar.SetPaneText(2,"分栏三");.h中添加:
afx_msg void OnStatus();//状态栏消息响应函数
cpp中添加:
ON_NOTIFY(NM_CLICK ,STATUS_ID, OnStatus)//STATUS_ID定义为5001我想实现状态栏分割成3格,对第三格进行鼠标单击响应
可是这样没效果,该如何实现呢??

解决方案 »

  1.   

    那这个只能通过GetCursorPos来取位置判断了
      

  2.   

    最好集成 CStatusBar然后重写OnLButtonDown函数
      

  3.   

    还有我想知道的是,为什么单击消息响应不了,即使我不分格的话:
    ON_NOTIFY(NM_CLICK ,STATUS_ID, OnStatus)//STATUS_ID定义为5001 
    这个STATUS_ID是不是我们下面创建的这个STATUS_ID
    m_wndStatusBar.SetPaneInfo(2,STATUS_ID,SBPS_NORMAL,100);//
      

  4.   

     不是,这个id应该是statusbar的id,create statusbar时传的是个默认id,你要把这个id换成STATUS_ID 才可以收到notify有消息
      

  5.   

    同一个问题,帮忙看下这个帖子
    http://topic.csdn.net/u/20091225/14/5650c136-9406-4dea-bbf2-8fc6450ba625.html
      

  6.   

    我查了状态栏类和他的父类,和CStatusBarCtrl,没看到相关函数。我估计那个ID是状态栏各pane的内部标识我用spy++看了一下,状态并没有子窗口,
    所以楼主的想法可能实现不了。
      

  7.   

    技术可行,符合你的要求吗?如果符合要求请结贴,如果还有新问题,且有代码需要上传:请把代码压成*.rar当附件发在何丹的论坛上.压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps. 如果不想注册,可用临时号,帐号和密码都是test2
      

  8.   

    参考
     BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 

    // TODO: Add your specialized code here and/or call the base class 
    if(pMsg->message == WM_LBUTTONDOWN && pMsg->hwnd == m_wndStatusBar.GetSafeHwnd()) 

    CRect rect; 
    CPoint pt; 
    pt = pMsg->pt; 
    m_wndStatusBar.GetItemRect(2,&rect); 
    m_wndStatusBar.ClientToScreen(&rect); 
    if(PtInRect(&rect,pt)) 
         //Add your function} 
    return CFrameWnd::PreTranslateMessage(pMsg); 
    }
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fishion/archive/2009/02/19/3908542.aspx
      

  9.   

    m_wndStatusBar.GetItemRect(2,&rect); //红色部分是位置
      

  10.   

    状态栏没有NM_CLICK命令消息,只能响应 WM_LBUTTONDOWN 或 WM_LBUTTONUP 等通用消息,并且需要自己计算出鼠标位于哪个区域。
      

  11.   

    有NM_CLICK命令,可以自定义消息函数
    同时参考11楼给的方法,解决了,