Come impostare il testo sul pulsante "Salva" nella finestra di dialogo dei file di Windows?

StackOverflow https://stackoverflow.com/questions/612119

  •  03-07-2019
  •  | 
  •  

Domanda

Sto cercando di impostare il testo su " save " pulsante di Windows " Salva file come ... " finestra di dialogo.

Ho impostato l'hook, ho ricevuto il messaggio, ho trovato il pulsante (nb. Se chiamo " GetWindowText () " vedo " & amp; Salva " quindi so che è il tasto destro).

Successivamente ho modificato il testo usando " SetWindowText () " (e chiamato " GetWindowText () " per verificarlo - il testo è corretto).

Ma ... il pulsante dice ancora " Salva " ;.

Posso modificare " Annulla " usando lo stesso codice esatto - nessun problema. Cosa c'è di così speciale in " Salva " pulsante? Come posso cambiarlo.

Codice (per quello che vale):

static UINT_PTR CALLBACK myHook(HWND hwnd, UINT msg, WPARAM, LPARAM)
{
  if (msg == WM_INITDIALOG) {
    wchar_t temp[100];
    HWND h = GetDlgItem(GetParent(hwnd),IDOK);
    GetWindowTextW(h,temp,100);     // temp=="&Save"
    SetWindowTextW(h,L"Testing");
    GetWindowTextW(h,temp,100);     // temp=="Testing"
  }
}
È stato utile?

Soluzione

Finalmente l'ho fatto funzionare ....

Sono abbastanza sicuro che stia succedendo qualcosa di divertente con il " Salva " pulsante ma questo codice lo inserirà nell'invio:

// I replace the dialog's WindowProc with this
static WNDPROC oldProc = NULL;
static BOOL CALLBACK buttonSetter(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // Set the button text on every window redraw....
    if (msg == WM_ERASEBKGND) {
        SetDlgItemTextW(hwnd,IDOK,L"OK");
    }
    return oldProc(hwnd, msg, wParam, lParam);
};

// This is the callback for the GetWriteName hook
static UINT_PTR CALLBACK GWNcallback(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    HWND dlg = GetParent(hwnd);
    if (msg == WM_INITDIALOG) {
        oldProc = (WNDPROC)GetWindowLongPtr(dlg, GWL_WNDPROC);
        if (oldProc !=0) {
            SetWindowLongPtr(dlg, GWL_WNDPROC, (LONG)buttonSetter);
        }
    }
    // We need extra redraws to make our text appear...
    InvalidateRect(dlg,0,1);
}

Altri suggerimenti

Probabilmente dovrai ridisegnare la finestra dopo aver impostato il testo.

Prova a chiamare UpdateWindow () dopo aver impostato il testo.

Utilizza il messaggio CDM_SETCONTROLTEXT per impostare il testo anziché pasticciare direttamente con SetWindowText, ovvero

SendMessage(hwnd, CDM_SETCONTROLTEXT, IDOK, L"Testing");

http://msdn.microsoft.com/ en-us / library / ms646960 (VS.85) .aspx ha di più sulla personalizzazione delle finestre di dialogo open / save

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top