请问如何在应用程序的状态栏响应鼠标?
我要写一个鼠标手写输入识别汉字的程序,一个视图里让鼠标在里面书写,想让识别出的汉字在状态栏输出(可以有多个待选的汉字在不同的pane中),然后让鼠标点击状态栏上不同的pane,让该字符串在另一个视图里输出。可是不知道怎么在状态栏响应鼠标以及如何输出该串,哪位高手最好能给出一段示例的代码~

解决方案 »

  1.   

    从CStatusBar派生CMyStatusBar然后在CMyStatusBar中加入鼠标处理函数。在CMainFrame::OnCreate中创建CMyStatusBar
      

  2.   

    YES DERIVE.
    check codeguru.
      

  3.   


    有个前辈写过这样的代码--》但是他的代码中没有OnUpdateMouseState(CCmdUI* pCmdUI)的
    消息映射,我也不知改写得对不,反正鼠标点上去就出问题了,那位大侠能帮我check一下
    (1)CStatusBar的派生类CToggleBar的定义如下:   class CToggleBar : public CStatusBar   {   // Construction   public:   CToggleBar();   UINT m_nPaneID;   BOOL m_bPaneOn;   //Implementation   public:   virtual ~CToggleBar();   // Generated message map functions   protected:   //{{AFX_MSG(CToggleBar)   afx_msg void OnLButtonDown(UINT nFlags, CPoint point);   //}}AFX_MSG   DECLARE_MESSAGE_MAP()   };   (2)派生类CToggleBar的实现代码如下:   CToggleBar::CToggleBar()   {   m_nPaneID=0;   m_bPaneOn=FALSE;   }   BEGIN_MESSAGE_MAP(CToggleBar, CStatusBar)   //{{AFX_MSG_MAP(CToggleBar)   ON_WM_LBUTTONDOWN()   //}}AFX_MSG_MAP   END_MESSAGE_MAP()   /////////////////////////////////////////////////////////////////////////////   // CToggleBar message handlers   void CToggleBar::OnLButtonDown(UINT nFlags, CPoint point)   {   ASSERT(m_nPaneID!=0); //parent must set this;   //Get the bounding rect for our pane   CRect r;   ASSERT(CommandToIndex(m_nPaneID)!=-1); //this pane must exist   GetItemRect(CommandToIndex(m_nPaneID),&r);   //Toggle the state of m_bPaneOn if the mouse went down in the rectangle   if(r.PtInRect(point))   m_bPaneOn=!m_bPaneOn; //Change the bPaneOn state   CStatusBar::OnLButtonDown(nFlags, point);   }   (3)在框架类CMainFrame的头文件中定义该派生类:   #include "ToggleBar.h"   class CMainFrame : public CFrameWnd   {   protected: //control bar embedded members   CToggleBar m_wndStatusBar;   };   (4)在框架类CMainFrame的实现文件中定义状态栏上状态格的相对位置:   static UINT indicators[] =   {   ......   ID_SEPARATOR,// status line indicator   ......   ID_INDICATOR_MOUSE,//status mouse drag indicator   ......   };   (5)此后,就可以像对待标准的状态栏一样进行初始化:   int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   {   if (CFrameWnd::OnCreate(lpCreateStruct) == -1)   return -1;   if (!m_wndStatusBar.Create(this) ||   !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT)))   {   TRACE0("Failed to create status bar\n");   return -1;// fail to create   }   //注意:下面一句一定要写明,否则会引起程序初始化错误   m_wndStatusBar.m_nPaneID=ID_INDICATOR_MOUSE;   }   (6)以下代码的作用是更新状态条的显示信息   void CMainFrame:: OnUpdateMouseState(CCmdUI* pCmdUI)   {   CString buf;   if(m_wndStatusBar.m_bPaneOn)   buf="Mouse on ";   else   buf="Mouse off";   int nIndex=m_wndStatusBar.CommandToIndex(ID_INDICATOR_MOUSE);   m_wndStatusBar.SetPaneText(nIndex,buf);   }