如何添加LBtnMouseDown事件以编辑控件

时间:2012-02-20 12:45:21

标签: windows winapi

我想在编辑控件上“LBUTTONDOWN”时清空文本框 我知道如何清空文本框,但我不知道添加此事件的位置在哪里。

我的对话框功能:

INT CALLBACK dlgProc(HWND hwnd, unsigned int msg, WPARAM wp, LPARAM lp){
    switch(msg){
    case WM_INITDIALOG:
        SetDlgItemText(hwnd, IDC_EDIT1, L"Please enter the txt");
        break;
    case WM_COMMAND:
        switch(LOWORD(wp)){
        case BTN_EXIT:
            DestroyWindow(hwnd);
            break;
        case IDC_BUTTON1:
            int len = GetWindowTextLength(GetDlgItem(hwnd,IDC_EDIT1));
            if(len > 0){
                TCHAR *buff = new TCHAR[len+1];
                GetDlgItemText(hwnd, IDC_EDIT1, buff, len+1);
                MessageBox(NULL,buff,L"Error message",MB_OK);
                delete buff;
            }
            break;
        }
        break;
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return false;
    }
    return true;
}

1 个答案:

答案 0 :(得分:2)

我怀疑你真正想要的是响应控件接收输入焦点而不仅仅是按钮按下事件。例如,假设用户使用鼠标按钮在编辑控件上设置输入焦点,然后键入,然后再次单击编辑控件,同时它具有焦点。您可能不希望清除用户的文本。或者也许他们使用键盘设置输入焦点,例如 TAB 。我再次怀疑你会希望该行动清除内容。

假设我的理解是正确的,那么你应该在对话程序的EN_SETFOCUS处理程序中监听WM_COMMAND通知。无论用户如何使用鼠标或使用键盘将焦点带到编辑控件上,都会触发。

在您的代码中,您只需要在switch中展开WM_COMMAND声明:

case IDC_EDIT1:
    if(HIWORD(wParam)==EN_SETFOCUS)
    {
        SetDlgItemText(hwnd, IDC_EDIT1, L"");
    }
    break;