windows - Hvordan kan jeg tilføje LBtnMouseDown begivenhed for at redigere kontrol

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil have en 'LBUTTONDOWN' på redigeringskontrol, tøm tekstboksen.

Jeg ved, hvordan kan jeg tømme tekstboksen, men jeg ved ikke, hvor er stedet, hvor denne begivenhed er tilføjet.


Min dialogfunktion:


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;
}

Bedste reference


Det, jeg formoder, at du virkelig vil have, er at reagere på det kontrolmodtagende inputfokus i stedet for blot knappen nedadhændelsen. Antag for eksempel brugeren bruger museknappen til at indstille inputfokus på redigeringsstyringen, derefter skrive og derefter klikke på redigeringsstyringen igen, mens den aktuelt har fokus. Du vil sandsynligvis ikke have brugernes tekst til at blive ryddet. Eller måske sætter de indgangsfokus ved hjælp af tastaturet, fx TAB . Jeg formoder igen, at du vil have denne handling for at rydde indholdet.


Hvis jeg antager, at min forståelse er korrekt, skal du lytte til meddelelsen EN\_SETFOCUS i din dialogprocedure s s WM\_COMMAND handler. Dette vil slukke, uanset hvordan brugeren bringer fokus til redigeringskontrollen, enten ved hjælp af musen eller ved hjælp af tastaturet. [7] [8]


I din kode skal du bare udvide din switch erklæring i WM\_COMMAND:


case IDC\_EDIT1:
    if(HIWORD(wParam)==EN\_SETFOCUS)
    {
        SetDlgItemText(hwnd, IDC\_EDIT1, L"");
    }
    break;