您的位置:首页 > 其它

为什么CEdit使用SetSel无法取消选择?

2011-04-26 11:16 281 查看
问题背景:

我的对话框里只含有一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐