如何将文本从editbox复制到字符串数组?

时间:2015-01-10 18:05:46

标签: winapi visual-studio-2012

我正在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"代替。然而,事实证明没有任何改变。第二个消息框显示"橙色"作为第一个消息框。我的代码出了什么问题?请帮忙!非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试这一点,添加Windows所需的任何编程怪癖。

#define MYLEN 20
...
char MyStringList[3][MYLEN+1] = {"apple", "orange", "watermelon"};

然后您可以使用

从编辑框中获取字符串
GetWindowText(hEdit,MystringList[1],MYLEN);

尽管GetWindowText()文档说明了

“将指定窗口标题栏的文本(如果有的话)复制到缓冲区中。如果指定的窗口是控件,则复制控件的文本。但GetWindowText不能在另一个应用程序中检索控件的文本。“