MFC中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);

}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值