VB6和从右向左布局的windows应用程序

VB6和从右向左布局的windows应用程序,vb6,right-to-left,Vb6,Right To Left,我有一个旧的windows应用程序,它是Ocxs。我想把它的OCX本地化为阿拉伯语。更改标签和字符串没有问题。 但我无法将布局更改为从右向左。 我找到了一些有关在windows中使用镜像的资源。但是提供的样品对我没有帮助 我不是VB迷,也没有足够的经验。 VB是否有任何清晰且经过测试的方法来镜像UI?来自平台SDK 2001 编辑控件中的复杂脚本 复杂脚本是一种语言,它的打印形式不是以简单的方式排列的。例如,复杂脚本可能允许双向渲染、字形的上下文成形或组合字符。标准编辑控件已扩展为支持多语言文本

我有一个旧的windows应用程序,它是Ocxs。我想把它的OCX本地化为阿拉伯语。更改标签和字符串没有问题。 但我无法将布局更改为从右向左。 我找到了一些有关在windows中使用镜像的资源。但是提供的样品对我没有帮助 我不是VB迷,也没有足够的经验。 VB是否有任何清晰且经过测试的方法来镜像UI?

来自平台SDK 2001

编辑控件中的复杂脚本 复杂脚本是一种语言,它的打印形式不是以简单的方式排列的。例如,复杂脚本可能允许双向渲染、字形的上下文成形或组合字符。标准编辑控件已扩展为支持多语言文本和复杂脚本。例如,这不仅包括输入和显示,还包括在泰语和Devanagari脚本中在字符簇上正确移动光标

编写良好的应用程序将自动获得此支持,无需修改。同样,您应该考虑增加对右到左的读取顺序和右对齐的支持。在这种情况下,切换“编辑控制”窗口的扩展样式标志以控制这些属性,如以下示例所示:

// ID_EDITCONTROL is the control ID in the resource file.
HANDLE hWndEdit = GetDlgItem(hDlg, ID_EDITCONTROL);
LONG lAlign = GetWindowLong(hWndEdit, GWL_EXSTYLE) ;

// To toggle alignment
lAlign ^= WS_EX_RIGHT ;

// To toggle reading order
lAlign ^= WS_EX_RTLREADING ;
设置lAlign值后,通过如下设置编辑控制窗口的扩展样式来启用新显示:

// This assumes your edit control is in a dialog box. If not, 
// get the edit control handle from another source.

SetWindowLong(hWndEdit, GWL_EXSTYLE, lAlign);
InvalidateRect(hWndEdit, NULL, FALSE);

Windows 2000/XP:标准编辑控件支持上下文菜单,允许用户切换阅读顺序并插入/显示Unicode双向控制字符

我相信这些值只能在运行时在适当的区域设置。请注意,OP使用的是VB6,并且并非所有这些选项都可用。在讨论中,它讨论了unicode之前的DBC。我怀疑用于非Unicode程序的阿拉伯语必须在区域和语言选项中设置。正确,VB6对于Unicode来说是一团乱,虽然所有字符串都是Unicode,但大多数UI控件不是本地代码页转换,任何Declare API调用都要经过相同的转换。我用VB6编写了一个Unicode文本编辑器。这是我必须做的。Ret=loadLibrary C:\windows\system32\MSFTEDIT.dll如果Ret=0,则MsgBox Load Lib&Err.LastDllError Flags=WS_CHILD+WS_HSCROLL+WS_VSCROLL+WS_VISIBLE+ES_多行+ES_AUTOHSCROLL+ES_AUTOVSCROLL+ES_NOHIDESEL+ES_wantre将变暗barray作为字节barray=RICHEDIT50W&vbNullChar gRtfHwnd=CreateWindowExWS\u EX_ACCEPTFILES+WS_EX_CLIENTEDGE、barray0、Flags、0、0、ScaleXMe.ScaleWidth、vbTwips、vbPixels、vbTwips、vbPixels、Me.hWnd、vbNull、App.hInstance、vbNull,并获取文本对象对象模型ie COM以对象Ret=SendMessageAnygRtfHwnd、EM_GETOLEINTERFACE、0、TomObj Set TomDoc=TomObj的形式对其进行Dim TomObj