鼠标(光标)不能选取CEdit中的文本内容???

时间:2021-09-14 05:49:15
鼠标(光标)不能选取CEdit中的文本内容???

好奇怪~我通过移动(MoveWindow())放在ClistCtrl中的子项上的一个CEdit框~输入文本后不能用鼠标(光标)选取 那文本~(选取后显示蓝地白字那种)

void CSheetPage::OnLvnItemActivateListFenxi(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMIA = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);

if (pNMIA->iItem > iAllLineNum - 2 )
{
if (pNMIA->iSubItem <1)
return;

CRect rcCtrl;
Listfenxi.GetSubItemRect(pNMIA->iItem,pNMIA->iSubItem,LVIR_LABEL,rcCtrl);

rcCtrl.MoveToXY(rcCtrl.left+2 ,rcCtrl.top + 2);//可以不用

if(!m_edit)//初始化一次~
{
m_edit.Create(WS_CHILD|ES_CENTER|ES_WANTRETURN//|ES_NUMBER|
,CRect(0,0,0,0),this,IDC_EDIT_LIST);

CFont   tpFont; 
tpFont.CreateStockObject(DEFAULT_GUI_FONT ); 
m_edit.SetFont(&tpFont); 
tpFont.DeleteObject(); 
}

m_edit.ShowWindow(SW_HIDE); 
CString   strItem   =   Listfenxi.GetItemText(pNMIA->iItem,pNMIA->iSubItem); 
m_edit.MoveWindow(rcCtrl); 
m_edit.ShowWindow(SW_SHOW); 
m_edit.SetWindowText(strItem); 
::SetFocus(m_edit.GetSafeHwnd()); 
m_edit.SetSel(10,10);  

m_iedit    = pNMIA->iItem;
m_isubedit = pNMIA->iSubItem;
}
*pResult = 0;
}
这个是双击列表项后激发的涵数

iAllLineNum为全局列表总行数~
其中CEdit m_edit;声明在对应的头文件上
CListCtrl Listfenxi;
其他的都无关系拉` ~

就算我不用m_edit.Create(..
用m_edit.SubClassDlgItem(IDC_EDIT_LIST,this)之后都不可以选取内容~


WHY啊~~那里问题?

如果就普普通通的放个CEdit在对话框中就可以用鼠标(光标)选取那文本了~

10 个解决方案

#1


我补充多个涵数~
ON_EN_KILLFOCUS(IDC_EDIT_LIST, &CSheetPage::OnEnKillfocusEditList)
...
void CSheetPage::OnEnKillfocusEditList()
{
CString   strText(_T( " ")); 
m_edit.GetWindowText(strText); 
m_edit.ShowWindow(SW_HIDE);

Listfenxi.SetItemText(m_iedit,m_isubedit ,strText); 

}
当CEDIT失去焦点时,写入值到CListCtrl Listfenxi; 

#2


创建Edit时指定其父窗口为ListCtrl。

#3


SetFocus()呢?

#4


引用 2 楼 cnzdgs 的回复:
创建Edit时指定其父窗口为ListCtrl。

同意!!用这个什么问题都解决了,生成的差不多就是个记事本!!!

#5


引用 2 楼 cnzdgs 的回复:
创建Edit时指定其父窗口为ListCtrl。


mark

#6


o ?我想问下已知道对象CListCtrl Listfenxi ; 如何返回Listfenxi他的Cwnd* 啊?
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd* 
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList() 
没有被激发~

难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??

#7


有其他方法吗?直接用对象名返回的那种~ 
--------
((CListCtrl*)&Listfenxi)->

#8


啊啊~原来这样?
我还一直以为是
Listfenxi.**() 这样的形式~

我这程序是要求可以任意编辑列表的最下面两行的~
现在的CEdit改为了(CListCtrl*)
在对话框就不能捕捉CEDIT的OnEnKillfocus了怎样办?难道如我上说?

在对话框中如何捕捉啊?

#9


EN_KILLFOCUS是Edit发给其父控件的,你可以自己派生CListCtrl类来响应。

#10


恩~看来想要用鼠标选取文本就要重载类了~这里重载CEDIT类都可以的吧~将EN_KILLFOCUS发送到指定窗口~

嗯~结了~

谢了~

#1


我补充多个涵数~
ON_EN_KILLFOCUS(IDC_EDIT_LIST, &CSheetPage::OnEnKillfocusEditList)
...
void CSheetPage::OnEnKillfocusEditList()
{
CString   strText(_T( " ")); 
m_edit.GetWindowText(strText); 
m_edit.ShowWindow(SW_HIDE);

Listfenxi.SetItemText(m_iedit,m_isubedit ,strText); 

}
当CEDIT失去焦点时,写入值到CListCtrl Listfenxi; 

#2


创建Edit时指定其父窗口为ListCtrl。

#3


SetFocus()呢?

#4


引用 2 楼 cnzdgs 的回复:
创建Edit时指定其父窗口为ListCtrl。

同意!!用这个什么问题都解决了,生成的差不多就是个记事本!!!

#5


引用 2 楼 cnzdgs 的回复:
创建Edit时指定其父窗口为ListCtrl。


mark

#6


o ?我想问下已知道对象CListCtrl Listfenxi ; 如何返回Listfenxi他的Cwnd* 啊?
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd* 
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList() 
没有被激发~

难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??

#7


有其他方法吗?直接用对象名返回的那种~ 
--------
((CListCtrl*)&Listfenxi)->

#8


啊啊~原来这样?
我还一直以为是
Listfenxi.**() 这样的形式~

我这程序是要求可以任意编辑列表的最下面两行的~
现在的CEdit改为了(CListCtrl*)
在对话框就不能捕捉CEDIT的OnEnKillfocus了怎样办?难道如我上说?

在对话框中如何捕捉啊?

#9


EN_KILLFOCUS是Edit发给其父控件的,你可以自己派生CListCtrl类来响应。

#10


恩~看来想要用鼠标选取文本就要重载类了~这里重载CEDIT类都可以的吧~将EN_KILLFOCUS发送到指定窗口~

嗯~结了~

谢了~