我的应用程序是一个MFC SDI应用程序,我使用到了一个CFormView,这个CFormView会在多个地方用到,我想在某个用到的地方将CFormView上的光标隐藏起来,目的是使用户不可以修改CFormView里面的数据(如果用在CFORMVIEW中将控件全部DISABLE,就不好看)。请问怎么现实?如果用ShowCursor(FALSE)的话, 它是基于线程的,就会造成整个应用程序都没有光标了。

解决方案 »

  1.   


    BOOL CYourFormView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
    {
      return true;
    }
      

  2.   

    zhucde?BOOL CYourFormView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
    {
      return true;
    }
    是什么意思?根本就没有作用啊?
      

  3.   

    感觉楼主要隐藏的是编辑框里的插入符(Caret)而不是光标(Cursor),因为实在想不明白光标和是否能修改数据有什么关系。请楼主确认。
      

  4.   

    HideCaret 也不行啊.这只是隐藏了控件的光标,但是用户还是可以修改数据的.
      

  5.   

    Ctrl+W调出类向导,重载WM_SETCUSOR消息,生成 函数:
    BOOL CYourFormView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 在里面直接return 1;
      

  6.   

    TO zhucde
    试过了.没有用啊? 是不要还有其他的实现. 比如要不要在那里实现ShowCursor(FALSE)什么的?
      

  7.   

    TO dandycheung(珠穆朗玛) 设置为只读也是个好办法, 但为什么我在 CBasicInfoView::OnInitialUpdate() 中写 this->HideCaret() 好像插入符根本就没有隐藏到啊?
      

  8.   

    TO dandycheung(珠穆朗玛) 像 CComboBox与CDateTimeCtrl 没有只读属性的该怎么处理?谢谢!
      

  9.   

    重载PreTranslateMessageBOOL CFormViewTestView::PreTranslateMessage(MSG* pMsg) 
    {
    CWnd * pWnd3 = GetDlgItem(IDC_EDIT1);// 你的控件ID
    if(GetFocus()==pWnd3)
    {
    if(pMsg->message==WM_KEYDOWN)
    return 1;//禁止输入

    } return CFormView::PreTranslateMessage(pMsg);
    }
      

  10.   

    TO zhucde(【風間苍月重载PreTranslateMessage 那还不如设置CEdit的属性为SetReadOnly(),是不是?另外重载
     BOOL CYourFormView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 在里面直接return 1;  在我的程序里这样写好像没有一点什么效果喔
      

  11.   

    直接把你的FormView不使能,这样控件还是以前的样子,不过就是不能控制了。假设你的view:
    CFormView m_pView;m_pView->EnableWindow(FALSE);
      

  12.   

    想要恢复的时候再EnableWindow(TRUE)即可。
      

  13.   

    先回答你的那个 HideCaret() 的问题吧。Edit 控件在只读时系统并不隐藏它的插入符,而且使用 HideCaret() 也不能奏效。不过办法还是有的,如果你用 SPYXX 查看过 Edit 窗口的消息流,就会发现插入符的闪烁总是伴随一个 0x0118 的消息,Edit 控件在对此消息的处理中会控制插入符的显示/隐藏,你处理此消息,不调用默认处理即可。之所以对于 Edit 不推荐你使用禁止的方法,是因为它禁止以后背景会变成灰色,看起来不美观。至于其他的控件,那就见仁见智了,你可以不让它们响应鼠标消息和/或键盘消息。需要注意的是下拉框有一种模式里是有一个编辑框的。
      

  14.   

    谢谢 littlepboy(vc小p孩)用你的方法非常适合我想要的效果.马上结贴