我建立了一个基于CEditView的sdi应用程序,我知道,要想得到View中嵌入的Edit控件的内容,可以调用
GetEditItem().GetWindowText()
要想设置其内容,可以调用GetEditItem.SetWindowText(),
于是,我产生了疑问——这两个函数的操作,到底是怎么实现的(至今,我没法在MFC的源代码中找到存储Edit控件内容的 数据结构),
于是,通过观察MFC源代码,发现了一个有趣的函数void CEditView::ReadFromArchive(CArchive& ar, UINT nLen)
在这个函数中,看到了两个CEdit类中的函数——GetHandle()/SetHandle()
于是,我编写了自己的对EDIT内容操作的代码:
设置:
int nLen = 3;
LPVOID hText = LocalAlloc(LMEM_MOVEABLE, (nLen+1)*sizeof(TCHAR));
LPTSTR lpszText = (LPTSTR)LocalLock(hText); //将hText的首地址给lpszText
lpszText[0] = 'k';
lpszText[1] = 'k';
lpszText[2] = '3';
lpszText[3] = '/0';
LocalUnlock(hText);
GetEditCtrl().SetHandle((HLOCAL)(UINT)(DWORD)hText);
Invalidate();
获取:
HLOCAL pText = GetEditCtrl().GetHandle();
LPTSTR lp = (LPTSTR)LocalLock(pText);
其中LPVOID hText 定义了一个内存对象hText
LocalAlloc(LMEM_MOVEABLE, (nLen+1)*sizeof(TCHAR));初始化了该对象