Wie der Text auf der Schaltfläche „Speicher“ in Windows' Datei-Dialog setzen?
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"
}
}
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