在 MFC 中更改 listcntrl 的方向时出错

Error in changing of direction of listcntrl in MFC

我有一个问题,我的表格包括三页(或表格),两页在 RTL 方向是波斯语,其中一页是 LTR。我将 parent 表单设置为 RTL 模式,如下所示:

if (Create( CWnd::FromHandle(hWndParent),
        WS_SYSMENU | WS_POPUP | WS_CAPTION | DS_MODALFRAME | WS_VISIBLE    | DS_CONTEXTHELP ,
        WS_EX_LAYOUTRTL | WS_EX_CONTROLPARENT | WS_EX_WINDOWEDGE | WS_EX_DLGMODALFRAME ) == 0 )
        return IDCANCEL;

而且我的所有页面都变成了 RTL 模式。在那个英文页面我有一个必须处于LTR模式的listcntrl,所以我在英文页面写了这段代码class:

LONG lStyle = ::GetWindowLong(GetDlgItem(IDC_LST_ITEMS)->m_hWnd,GWL_EXSTYLE);
lStyle &= ~WS_EX_LAYOUTRTL;
::SetWindowLong(GetDlgItem(IDC_LST_ITEMS)->m_hWnd, GWL_EXSTYLE, lStyle);

实际上我的列表控件中包含的所有项目都更改为 LTR,但我的 header 和列是 RTL。

我该如何解决这个问题?

您可以在对话框编辑器的 "Properties Window" 中更改标志。在对话框编辑器中,打开目标对话框,单击 ListView 控件,按 F4 键,将 ListView 控件的 "Right Align Text" 设置为 false。

如果您通过代码更改它,您可能还需要 ListView 的 header 控件的句柄:

HWND hHeader = ListView_GetHeader(hListView);
LONG lStyle = ::GetWindowLong(hHeader, GWL_EXSTYLE);
lStyle &= ~WS_EX_LAYOUTRTL;
::SetWindowLong(hHeader, GWL_EXSTYLE, lStyle);