2016-06-20 3 views
1

Ich habe ein Problem, dass ich ein Formular habe, das drei Seiten (oder Formulare) enthält, zwei Seiten sind Persisch in RTL-Richtung und einer von ihnen ist LTR. Ich habe meine Eltern Form in RTL-Modus wie folgt aus:Fehler beim Ändern der Richtung von listcntrl in MFC

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; 

Und alle meine Seiten umblättern in die RTL-Modus. In dieser englischen Seite habe ich eine listcntrl, die in LTR-Modus sein, so schreibe ich diesen Code in der Klasse Englisch Seite:

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); 

Eigentlich alle Einzelteile in meiner Liste Controller-LTR enthalten, aber mein Kopf und Spalte sind RTL.

Wie kann ich dieses Problem beheben?

Enter image description here

Antwort

1

Sie können die Flagge im Dialog "Eigenschaften-Fenster" des Editors ändern. Öffnen Sie im Dialogeditor das Zieldialogfeld, klicken Sie auf das ListView-Steuerelement, drücken Sie die F4-Taste, stellen Sie "Right Align Text" auf "false" für das ListView-Steuerelement ein.

Wenn Sie es durch den Code zu ändern, müssen Sie wahrscheinlich auch den Griff zu Listview-Header Kontrolle:

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

Vielen Dank, Barmak. – reza