Wie der Text auf der Schaltfläche „Speicher“ in Windows' Datei-Dialog setzen?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich versuche, den Text auf die Schaltfläche „Speichern“ des Windows-setzen „Datei speichern unter ...“ Dialog.

Ich habe den Haken einrichten, die Nachricht erhalten, die Taste gefunden (nb. Wenn ich „GetWindowText()“ Ich sehe „& Save“ nennen, damit ich weiß, es ist die rechte Taste).

Als nächstes änderte ich den Text "SetWindowText()" mit (und als "GetWindowText()", es zu überprüfen - der Text ist korrekt).

Aber ... die Schaltfläche sagt noch "Speichern".

Ich kann die Schaltfläche „Abbrechen“ ändern Sie den exakt gleichen Code verwenden - kein Problem. Was ist das Besondere an der Schaltfläche „Speichern“? Wie kann ich es ändern.

-Code (für was es wert ist):

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"
  }
}
War es hilfreich?

Lösung

ich es endlich geschafft arbeiten ....

Ich bin mir ziemlich sicher, dass es etwas komisch mit der Schaltfläche „Speichern“ los, aber dieser Code wird in die Unterwerfung ringen:

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

Andere Tipps

Sie müssen wahrscheinlich das Fenster nach dem Einstellen des Textes neu zu zeichnen.

Versuchen Aufruf Update () nach den Text zu setzen.

Mit CDM_SETCONTROLTEXT Nachricht den Text zu setzen, anstatt Chaos mit SetWindowText direkt, d.

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

http://msdn.microsoft.com/ en-us / library / ms646960 (VS.85) aspx hat mehr zum Anpassen öffnen / speichern-Dialoge

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top