3

我有一个编辑控件:

    HWND hInput = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
        WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL |
           ES_WANTRETURN, 
    0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_INPUT, GetModuleHandle(NULL), NULL);

当按下按钮时,我从中获取文本并尝试用空字符串替换它:

        TCHAR buff[2048];
        memset(buff,0,2048);
        GetWindowText(hInput, buff, 2048);
        SetWindowText(hInput,"");

但在那之后,在编辑控件中有一个新行。

任何想法如何删除这条新线?提前致谢。

编辑: 实际上然后按下按钮就可以了,没有新行。

编辑控件有一个消息过程,它捕获回车键并在按下按钮时执行与按钮相同的操作。这是程序:

LRESULT CALLBACK SubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
    case WM_KEYDOWN: 
        switch (wParam) 
        {
        case VK_RETURN: 
            TCHAR buff[2048];
            memset(buff,0,2048);
            GetWindowText(hInput, buff, 2048);
            SetWindowText(hInput,"");
            break;
        } 
        break; 

    } 
    return CallWindowProc(DefProc, hwnd, msg, wParam, lParam); 
} 

但在这里它离开了新的路线。

4

1 回答 1

2

当您处理 WM_KEYDOWN 时,您成功清除了编辑控件。

然后将该消息传递给基类,即编辑控件,它会在文本中插入一个回车符。这是一种理论。如果它是正确的,那么简单地不向基类发送 WM_KEYDOWN 消息就可以解决问题。

另一种理论是 WM_KEYDOWN 后跟一个 WM_CHAR(由 TranslateMessage 合成),并且编辑控件添加了基于该消息的回车。如果它是正确的,那么你有一个有趣的情况,你说你想要一个多行编辑控件,但你试图在每次用户尝试创建新行时清除内容。

我说错了 ES_WANTRETURN。这与对话框代码一起工作,以确保它不会完全窃取回车键。这就是为什么我改变了我原来的答案。

于 2013-04-05T20:28:24.357 回答