كيفية تعيين النص على زر "حفظ" في ملف الحوار ويندوز '؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا أحاول أن تعيين نص على زر "حفظ" من ويندوز "حفظ ملف باسم ..." الحوار.

ولقد قمت بإعداد ورطتها، تلقيت رسالة، وجدت على زر (ملحوظة. إذا أسميه "GetWindowText()" أرى "وحفظ" إذا كنت لا تعرف انها على الزر الأيمن).

التالي غيرت النص باستخدام "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/ أون لنا / مكتبة / ms646960 (VS.85) .aspx اتصال ديه أكثر على تخصيص فتح / حفظ مربعات الحوار

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top