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

所以hwndch是一個窗口子窗口,子窗口是文本框,它的父窗口是主窗口窗體。問題是WM_SETTEXT沒有將文本框的文本設置爲字符串。我知道這與windowschild不存在問題,因爲WM_CHAR在文本框中輸出至少1個字符。 注意:我正在修改另一個進程的句柄。發送消息到文本框窗口C++中的子項不工作

+0

你沒有按照相關文件,並混合了'wParam'和'lParam'。後者也期望一個指針以null結尾的字符串,而不是僞裝成指針的字符。 – chris

回答

3

您不能使用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()); 
+0

不要忘了'arbc +'\ 0''構造。 – HerrJoebob

+0

@Herr那是怎麼回事?對我來說,這似乎是無稽之談 –

+0

是的,這是OP的要點:你要將字符的數字值添加到指針中,而不是按照你想要的那樣來終止字符串。 – HerrJoebob

相關問題