我正在visual studio 2012上创建一个win32 api窗口应用程序项目。我使用LPWSTR类型变量来存储我的字符串,如下所示。
LPWSTR MyStringList[3]={L"apple",L"orange",L"watermelon"};
我希望将文本从编辑框复制到MyStringList中的一个字符串。因此,我制作了一个简单的编辑框和按钮。
以下是编辑框和按钮的定义。
case WM_CREATE:
hEdit = CreateWindow(L"EDIT",
L"",
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
10, 10, 200, 25,
hWnd,
(HMENU)ID_EDIT,
GetModuleHandle(NULL),
NULL);
hBtn = CreateWindow(L"BUTTON",
L"",
WS_CHILD | WS_VISIBLE,
250, 10, 50, 30,
hWnd,
(HMENU)ID_BUTTON,
GetModuleHandle(NULL),
NULL);
以下是按下按钮时的操作。两个消息框用于查看在调用函数GetWindowText后字符串是否已更改。
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case ID_BUTTON:
MessageBox(hWnd,MystringList[1],L"Before_Pusing",MB_OK);
GetWindowText(hEdit,MystringList[1],sizeof(MystringList[1]));
MessageBox(hWnd,MystringList[1],L"After_Pushing",MB_OK);
InvalidateRect(hWnd,NULL,TRUE);
break;
现在我在键入" banana"之后尝试按下按钮。进入编辑框。第二个字符串" orange"应该用" banana"代替。然而,事实证明没有任何改变。第二个消息框显示"橙色"作为第一个消息框。我的代码出了什么问题?请帮忙!非常感谢!
答案 0 :(得分:1)
您可以尝试这一点,添加Windows所需的任何编程怪癖。
#define MYLEN 20
...
char MyStringList[3][MYLEN+1] = {"apple", "orange", "watermelon"};
然后您可以使用
从编辑框中获取字符串GetWindowText(hEdit,MystringList[1],MYLEN);
尽管GetWindowText()
文档说明了
“将指定窗口标题栏的文本(如果有的话)复制到缓冲区中。如果指定的窗口是控件,则复制控件的文本。但GetWindowText
不能在另一个应用程序中检索控件的文本。“