理想情况下,应在OnNcCreate
窗口开始创建和定位其子控件之前更改窗口样式。这样,子选项卡以及子按钮将相应定位(确定/取消/应用按钮也将与左侧对齐)。
例子:
BEGIN_MESSAGE_MAP(...)
ON_WM_NCCREATE()
...
END_MESSAGE_MAP()
BOOL CMyPropertySheet::OnNcCreate(LPCREATESTRUCT pc)
{
BOOL res = CMFCPropertySheet::OnNcCreate(pc);
SetWindowLongPtr(m_hWnd, GWL_EXSTYLE,
WS_EX_LAYOUTRTL | GetWindowLongPtr(m_hWnd, GWL_EXSTYLE));
return res;
}
或者,在 中执行此操作OnInitDialog
,用于::FindWindowEx(m_hWnd, 0, WC_TABCONTROL, 0)
查找选项卡控件的句柄并更改其样式。这样按钮就不会重新定位。例子:
BOOL CMyPropertySheet::OnInitDialog()
{
BOOL res = CMFCPropertySheet::OnInitDialog();
SetWindowLongPtr(m_hWnd, GWL_EXSTYLE,
WS_EX_LAYOUTRTL | GetWindowLongPtr(m_hWnd, GWL_EXSTYLE));
HWND htabctrl = ::FindWindowEx(m_hWnd, 0, WC_TABCONTROL, 0);
SetWindowLongPtr(htabctrl, GWL_EXSTYLE,
WS_EX_LAYOUTRTL | GetWindowLongPtr(htabctrl, GWL_EXSTYLE));
return res;
}
边注:
您也可以SetProcessDefaultLayout(LAYOUT_RTL)
在流程开始时调用(例如在 中CMyWinApp::InitInstance
)。然后根据结果更改布局GetProcessDefaultLayout
。所以你记得不要不小心改变了拉丁版本的风格......