Как я могу добавить событие LBtnMouseDown для редактирования элемента управления - PullRequest
0 голосов
/ 20 февраля 2012

Я хочу, чтобы "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 Ответ

2 голосов
/ 20 февраля 2012

Я подозреваю, что вы действительно хотите, чтобы реагировать на элемент управления, получающий фокус ввода, а не только событие нажатия кнопки.Например, предположим, что пользователь использует кнопку мыши для установки фокуса ввода на элементе управления редактирования, затем вводит и снова щелкает элемент управления для редактирования, пока он в данный момент имеет фокус.Вы, вероятно, не хотите, чтобы текст пользователя был очищен.Или, возможно, они устанавливают фокус ввода с помощью клавиатуры, например, TAB .Опять же, я подозреваю, что вы захотите, чтобы это действие очистило содержимое.

Если мое понимание верно, тогда вы должны прослушать уведомление EN_SETFOCUS в процедуре вашего диалога WM_COMMAND обработчик.Это сработает независимо от того, как пользователь фокусируется на элементе управления редактирования, используя мышь или клавиатуру.

В вашем коде вам просто нужно развернуть оператор switch в WM_COMMAND:

case IDC_EDIT1:
    if(HIWORD(wParam)==EN_SETFOCUS)
    {
        SetDlgItemText(hwnd, IDC_EDIT1, L"");
    }
    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...