gpt4 book ai didi

windows - 更改组合框 RTL 样式时的镜像文本

转载 作者:可可西里 更新时间:2023-11-01 09:28:07 25 4
gpt4 key购买 nike

我正在尝试创建一个动态对话框,可以根据语言将其设为 RTL。但我有以下问题:每当我更改组合框的 RTL 样式时,文本就会颠倒过来。我尝试使用InvalidateRectRedrawWindow等函数,但无法使其正常工作。

相关代码(带WTL的WinAPI):

CComboBox combo = hWndCtl;
if(combo.GetCurSel() == 0)
combo.ModifyStyleEx(WS_EX_LAYOUTRTL, 0);
else
combo.ModifyStyleEx(0, WS_EX_LAYOUTRTL);

演示项目:here .

问题的演示:

enter image description here

最佳答案

您似乎正在响应 CBN_SELCHANGE 通知。这是在组合框在其编辑框中设置文本后发送的通知。

您应该改为响应 CBN_SELENDOKCBN_SELENDOKCBN_SELCHANGE 之前发送,这让您有时间在组合框设置文本之前修改样式。

switch (HIWORD(wParam))
{
case CBN_SELENDOK:// CBN_SELCHANGE:
if (SendMessage(hComboBox, CB_GETCURSEL, 0, 0) == 0)
ModifyStyleEx(hComboBox, WS_EX_LAYOUTRTL, 0);
else
ModifyStyleEx(hComboBox, 0, WS_EX_LAYOUTRTL);
break;
default:break;
}



编辑:Windows 10 具有淡入/淡出效果。如果您使用键盘更改组合选择,当颜色变淡时,文本仍然向后移动。

ComboBox 有一个可能导致此问题的编辑控件。最好使用 WS_EX_RIGHT | WS_EX_RTLREADING 而不是 WS_EX_LAYOUTRTL。这也适用于 CBN_SELCHANGE

case CBN_SELENDOK: //(or CBN_SELCHANGE)
if (SendMessage(hComboBox, CB_GETCURSEL, 0, 0) == 0)
ModifyStyleEx(hComboBox, WS_EX_RIGHT | WS_EX_RTLREADING, 0);
else
ModifyStyleEx(hComboBox, 0, WS_EX_RIGHT | WS_EX_RTLREADING);
break;

关于windows - 更改组合框 RTL 样式时的镜像文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38993331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com