在 RTL 语言中强制对话 LTR

问题描述 投票:0回答:1

我在 MFC 应用程序中有一个可调整大小的对话框,由于第三方控件,该对话框无法正确呈现 RTL(即希伯来语和阿拉伯语)。 LTR 很好。出于这个原因,我想强制它呈现 LTR,即使是在那些有问题的语言中。

我希望对话框有一个简单的全局开关。如果尝试删除

WS_EX_LAYOUTRTL
中的
OnCreate
,然后在
OnInitDialog
的开头再次删除。这使得对话框本身 LTR,而不是子窗口。

我可以使用

EnumChildWindows
删除子级的样式,但是我的对话框左侧有许多“固定”控件。这些仅通过对话框编辑器定位,而不是在
OnSize
中。这意味着无论
WS_EX_LAYOUTRTL
如何,它们都会(看起来)呈现在右侧。我希望避免添加变量,并在
OnSize
中对所有这些控件的大小和位置进行编码 - 如果我能让整个 shebang 进行 LTR,这将起作用!

我也在调查

Get/SetProcessDefaultLayout
,但到目前为止,即使在 RTL 条件下也报告 LTR - 所以没有那么有帮助。

简而言之,有没有一种方法可以强制特定对话框在RTL条件下渲染LTR,而不需要专门处理每个子控件的布局?

c++ layout localization mfc
1个回答
0
投票

当然,在花了几个小时苦苦思索这个问题之后,一旦我发布问题......我就找到了答案!

我正在尝试这个:

//----------------------------------------------------
BOOL MyDlg::OnNcCreate(LPCREATESTRUCT lpCreateStruct)
//----------------------------------------------------
{
    lpCreateStruct->dwExStyle &= ~WS_EX_LAYOUTRTL;
    BOOL res = MyBaseDlg::OnNcCreate(lpCreateStruct);

    return res;
}

但是你需要的是这个:

//----------------------------------------------------
BOOL MyDlg::OnNcCreate(LPCREATESTRUCT lpCreateStruct)
//----------------------------------------------------
{
    BOOL res = MyBaseDlg::OnNcCreate(lpCreateStruct);
    SetWindowLong(m_hWnd, GWL_EXSTYLE, GetWindowLong(m_hWnd, GWL_EXSTYLE) & ~WS_EX_LAYOUTRTL);

    return res;
}
© www.soinside.com 2019 - 2024. All rights reserved.