none
VC焦点问题!拜托了! RRS feed

  • 问题

  • 我在PreTranslateMessage加入了:

     if(WM_MOUSEMOVE == pMsg->message)
     {
      POINT cursorpos;
      GetCursorPos(&cursorpos);
      
      CWnd *hwnd=WindowFromPoint(cursorpos);
      
      if (GetDlgItem(IDC_BUTTON_LOGIN)||GetDlgItem(IDC_BUTTON_CANCEL)==hwnd)
      {
       if (GetDlgItem(IDC_BUTTON_LOGIN)==hwnd)
       {
        GetDlgItem(IDC_BUTTON_LOGIN)->SetFocus();
       }
       else GetDlgItem(IDC_BUTTON_CANCEL)->SetFocus();
      }
      else GetDlgItem(IDC_STATIC0)->SetFocus();
     }

    我希望当鼠标移动到我的按钮时,就设置该按钮为焦点。不在按钮上的时候,就将焦点给予STATIC0。

    按理说,上面的代码已经实现这些功能了,可是如果我之前鼠标在某按钮移动过,当我再把鼠标移出按钮时,焦点依旧在原按钮上。研究了俩钟头了,求高人相助!

    2012年2月19日 1:57

答案

  • BOOL CXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	CButton* pButtonLogin = (CButton*)GetDlgItem(IDC_BUTTON_LOGIN);
    	CButton* pButtonCancel = (CButton*)GetDlgItem(IDC_BUTTON_CANCEL);
    	CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC0);
    	ASSERT(pButtonLogin && pButtonLogin->GetSafeHwnd());
    	ASSERT(pButtonCancel && pButtonCancel->GetSafeHwnd());
    	ASSERT(pStatic && pStatic->GetSafeHwnd());
    
    	if(WM_MOUSEMOVE == pMsg->message)
    	{
    		CWnd* pWnd = WindowFromPoint(pMsg->pt);
    		if(pWnd && pWnd->GetSafeHwnd())
    		{
    			if(pWnd->GetSafeHwnd() == pButtonLogin->GetSafeHwnd())
    			{
    				pButtonLogin->SetFocus();
    			}
    			else if(pWnd->GetSafeHwnd() == pButtonCancel->GetSafeHwnd())
    			{
    				pButtonCancel->SetFocus();
    			}
    			else
    			{
    				pStatic->SetFocus();
    			}
    		}
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年2月21日 8:24
    • 已标记为答案 yshkcj 2012年2月24日 23:46
    2012年2月19日 5:30
    版主

全部回复

  • BOOL CXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    	CButton* pButtonLogin = (CButton*)GetDlgItem(IDC_BUTTON_LOGIN);
    	CButton* pButtonCancel = (CButton*)GetDlgItem(IDC_BUTTON_CANCEL);
    	CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC0);
    	ASSERT(pButtonLogin && pButtonLogin->GetSafeHwnd());
    	ASSERT(pButtonCancel && pButtonCancel->GetSafeHwnd());
    	ASSERT(pStatic && pStatic->GetSafeHwnd());
    
    	if(WM_MOUSEMOVE == pMsg->message)
    	{
    		CWnd* pWnd = WindowFromPoint(pMsg->pt);
    		if(pWnd && pWnd->GetSafeHwnd())
    		{
    			if(pWnd->GetSafeHwnd() == pButtonLogin->GetSafeHwnd())
    			{
    				pButtonLogin->SetFocus();
    			}
    			else if(pWnd->GetSafeHwnd() == pButtonCancel->GetSafeHwnd())
    			{
    				pButtonCancel->SetFocus();
    			}
    			else
    			{
    				pStatic->SetFocus();
    			}
    		}
    	}
    	return CDialog::PreTranslateMessage(pMsg);
    }


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已建议为答案 Helen Zhao 2012年2月21日 8:24
    • 已标记为答案 yshkcj 2012年2月24日 23:46
    2012年2月19日 5:30
    版主
  • 你通过什么判断焦点没有移走的

    你的静态控件能获得焦点么

    换个其他控件用相同的方法试试


    新浪微博http://weibo.com/xianglitian,欢迎围观

    2012年2月20日 0:33