如何在两个richit控件中连续选择内容
How to continuously select content in TWO RichEdit controls?
我目前正在做一个项目,它将有两个richeit控件一个靠近另一个:让我们说RichEdit1在左边,RichEdit2在右边。
我想在项目中启用的用户场景是:
- 用户鼠标LButton在RichEdit1中的某处,例如在第3个字符之前,总共7个字符。
- 用户将鼠标拖动到RichEdit2,例如在第6个字符之后,总共11个字符。
- 用户鼠标左键向上。
我想看到RichEdit1第3个字符结束和RichEdit2开始到第6个字符被选中。
目前我注意到,一旦鼠标LButton在RichEdit1上,当我将鼠标移动到RichEdit2上时,在我释放鼠标之前,RichEdit2无法接收鼠标事件。
任何建议都将不胜感激。谢谢你!
当在RichEdit1上按下鼠标按钮时,它捕获鼠标,因此随后的鼠标消息被发送到RichEdit1,直到鼠标按钮被释放。这就是为什么当拖动到RichEdit2上时,RichEdit2不接收任何鼠标事件。
您必须处理RichEdit1中的鼠标移动消息,并检查它们的坐标是否在RichEdit1的客户端区域之外。如果是,将它们转换为相对于RichEdit2的客户端区域的坐标,然后根据需要将EM_SETSEL
/EM_EXSETSEL
消息发送给RichEdit2。例如:
int RichEdit2StartIndex = -1;
...
// in RichEdit1's message handler...
case WM_MOUSEMOVE:
{
if ((wParam & MK_LBUTTON) == 0)
break;
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
RECT r;
GetClientRect(hwndRichEdit1, &r);
if (xPos < (r.right - r.left))
{
if (RichEdit2StartIndex != -1)
{
SendMessage(hwndRichEdit2, EM_SETSEL, -1, 0);
RichEdit2StartIndex = -1;
}
}
else
{
POINT pt;
pt.x = xPos;
pt.y = yPos;
MapWindowPoints(hwndRichEdit1, hwndRichEdit2, &pt, 1);
POINTL pl;
Pl.x := pt.x;
Pl.y := pt.y;
int idx = SendMessage(hwndRichEdit2, EM_CHARFROMPOS, 0, (LPARAM)&Pl);
if (idx != -1)
{
if (RichEdit2StartIndex == -1)
RichEdit2StartIndex = idx;
SendMessage(hwndRichEdit2, EM_SETSEL, RichEdit2StartIndex, idx);
}
}
break;
}
当从RichEdit2拖动到RichEdit1时,反之亦然。
并且确保两个RichEdit控件都应用了ES_NOHIDESEL
样式,这样你就可以同时在两个控件中看到选区
相关文章:
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 在编译时,C++项目抛出错误 C2228,这是预期的,因为控件在运行时未达到该点
- 如何更改窗体上所有控件的标题?[C++生成器]
- 双击更改 mfc 中列表控件中的行的颜色
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 如何从代码本身向 wxwidgets 中的文本控件插入字符?
- 如何在MFC中的静态文本控件上插入图标?
- 我的主窗口在创建时或单击更新区域时是否会收到编辑控件?
- 如何在Qt C++中向自定义控件添加属性?
- C/C++ 检测双击 TVItem 的常用控件
- 从C++标头中导入常量而不是硬编码它们:扩展 .net 控件?
- 控件不会在选择函数旁边移动
- MFC:我们能否扩展CEditView中存在的CEdit控件类行为
- 通过嵌入式 IWebBrowser2 控件中的链接打开 youtube 搜索失败
- 查找素数:错误:控件到达非void函数的末尾
- C++ 获取"控件可能会到达约翰逊-特罗特代码上的非空函数的末尾
- C++WIN32-将RTF数据加载到Rich Edit控件
- 由非托管(C++)COM服务器实例化的托管(C#)控件在Windows更新后损坏
- 如何在两个richit控件中连续选择内容