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

shinefen 2008-05-30 11:31:31
鼠标(光标)不能选取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在对话框中就可以用鼠标(光标)选取那文本了~
...全文
318 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Chivalry 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
创建Edit时指定其父窗口为ListCtrl。
[/Quote]

mark
luoya263547560 2008-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
创建Edit时指定其父窗口为ListCtrl。
[/Quote]
同意!!用这个什么问题都解决了,生成的差不多就是个记事本!!!
长尾巴的悟空 2008-05-31
  • 打赏
  • 举报
回复
SetFocus()呢?
cnzdgs 2008-05-31
  • 打赏
  • 举报
回复
创建Edit时指定其父窗口为ListCtrl。
shinefen 2008-05-31
  • 打赏
  • 举报
回复
恩~看来想要用鼠标选取文本就要重载类了~这里重载CEDIT类都可以的吧~将EN_KILLFOCUS发送到指定窗口~

嗯~结了~

谢了~
cnzdgs 2008-05-31
  • 打赏
  • 举报
回复
EN_KILLFOCUS是Edit发给其父控件的,你可以自己派生CListCtrl类来响应。
shinefen 2008-05-31
  • 打赏
  • 举报
回复
啊啊~原来这样?
我还一直以为是
Listfenxi.**() 这样的形式~

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

在对话框中如何捕捉啊?
Chivalry 2008-05-31
  • 打赏
  • 举报
回复
有其他方法吗?直接用对象名返回的那种~
--------
((CListCtrl*)&Listfenxi)->
shinefen 2008-05-31
  • 打赏
  • 举报
回复
o ?我想问下已知道对象CListCtrl Listfenxi ; 如何返回Listfenxi他的Cwnd* 啊?
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd*
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList()
没有被激发~

难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??
shinefen 2008-05-30
  • 打赏
  • 举报
回复
我补充多个涵数~
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;

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧