Как установить текст в & # 8220; сохранить & # 8221; кнопка в диалоговом окне файлов Windows?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь установить текст в " сохранить " Кнопка Windows "Сохранить файл как ..." диалоговое окно.

Я настроил перехват, получил сообщение, нашел кнопку (примечание. Если я вызываю " GetWindowText () ", я вижу" & amp; Сохранить "), поэтому я знаю, что это правая кнопка).

Затем я изменил текст, используя " SetWindowText () " (и вызывается " GetWindowText () " чтобы проверить это - текст правильный).

Но ... на кнопке все равно написано "Сохранить".

Я могу изменить " Отмена " Кнопка с использованием точно такого же кода - без проблем. Что такого особенного в " Сохранить " кнопка? Как я могу это изменить.

Код (для чего это стоит):

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"
  }
}
Это было полезно?

Решение

Я наконец заставил это работать ....

Я уверен, что с " Сохранить " происходит что-то смешное кнопка, но этот код приведет его к отправке:

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

Другие советы

Возможно, вам нужно перерисовать окно после установки текста.

Попробуйте вызвать UpdateWindow () после установки текста.

Используйте сообщение CDM_SETCONTROLTEXT, чтобы установить текст, а не связываться напрямую с SetWindowText, т.е.

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

http://msdn.microsoft.com/ ru-ru / library / ms646960 (VS.85) .aspx содержит дополнительные сведения о настройке диалогов открытия / сохранения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top