zoukankan      html  css  js  c++  java
  • 为什么CEdit使用SetSel无法取消选择?

    问题背景:

         我的对话框里只含有一个CEdit 控件,在对话框初始化时,我会载入外部文件的内容到Edit控件中。

         在代码中我明明正确调用了CEdit的SetSel方法,但是对话框显示时,CEdit控件里还是全选显示,而不是我想的没有选中内容的显示。

    代码如下:

    BOOL CXXXDialog::OnInitDialog()
    {
     CDialog::OnInitDialog();

     LoadFile();
     return TRUE;
    }

    // 载入文件
    void CXXXDialog::LoadFile(void)
    {
     if (m_strFileName.IsEmpty())
      return;

     try{
      
      CEdit *pEdit = (CEdit *)GetDlgItem(IDC_EDIT_CONTENT);
     
      CStdioFile file(m_strFileName,CFile::modeRead);
        
      CString strFileLine=_T("");
      int nLen=0;
      while (file.ReadString(strFileLine))
      {
       strFileLine += _T("\n");

       nLen=pEdit->GetWindowTextLength();
       pEdit->SetSel(nLen,nLen);
       pEdit->ReplaceSel(strFileLine);

      }
       pEdit->SetSel(-1,0);
     }
     catch (CFileException *e){
      e->ReportError();
      e->Delete();
     } 

    }

    非常疑惑,试了很多方法,没有达到我想要的效果,经过多次google 才找到相似问题的解决方法,其实是CEdit的默认特性造成的,而不是CEdit的SetSel方法有问题,  在 OnInitDialog() 中调用的SetSel(-1,0) 取消选择是被系统正确处理的,只是CEdit是对话框的的第一个有焦点的控件,所以对话框显示时CEdit 得到了焦点,CEdit 控件得到焦点的默认处理方式就是全选,所以就看到上面所说的情况。

    解决方法有多种:

    1、CEdit 的 TABSTOP 不要选

    2、加入CEdit 得到焦点事件的处理

    void CXXXDialog::OnSetfocusEdit1()
    {
       ((CEdit *)GetDlgItem(IDC_EDIT1))->SetSel(-1, 0, false);

    }

    参考:

    http://www.experts-exchange.com/Programming/System/Windows__Programming/MFC/Q_21136277.html

    关键字:

    CEdit remove selection

  • 相关阅读:
    POJ1661 Help Jimmy
    POJ2533 Longest ordered subsequence
    数字三角形
    第四章 指令系统
    栈和队列
    第三章 存储器的层次结构
    线性表—概念总结及代码示例
    数据的表示和运算
    计算机系统概述
    树-概念性总结及代码示例
  • 原文地址:https://www.cnblogs.com/finema/p/2029006.html
Copyright © 2011-2022 走看看