好奇怪~我通过移动(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;
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
同意!!用这个什么问题都解决了,生成的差不多就是个记事本!!!
#5
mark
#6
o ?我想问下已知道对象CListCtrl Listfenxi ; 如何返回Listfenxi他的Cwnd* 啊?
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd*
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList()
没有被激发~
难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd*
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList()
没有被激发~
难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??
#7
有其他方法吗?直接用对象名返回的那种~
--------
((CListCtrl*)&Listfenxi)->
--------
((CListCtrl*)&Listfenxi)->
#8
啊啊~原来这样?
我还一直以为是
Listfenxi.**() 这样的形式~
我这程序是要求可以任意编辑列表的最下面两行的~
现在的CEdit改为了(CListCtrl*)
在对话框就不能捕捉CEDIT的OnEnKillfocus了怎样办?难道如我上说?
在对话框中如何捕捉啊?
我还一直以为是
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;
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
同意!!用这个什么问题都解决了,生成的差不多就是个记事本!!!
#5
mark
#6
o ?我想问下已知道对象CListCtrl Listfenxi ; 如何返回Listfenxi他的Cwnd* 啊?
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd*
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList()
没有被激发~
难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??
在这里我用的是~GetDlgItem(IDC_LIST_FENXI)返回Listfenxi他的Cwnd*
有其他方法吗?直接用对象名返回的那种~
还有如果这样一来新问题出现了
就是
void CSheetPage::OnEnKillfocusEditList()
没有被激发~
难道要重载CListCtrl类~在里面声明一个CEdit?
然后重新生成
void CMYListCtrl::OnEnKillfocusEditList() ??
#7
有其他方法吗?直接用对象名返回的那种~
--------
((CListCtrl*)&Listfenxi)->
--------
((CListCtrl*)&Listfenxi)->
#8
啊啊~原来这样?
我还一直以为是
Listfenxi.**() 这样的形式~
我这程序是要求可以任意编辑列表的最下面两行的~
现在的CEdit改为了(CListCtrl*)
在对话框就不能捕捉CEDIT的OnEnKillfocus了怎样办?难道如我上说?
在对话框中如何捕捉啊?
我还一直以为是
Listfenxi.**() 这样的形式~
我这程序是要求可以任意编辑列表的最下面两行的~
现在的CEdit改为了(CListCtrl*)
在对话框就不能捕捉CEDIT的OnEnKillfocus了怎样办?难道如我上说?
在对话框中如何捕捉啊?
#9
EN_KILLFOCUS是Edit发给其父控件的,你可以自己派生CListCtrl类来响应。
#10
恩~看来想要用鼠标选取文本就要重载类了~这里重载CEDIT类都可以的吧~将EN_KILLFOCUS发送到指定窗口~
嗯~结了~
谢了~
嗯~结了~
谢了~