CEdit子类化后

sunharbor 2010-03-23 02:04:15
我从CEdit派生一个新的CMyEdit,OnChar设一个定时器,然后在OnTimer里面读出编辑框里面的内容。我想把读出的内容str显示到一个ListCtrl控件(控件变量m_ListCtrl)中,请问大家该怎样写呢?

我下面程序里写的m_ListCtrl.InsertItem()是错误的:'m_ListCtrl' : undeclared identifier.

谢谢大家!

// CMyEdit message handlers
void CMyEdit::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CString str;
int count = 0;
KillTimer(1);
if(nIDEvent == 1)
{
GetWindowText(str); //读出编辑框内容
SetWindowText(_T("")); //清空编辑框
MessageBox((LPCTSTR)(str)); //消息框可以显示

//m_ListCtrl.InsertItem(count++, (LPCTSTR)(str)); 错误的
}
CEdit::OnTimer(nIDEvent);
}

void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
SetTimer(1, 1000, NULL);
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
...全文
146 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunharbor 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 gslqy 的回复:]
代码缩进挺好的。 另外第二行str不需要括号
[/Quote]
嗯,谢谢^_^
gslqy 2010-03-23
  • 打赏
  • 举报
回复
代码缩进挺好的。 另外第二行str不需要括号
sunharbor 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vc_zsy 的回复:]
m_ListCtrl定义成指针,然后让上层窗口将CListCtrl的地址传进来调用就可以了
m_ListCtrl->InsertItem(count++, (LPCTSTR)(str));
[/Quote]

真的太谢谢了!现在在赶东西,又不熟,所以问了很多很弱的问题。谢谢你的指点,谢谢大家!
我是这样用的:
		
CMFCControlDlg *dlg = (CMFCControlDlg*)AfxGetApp()->GetMainWnd();
dlg->m_ListCtrl.InsertItem(0, (LPCTSTR)((str)));
bingying19872008 2010-03-23
  • 打赏
  • 举报
回复
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
CRect rect;
if (pNMItemActivate->iItem == -1 || pNMItemActivate->iSubItem == -1)
{
return;
}//注意使用这个函数要给listctrl选上FullRowSelect(好像是这个单词)属性,否则得到的item不正确
GetSubItemRect(pNMItemActivate->iItem,pNMItemActivate->iSubItem,LVIR_BOUNDS,rect);//取得该列表格的举行范围
if (m_Edit.m_hWnd == NULL)
{
m_Edit.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER | ES_MULTILINE,CRect(0,0,2,2), this, 1); //带边框
}
m_Edit.ShowWindow(SW_SHOW);
m_nCurrentRow = pNMItemActivate->iItem;
m_nCurrentColumn = pNMItemActivate->iSubItem;//记录下当前位置,因为当edit失去焦点时要把edit的内容填充到listctrl上
m_Edit.MoveWindow(rect);
CString s1;
s1 = GetItemText(pNMItemActivate->iItem,pNMItemActivate->iSubItem); //如果listctrl该位置本来就有内容就读出
m_Edit.SetWindowText(s1);
m_Edit.SetFocus();
m_Edit.SetSel(m_Edit.GetWindowTextLength(),m_Edit.GetWindowTextLength()); //设置光标到最后
*pResult = 0;
[/code]



LRESULT CMyListCtrl::OnEndEdit(WPARAM wParam,LPARAM lParam)
{
//自定义消息,这个消息是Cedit失去焦点时发过来的
if (wParam == 0x2)
{
CString strText;
m_Edit.GetWindowText(strText);
SetItemText(m_nCurrentRow,m_nCurrentColumn,strText);//更新listctrl该位置的内容
m_Edit.SetSel(0, -1);
m_Edit.Clear();
m_Edit.ShowWindow(SW_HIDE);
}
return 0;
}



void CMyListCtrlEdit::OnEnKillfocus()
{
// 你派生的Cedit响应 失去焦点的消息,紧传递自定义消息给listctrl就行了
//这个编号 0x2你随意定
::PostMessage(GetParent()->m_hWnd,WM_ENDEDIT,0x2,0);
}




我要分........
gslqy 2010-03-23
  • 打赏
  • 举报
回复
未声明变量: 你看你是否包含了头文件,要么就是拼写错误。 (插播一段广告,我发现有些控件变量在VC6中是不给提示的,只要你的代码中有些其它错误,它就会提示控件未声明变量. 而用VS08就没有问题)

//m_ListCtrl.InsertItem(count++, (LPCTSTR)(str)); 错误的
肯定错了啊, 你每次进入OnTimer函数,都出来个 int cout = 0。 cout++有什么意义呢? 还是弄个静态变量吧
VC_ZSY 2010-03-23
  • 打赏
  • 举报
回复
m_ListCtrl定义成指针,然后让上层窗口将CListCtrl的地址传进来调用就可以了
m_ListCtrl->InsertItem(count++, (LPCTSTR)(str));
VC_ZSY 2010-03-23
  • 打赏
  • 举报
回复
基本上不用关心LZ是什么目的,根据错误提示就知道是变量m_ListCtrl的问题,这个变量是你在CMyEdit类中定义的变量,请问你如何给这个变量初始化的?
LZ应该是想将对话框(假如)里的CListCtrl控件来显示那些信息吧?
你在CMyEdit中定义一个CListCtrl指针(不是对象),将对话框中CListCtrl的地址传给CMyEdit中的m_ListCtrl变量,然后你再m_ListCtrl->InsertItem(count++, (LPCTSTR)(str));就没有问题了
bingying19872008 2010-03-23
  • 打赏
  • 举报
回复
你的本意是想自己写1个带编辑功能的ListCtrl控件 吧.
不是每写1个字就显示在listctrl上.而是当用户双击时,你把Cedit控件移动到 该位置.并显示.
用户输入时输入的字输入在edit控件上,当edit控件失去焦点时,再去出其内容填到listctrl上
VC_ZSY 2010-03-23
  • 打赏
  • 举报
回复
m_ListCtrl在那里定义的?类型?

16,471

社区成员

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

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

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