纯winapi通过SendMessage,WM_GETTEXT读取EDIT BOX的内容遇到问题!

abcdwell 2016-01-22 12:13:55
在窗口上建立 EDIT控件
	
hEdit = CreateWindow(L"EDIT", L"0123456789", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_CENTER | ES_NOHIDESEL,
0,0, 400,25, hWnd, (HMENU )IDC_EDIT, NULL, NULL);



获取EDIT控件里的值,跟踪查看如下 :
	
int len = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
char* buffer = new char[len+1]; // 此处读取长度正常
SendMessage(hEdit, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);
string str(buffer); // buffer里只读到一个字符???


实在不 知道哪里出了问题,希望大侠帮忙指导,谢谢 。
win7, 64bit, vs2008
...全文
1216 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
大佬,我已经获取到了文本框的句柄了,但是还是获取不到文本框里面的值
POINT pNow = { 0,0 };
if (GetCursorPos(&pNow)) // 获取鼠标当前位置
{
HWND hwndPointNow = NULL;

hwndPointNow = WindowFromPoint(pNow); // 获取鼠标所在窗口的句柄
if (hwndPointNow)
{
//cout << "Success!!" << endl;
char szWindowTitle[1240];
char newTemp[1024];
::GetWindowTextA(hwndPointNow, szWindowTitle, sizeof(szWindowTitle)); // 获取窗口标题
}
}
代码是这样的,能帮忙看下是什么原因吗?
有鱼雅雅 2019-05-30
  • 打赏
  • 举报
回复
+1是因为字符串结尾要加一个NullChar
赵4老师 2016-01-23
  • 打赏
  • 举报
回复
引用 11 楼 abcdwell 的回复:
我想问的是为什么要用 TCHAR 和 CString? 你懂的,
打开tchar.h文件一睹其内容,你就会明白了。
ynsenyu 2016-01-22
  • 打赏
  • 举报
回复
buffer用wchar_t*?好像EDIt内部是unicode的
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
如果是Unicode的原因, 那么,有办法建一个EDIT只接受Non-unicode(叫ansi-....?)吗?
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
我想问的是为什么要用 TCHAR 和 CString? 你懂的,
paschen 版主 2016-01-22
  • 打赏
  • 举报
回复
引用 9 楼 abcdwell 的回复:
[quote=引用 8 楼 zhao4zhong1 的回复:]
int len = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);

	TCHAR *buffer = new TCHAR[len+1];  // 此处读取长度正常 

	SendMessage(hEdit, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);

	CString str(buffer);

       TRACE(_T("%s"),str);
       TRACE(_T("%S"),str);
SendMessage(hEdit, WM_GETTEXT, (WPARAM)len+1, (LPARAM)buffer);
谢谢, len+1,如上改了之后可以了, 很是奇怪,谁可以解释一下为什么?[/quote] https://msdn.microsoft.com/en-us/library/ms632627%28VS.85%29.aspx wParam The maximum number of characters to be copied, including the terminating null character.
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
int len = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);

	TCHAR *buffer = new TCHAR[len+1];  // 此处读取长度正常 

	SendMessage(hEdit, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);

	CString str(buffer);

       TRACE(_T("%s"),str);
       TRACE(_T("%S"),str);
SendMessage(hEdit, WM_GETTEXT, (WPARAM)len+1, (LPARAM)buffer);
谢谢, len+1,如上改了之后可以了, 很是奇怪,谁可以解释一下为什么?
赵4老师 2016-01-22
  • 打赏
  • 举报
回复
int len = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);

	TCHAR *buffer = new TCHAR[len+1];  // 此处读取长度正常 

	SendMessage(hEdit, WM_GETTEXT, (WPARAM)len, (LPARAM)buffer);

	CString str(buffer);

       TRACE(_T("%s"),str);
       TRACE(_T("%S"),str);
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
引用 6 楼 ynsenyu 的回复:
memset(buffer,0,sizeof(wchar_t)*(Len+1))看看?
仍然不行, 和原来一样,只能获取到EDIT中第一个数字,
ynsenyu 2016-01-22
  • 打赏
  • 举报
回复
memset(buffer,0,sizeof(wchar_t)*(Len+1))看看?
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
IsWindowUnicode(hEdit)
看了,的确是Unicode
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
引用 1 楼 ynsenyu 的回复:
buffer用wchar_t*?好像EDIt内部是unicode的
的确, 改为这样,还是不行,郁闷
	
int len = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
	wchar_t* buffer = new wchar_t[len+1];
	SendMessage(hEdit, WM_GETTEXT, (WPARAM)(len+1), (LPARAM)buffer);
abcdwell 2016-01-22
  • 打赏
  • 举报
回复
引用 2 楼 paschen 的回复:
SendMessage(hEdit, WM_GETTEXT, (WPARAM)(len + 1), (LPARAM)buffer); 试下
不行, 还是要谢谢
paschen 版主 2016-01-22
  • 打赏
  • 举报
回复
SendMessage(hEdit, WM_GETTEXT, (WPARAM)(len + 1), (LPARAM)buffer); 试下

65,202

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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