为什么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
我的对话框里只含有一个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
相关文章推荐
- MFC中CEdit控件使用SetSel无法取消全选状态解决办法
- ORA-22992: 无法使用从远程表选择的 LOB 定位器
- IK 分词器 2012 FF 版本取消了 org.wltea.analyzer.solr.IKTokenizerFactory 类【导致只能使用ik分词器来进行分词,无法使用solr自带的其它过滤方式
- 为什么我无法使用live writer写csdn的博客
- LINUX下的mail\mailx为什么无法使用外部SMTP发邮件
- 为什么CEdit::WndProc无法拦截WM_KEYDOWN使,CEdit不显示字符
- 为什么如今超过一半的IT经理选择使用DCIM?
- 为什么在Windows 2003上有时候无法使用WiseInstall制作的卸载程序?
- oracle ORA-22992 无法使用从远程表选择的 LOB 定位器
- 为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
- "ORA-22992: 无法使用从远程表选择的 LOB 定位器"解决方法
- bootstrap-datepicker 与bootstrapValidator同时使用时,选择日期后,无法正常触发校验
- (WebSite----Asp.Net Configuration----->无法连接到SQL Server数据库------>选择数据存储区---->应用程序当前被配置为使用提供程序:AspNetSqlProvider)解决方案
- 嵌入式c语言 之数据结构:为什么嵌入式要选择c语言? *c的可移植性好:能在不同平台的结构访问硬件 *c具有简洁紧、使用灵活的语法机制,并能直接访问硬件。 *c具有高效的运行效率
- ORACLE "ORA--22992:无法使用远程表选择的LOB定位器,database link"
- 为什么使用ADO Data控件的Delete方法无法删除DataGrid控件中的数据
- 在link.c中已经include了头文件了,为什么使用ld还无法识别mian和printf?
- 解决oracle dblink中无法使用从远程表选择的lob定位器的问题
- Qt : QScrollArea的使用,解答为什么无法出现滚动条.
- 为什么我选择使用 Blocks(块)