几种获取EDIT文本的方法
2013-05-16 10:59
393 查看
标 题: 几种获取 EDIT 文本的方法
作 者:dummy
时 间:2005-12-21 10:10
链 接:http://bbs.pediy.com/showthread.php?threadid=19597
1. GetWindowText
2. SendMessage
//刚刚发现,这个有问题。
//无法成功。。。,不知为什么
//3. DispatchMessage
//MSG msg;
//msg.hwnd = hedit;
//msg.message = WM_GETTEXT;
//msg.wParam = (WPARAM)cchTextMax;
//msg.lParam = (LPARAM)lpszText;
//DispatchMessage(&msg);
4.GetWindowLong
LONG lWndProc;
if (NULL != (lWndProc = GetWindowLong(hedit, GWL_WNDPROC)))
CallWindowProc((WNDPROC)lWndProc, hedit, WM_GETTEXT, (WPARAM)cchTextMax, (LPARAM)lpszText);
6.GetClassInfo、GetClassInfoEx(两者有部分差异)
//GetClassInfo
WNDCLASS wc;
GetClassInfo(hInstance, "EDIT", &wc);
CallWindowProc(wc.lpfnWndProc, hedit, WM_GETTEXT, (WPARAM)cchTextMax, (LPARAM)lpszText);
//GetClassInfoEx 参看 GetClassInfo
6.自己写 EDIT 窗口文本获取的处理过程
可以从 windows 的源码中发现, 我在 editec.c 和 edecrare.c 中摘的,详细情况自己看吧 ^_^
case WM_GETTEXT:
/*
* wParam - max number of _bytes_ (not characters) to copy
* lParam - buffer to copy text to. Text is 0 terminated.
*/
lreturn = (LONG)ECGetText(ped, wParam, (LPSTR)lParam, TRUE);
break;
/////////////////////////////////////////////////////////////////////////////
/***************************************************************************\
* ECGetText AorW
*
* Copies at most maxCchToCopy chars to the buffer lpBuffer. Returns
* how many chars were actually copied. Null terminates the string based
* on the fNullTerminate flag:
* fNullTerminate --> at most (maxCchToCopy - 1) characters will be copied
* !fNullTerminate --> at most (maxCchToCopy) characters will be copied
*
* History:
\***************************************************************************/
ICH ECGetText(
PED ped,
ICH maxCchToCopy,
LPSTR lpBuffer,
BOOL fNullTerminate)
{
PSTR pText;
if (maxCchToCopy) {
/*
* Zero terminator takes the extra byte
*/
if (fNullTerminate)
maxCchToCopy--;
maxCchToCopy = min(maxCchToCopy, ped->cch);
/*
* Zero terminate the string
*/
if (ped->fAnsi)
*(LPSTR)(lpBuffer + maxCchToCopy) = 0;
else
*(((LPWSTR)lpBuffer) + maxCchToCopy) = 0;
pText = ECLock(ped);
RtlCopyMemory(lpBuffer, pText, maxCchToCopy*ped->cbChar);
ECUnlock(ped);
}
return maxCchToCopy;
}
作 者:dummy
时 间:2005-12-21 10:10
链 接:http://bbs.pediy.com/showthread.php?threadid=19597
1. GetWindowText
2. SendMessage
//刚刚发现,这个有问题。
//无法成功。。。,不知为什么
//3. DispatchMessage
//MSG msg;
//msg.hwnd = hedit;
//msg.message = WM_GETTEXT;
//msg.wParam = (WPARAM)cchTextMax;
//msg.lParam = (LPARAM)lpszText;
//DispatchMessage(&msg);
4.GetWindowLong
LONG lWndProc;
if (NULL != (lWndProc = GetWindowLong(hedit, GWL_WNDPROC)))
CallWindowProc((WNDPROC)lWndProc, hedit, WM_GETTEXT, (WPARAM)cchTextMax, (LPARAM)lpszText);
6.GetClassInfo、GetClassInfoEx(两者有部分差异)
//GetClassInfo
WNDCLASS wc;
GetClassInfo(hInstance, "EDIT", &wc);
CallWindowProc(wc.lpfnWndProc, hedit, WM_GETTEXT, (WPARAM)cchTextMax, (LPARAM)lpszText);
//GetClassInfoEx 参看 GetClassInfo
6.自己写 EDIT 窗口文本获取的处理过程
可以从 windows 的源码中发现, 我在 editec.c 和 edecrare.c 中摘的,详细情况自己看吧 ^_^
case WM_GETTEXT:
/*
* wParam - max number of _bytes_ (not characters) to copy
* lParam - buffer to copy text to. Text is 0 terminated.
*/
lreturn = (LONG)ECGetText(ped, wParam, (LPSTR)lParam, TRUE);
break;
/////////////////////////////////////////////////////////////////////////////
/***************************************************************************\
* ECGetText AorW
*
* Copies at most maxCchToCopy chars to the buffer lpBuffer. Returns
* how many chars were actually copied. Null terminates the string based
* on the fNullTerminate flag:
* fNullTerminate --> at most (maxCchToCopy - 1) characters will be copied
* !fNullTerminate --> at most (maxCchToCopy) characters will be copied
*
* History:
\***************************************************************************/
ICH ECGetText(
PED ped,
ICH maxCchToCopy,
LPSTR lpBuffer,
BOOL fNullTerminate)
{
PSTR pText;
if (maxCchToCopy) {
/*
* Zero terminator takes the extra byte
*/
if (fNullTerminate)
maxCchToCopy--;
maxCchToCopy = min(maxCchToCopy, ped->cch);
/*
* Zero terminate the string
*/
if (ped->fAnsi)
*(LPSTR)(lpBuffer + maxCchToCopy) = 0;
else
*(((LPWSTR)lpBuffer) + maxCchToCopy) = 0;
pText = ECLock(ped);
RtlCopyMemory(lpBuffer, pText, maxCchToCopy*ped->cbChar);
ECUnlock(ped);
}
return maxCchToCopy;
}
相关文章推荐
- Js获取input文本框值的几种方法
- 实现点击按钮获取和设置edit文本的方法
- VC获取控件文本的几种方法
- DOM 操作中几种获取文本内容的方法
- 批处理文件中获取当前所在路径的几种方法,以及写文件到txt
- php发送get、post请求的几种方法 以及获取内容
- 【转】java获取当前路径的几种方法
- spring获取webapplicationcontext,applicationcontext几种方法详解
- c# 获取运行时路径的几种方法
- Linux获取网页源码的几种方法 linux爬虫程序
- 【转】java获取当前路径的几种方法
- VB.NET下获取硬盘信息的几种方法
- jquery获取select选中值的文本,并赋值给另一个输入框的方法
- iOS中获取文件路径的几种方法
- jQuery 获取兄弟元素的几种不错方法
- Linux下获取软件源码的几种方法
- 获取/设置IFRAME内对象元素的几种JS方法
- java File文件路径获取的几种方法
- 【spring框架】spring获取webapplicationcontext,applicationcontext几种方法详解
- EditText 文本限制(只能填数字),获取光标