如何更改IFileSaveDialog的布局 - MFC

时间:2013-04-24 07:16:29

标签: windows visual-c++ layout mfc

我想在mfc。

中更改自定义IFileSaveDialog的布局

我想更改Right-to-left语言IFileSaveDialog的{​​{1}}版面。

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

我找不到任何办法,请帮助我。

先谢谢。

修改

需要更多帮助,我如何处理Arabic

1 个答案:

答案 0 :(得分: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;

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

enter image description here