代码之家  ›  专栏  ›  技术社区  ›  reza

更改MFC中listcntrl的方向时出错

  •  1
  • reza  · 技术社区  · 10 年前

    我有一个问题,我的表单包含三页(或多页),两页是RTL方向的波斯语,其中一页是LTR。我将父表单设置为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,所以我在英文页面类中编写了以下代码:

    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,但我的标题和列都是RTL。

    我如何解决这个问题?

    Enter image description here

    1 回复  |  直到 10 年前
        1
  •  1
  •   Barmak Shemirani    10 年前

    您可以在对话框编辑器的“属性窗口”中更改标志。在对话框编辑器中,打开目标对话框,单击ListView控件,按F4键,将ListView控件的“右对齐文本”设置为false。

    如果通过代码进行更改,则可能还需要ListView标题控件的句柄:

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