我想在mfc。
中更改自定义IFileSaveDialog
的布局
我想更改Right-to-left
语言IFileSaveDialog
的{{1}}版面。
他们的任何属性是否直接改变了?
我找不到任何办法,请帮助我。
先谢谢。
修改
需要更多帮助,我如何处理Arabic
?
答案 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;
这就是我从左到右的英语操作系统的样子: