0

我想IFileSaveDialog在 mfc 中更改我的自定义布局。

我想更改语言的Right-to-left布局。IFileSaveDialogArabic

他们的任何属性是否直接改变?

我没有找到任何方法来做到这一点,请帮助我。

提前致谢。

编辑

需要更多帮助,我该如何CComptr IFileSaveDialog处理?

4

1 回答 1

1

似乎文件对话框不会从父窗口继承其布局。我对此感到有些惊讶。

我认为您可能需要通过添加WS_EX_LAYOUTRTL到对话窗口来强制解决问题。这并不容易做到,因为文件对话框界面没有为您提供窗口句柄。您可以使用 CBT 挂钩来解决此问题。

这是一个对所有对话框(具有类名#32770)强制 RTL 的示例。我用 Delphi 编写了这个例子,因为这是我个人最熟悉的。我相信你可以将它翻译到你的 MFC 环境中。

首先安装钩子:

hook := SetWindowsHookEx(WH_CBT, CBTProc, 0, GetCurrentThreadId);

当您需要卸载它时:

UnhookWindowsHookEx(hook);

和钩子程序:

function CBTProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  wnd: HWND;
  ClassName: array [0..63] of Char;
  Style: DWORD;
begin
  if nCode=HCBT_ACTIVATE then begin
    wnd := wParam;
    GetClassName(wnd, ClassName, Length(ClassName));
    if ClassName='#32770' then begin
      Style := GetWindowLongPtr(wnd, GWL_EXSTYLE);
      SetWindowLongPtr(wnd, GWL_EXSTYLE, Style or WS_EX_LAYOUTRTL);
    end;
  end;
  Result := CallNextHookEx(hook, nCode, wParam, lParam);
end;

这就是我从左到右的英文操作系统上的样子:

在此处输入图像描述

于 2013-04-24T11:45:41.140 回答