我想IFileSaveDialog
在 mfc 中更改我的自定义布局。
我想更改语言的Right-to-left
布局。IFileSaveDialog
Arabic
他们的任何属性是否直接改变?
我没有找到任何方法来做到这一点,请帮助我。
提前致谢。
编辑
需要更多帮助,我该如何CComptr IFileSaveDialog
处理?
我想IFileSaveDialog
在 mfc 中更改我的自定义布局。
我想更改语言的Right-to-left
布局。IFileSaveDialog
Arabic
他们的任何属性是否直接改变?
我没有找到任何方法来做到这一点,请帮助我。
提前致谢。
编辑
需要更多帮助,我该如何CComptr IFileSaveDialog
处理?
似乎文件对话框不会从父窗口继承其布局。我对此感到有些惊讶。
我认为您可能需要通过添加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;
这就是我从左到右的英文操作系统上的样子: