孙鑫VC++深入详解:Lesson9 Part7---在状态栏中显示鼠标的位置

1. 要在View中捕获WM_MOUSEMOVE消息,而不是在FRAME中,因为框架被VIEW类覆盖了.

2. 在CMainFrame中       public: CStatusBar  m_wndStatusBar; // 设置为public,一边view中访问

四种方式:

void CStyleView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
      
	    CString str;  
		str.Format("x=%d,y=%d",point.x,point.y);//格式化str

//------方式一:m_wndStatusBar.SetWindowText(str)
   //((CMainFrame*)GetParent())->m_wndStatusBar.SetWindowText(str);

	
//------方式二:用CMainFrame的成员函数 SetMessageText(),它唯一的用途就是在ID为0的状态栏的pane上设置text
	//((CMainFrame*)GetParent())->SetMessageText(str);

	
//------方式三:用CMainFrame的成员函数GetMessageBar()
		//((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);

//------方式四:用CWnd的成员函数GetDescendantWindow(),查找指定ID的子窗口
		GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR,FALSE)->SetWindowText(str);
	
	CView::OnMouseMove(nFlags, point);
}

GetDescendantWindow() 函数中涉及到一个所谓的永久性窗口和临时窗口的概念,需要搞清楚.

CWnd* GetDescendantWindow( int nID, BOOL bOnlyPerm = FALSE ) const;

Return Value

A pointer to a CWnd object, or NULL if no child window is found.

Parameters

nID

Specifies the identifier of the control or child window to be retrieved.

bOnlyPerm

Specifies whether the window to be returned can be temporary. If TRUE, only a permanent window can be returned; if FALSE, the function can return a temporary window. For more information on temporary windows see Technical Note 3.

Remarks



//---

//---孙鑫VC++深入详解:Lesson9 Part7---在状态栏中显示鼠标的位置_第1张图片

你可能感兴趣的:(孙鑫VC++深入详解(修订版))