请问如何在应用程序的状态栏响应鼠标?
我要写一个鼠标手写输入识别汉字的程序,一个视图里让鼠标在里面书写,想让识别出的汉字在状态栏输出(可以有多个待选的汉字在不同的pane中),然后让鼠标点击状态栏上不同的pane,让该字符串在另一个视图里输出。可是不知道怎么在状态栏响应鼠标以及如何输出该串,哪位高手最好能给出一段示例的代码~
我要写一个鼠标手写输入识别汉字的程序,一个视图里让鼠标在里面书写,想让识别出的汉字在状态栏输出(可以有多个待选的汉字在不同的pane中),然后让鼠标点击状态栏上不同的pane,让该字符串在另一个视图里输出。可是不知道怎么在状态栏响应鼠标以及如何输出该串,哪位高手最好能给出一段示例的代码~
check codeguru.
有个前辈写过这样的代码--》但是他的代码中没有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); }