【问题标题】:Read Data from Editable Text Field in WinApi从 WinApi 中的可编辑文本字段读取数据
【发布时间】:2013-08-15 12:05:53
【问题描述】:

我必须读取插入到 windows 中可编辑文本字段中的数据。

为了测试,我创建了以下测试代码。

//Define variable and textfield
LPTSTR radiusValue;
HWND hwndradiusValue;

//Create Text Field. Note that, hWnd is handler to original window
hwndradiusValue=CreateWindowEx(WS_EX_WINDOWEDGE,TEXT("Edit"), TEXT(""), WS_CHILD | WS_VISIBLE, 10, 10, 50, 25, hWnd, NULL, NULL, NULL);

//Get Text from handle
GetWindowText(hwndradiusValue,radiusValue,30);
//Display the message
MessageBox(NULL, radiusValue, "TESTING", MB_OK); 

我期待消息在文本字段中显示该项目。但它没有。它显示空字符。我该如何解决这个问题?

【问题讨论】:

  • 您创建了一个没有内容的编辑控件 (TEXT(""))。此外,您正在混合字符编码。如果您使用的是TEXT(或_T)宏,请始终如一地使用。你应该学习 MSDN 中的Working with Strings。您似乎还安装了一个 pimped SDK;我的没有定义类型LTPSTR。如果那应该是LPTSTR,那么您正在写入随机存储器。
  • @Tim 感谢您的评论。即使我执行 TEXT("SOMERADIUS"),它也不会显示 SOMERADIUS。我正在使用 LPTSTR。那是一个错字。你在写随机存储器是什么意思?
  • GetWindowText 将内容写入radiusValue 指向的地址。这是一个未初始化的指针。您必须自己提供存储空间,即TCHAR radiusValue[30] = { 0 }; GetWindowText( hwndradiusValue, radiusValue, ARRAYSIZE( radiusValue ) );
  • @Tim 谢谢你提供的信息。

标签: c++ winapi text textfield win32gui


【解决方案1】:

当你想检索文本时需要一个字符存储变量,而不是一个未初始化的指针变量!

TCHAR radiusValue[30];
GetWindowText(hwndradiusValue, radiusValue, _countof(radiusValue));

【讨论】:

  • 或者使用GetWindowTextLength()动态分配存储空间。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2019-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多