c++ - SendMessage 到 C++ 中的 TextBox Window Child 不起作用

标签 c++ winapi

char arbc[60];
cout << "Message: ";
cin.getline(arbc+'\0',sizeof(arbc)+1);
system("pause");
PostMessage(hwndch,WM_SETTEXT,(WPARAM)*arbc,0);

所以 hwndch 是一个子窗口,子窗口是一个文本框,它的父窗口是主窗口窗体。问题是 WM_SETTEXT 没有将文本框的文本设置为字符串。我知道这不是 windowchild 的问题,因为 WM_CHAR 在文本框中输出至少 1 个字符。 注意:我正在修改另一个进程的句柄。

最佳答案

您不能将 PostMessageWM_SETTEXT 一起使用。那是一条同步消息。当窗口处于不同的过程中时,您的问题会更大。系统需要将文本从您的进程编码到另一个进程中。它不能用异步消息做到这一点。

改用SendMessage

您的其他问题至少包括:

  • wParam 参数是错误的。该参数被忽略。将 (LPARAM)arbc 传递给 lParamdocumentation很清楚。
  • 在任何情况下都不应该使用 C 字符串。使用 std::string,然后使用 c_str()
  • 您对 sizeof 的使用是错误的。你对 getline 的使用也是错误的。
  • 您似乎对调用哪个函数感到困惑。标题为 SendMessage,代码为 PostMessage

你可能想要这样的东西:

std::cout << "Message: ";
std::string msg;
std::getline(std::cin, msg);
SendMessage(hwndch, WM_SETTEXT, 0, (LPARAM)msg.c_str());

关于c++ - SendMessage 到 C++ 中的 TextBox Window Child 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637858/

相关文章:

python - 嵌入python+numpy时延迟加载python DLL

c++ - 将 glm::lookat 矩阵转换为四元数并返回

c++ - 调整大小后保持对 vector 元素的引用有效

c++ - 除了 SetCursor 之外还有什么可以重置光标形状?

c++ - 无法从 WindowsXP 上的子文件夹加载库

c++ CreateThread非静态成员没有特定成员名称

c++ - BOOST_FOREACH 对 boost::shared_ptr<list> 的迭代

c++ - 如何在 C++ 中将不可复制的局部变量移出 lambda?

vba - Virtual Protect 的 64 位声明是否正确?

c++ - 在 win32 中同时移动分层窗口