【问题标题】:Getting Junk text. How to convert character array variable to LPARAM type?获取垃圾文本。如何将字符数组变量转换为 LPARAM 类型?
【发布时间】:2012-05-30 11:34:19
【问题描述】:

无论从文件中检索到什么数据,我都需要在文本框中显示文本。

在 Windows 应用程序中按下特定按钮 (IDB_SHOW_BUTTON) 时,我正在执行以下操作:-

case IDB_SHOW_BUTTON:{  
   char buf[1000];  
   vReadFileFromHardisk(buf); //storing the read data of file to buffer
   SendMessage(editHwnd,WM_SETTEXT,NULL,(LPARAM)buf);//Due to this, I get junk text.
}
break;

我正在从文件中读取数据并将其存储到缓冲区中。我不明白为什么每次单击按钮时都会收到垃圾文本。

当我更改 SendMessage第 4 个参数 时,即如下所述,我会在按下特定按钮时得到正确的输出:-

SendMessage(editHwnd,WM_SETTEXT,NULL,(LPARAM)L"My First Edit Window");

如果将数据存储到 buf 并通过 SendMessage 发送,请告诉我如何显示正确的文本。

提前致谢。

【问题讨论】:

  • 尝试使用 SendMessageA(..) 代替。检查编译器警告也很好。

标签: c++ windows char sendmessage


【解决方案1】:

看到工作示例中的“L”了吗?您将一个窄字符串传递给一个需要 Unicode 的函数。

你需要

  1. 将您读入的文本转换为 Unicode - 您可以使用 MultiByteToWideChar 等来完成此操作;您需要知道输入的编码是什么,例如UTF-8
  2. 发送消息的窄格式 WM_SETTEXTA,以对您已阅读的数据使用当前系统编码
  3. 将程序设置从 Unicode 更改为多字节(但不要这样做)

我强烈推荐 1 并习惯在整个程序中使用 Unicode(也称为 UTF-16)。

【讨论】:

  • 感谢您的建议。如何使用 MultiByteToWideChar?请给我看一个例子。再次非常感谢...
  • 谢谢 - 很抱歉这个例子,我没有忘记,但我最近一直很忙:-/ 有时间我会回来整理一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多