在 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);
我有一个问题,我的表格包括三页(或表格),两页在 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);