代码之家  ›  专栏  ›  技术社区  ›  Jimmy J

如何在Windows的文件对话框中设置“保存”按钮上的文本?

  •  3
  • Jimmy J  · 技术社区  · 16 年前

    我已经设置了钩子,收到了消息,找到了按钮(注意,如果我打电话” 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"
      }
    }
    
    3 回复  |  直到 15 年前
        1
  •  1
  •   Jimmy J    16 年前

    我终于成功了。。。。

    // 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);
    }
    
        2
  •  0
  •   SimonV    16 年前

    设置文本后,可能需要重新绘制窗口。

    设置文本后,请尝试调用updateWindows()。

        3
  •  0
  •   Michael    16 年前

    使用CDM_SETCONTROLTEXT message设置文本,而不是直接与SetWindowText混淆,即。

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

    http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx 有关自定义打开/保存对话框的详细信息