Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从文本控件检索字符位置的工作区坐标

从文本控件检索字符位置的工作区坐标
EN

Stack Overflow用户
提问于 2011-04-10 20:41:21
回答 4查看 1.1K关注 0票数 3

我需要编写一个函数,它可以从文本编辑控件中的字符位置获取屏幕坐标。我正在使用wxWidgets框架提供的文本编辑控件。wxTextCtrl没有公开任何能够提供此信息的API函数。在Windows上,我可以通过向文本控件发送波夫罗玛来获取信息。

我想知道如何在Linux等其他环境中也这样做。现在,这只需要在运行在X窗口系统之上的桌面环境上完成,比如GNOME、KDE和XFCE。有办法吗?在这些DE上,谁会像文本编辑那样绘制控件?它是由X管理的,还是由特定DE设计的?

任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-24 06:25:44

当然,这是可能的,但是您需要实现一个wxTextCtrl派生控件,它依赖于任何特定的wxWidgets端口(wxMSW、wxGTK等)的底层平台功能。

所以,因为您已经询问了Linux实现的情况。让我解释一下如何在wxGTK 2.9中实现它。下面是wxTextCtrlExt控件的定义:

代码语言:javascript
运行
AI代码解释
复制
#include <wx/textctrl.h>
#include <wx/gdicmn.h>

//-----------------------------------------------------------------------------
// wxTextCtrlExt
//-----------------------------------------------------------------------------

class wxTextCtrlExt : public wxTextCtrl
{
public:
    wxTextCtrlExt() : wxTextCtrl() { }
    wxTextCtrlExt(wxWindow* parent,
                  wxWindowID id,
                  const wxString& value = wxEmptyString,
                  const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
                  long style = wxTE_MULTILINE,
                  const wxValidator& validator = wxDefaultValidator,
                  const wxString& name = wxTextCtrlNameStr)
    : wxTextCtrl(parent, id, value, pos, size, style, validator, name ) { }

    wxPoint GetPositionCoords(long pos);
};

以及wxGTK实现:

代码语言:javascript
运行
AI代码解释
复制
#include "wxTextCtrlExt.h"
#include <wx/defs.h>

#include <gtk/gtk.h>

wxPoint wxTextCtrlExt::GetPositionCoords(long pos)
{
    if ( IsMultiLine() ) {
        GtkTextView* txtView = GTK_TEXT_VIEW(m_focusWidget);
        GtkTextBuffer* txtBuffer = gtk_text_view_get_buffer(txtView);

        GtkTextIter iter;
        gtk_text_buffer_get_iter_at_offset(txtBuffer, &iter, pos);

        GdkRectangle location; // output location in buffer coordinates
        gtk_text_view_get_iter_location(txtView, &iter, &location);

        return wxPoint(location.x, location.y);
    }

    return wxPoint(0,0);
}

您还可能希望将缓冲区坐标转换为部件的坐标:

代码语言:javascript
运行
AI代码解释
复制
    // If we need to convert our coordinates to 
    GdkPoint out;
    gtk_text_view_buffer_to_window_coords(txtView, GTK_TEXT_WINDOW_WIDGET, location.x, location.y, &out.x, &out.y );

    return wxPoint(out.x, out.y);

如您所见,这个特定的实现没有考虑到一行文本条目,这就是在创建wxTE_MULTILINE控件时需要使用wxTextCtrlExt样式的原因。

下面是如何使用它。让我们将m_Text2作为指向wxTextCtrlExt类的子对象的指针:

代码语言:javascript
运行
AI代码解释
复制
long iCharPos = m_Text2->GetInsertionPoint();
long iCharPosMax = m_Text2->GetLastPosition();
wxPoint pos = m_Text2->GetPositionCoords(iCharPos);

现在我们在pos中得到了字符位置坐标。就这样!

一些你可能感兴趣的链接:

现在都是关于你的第二个问题了。

在这些DE上,谁会像文本编辑那样绘制控件?它是由X管理的,还是由特定DE设计的?

这取决于您使用的wxWidgets端口。wxMSW和wxGTK端口分别使用Win32和GTK+2本机控件。基于wxUniversal的端口(如wxX11、wxMGL)由wxWidgets自己绘制所有控件。X窗口系统本身并不强制用户界面。它提供了构建GUI环境的基本框架:在屏幕上绘制和移动窗口,并与鼠标和键盘交互。

票数 3
EN

Stack Overflow用户

发布于 2011-04-19 19:55:08

我不完全清楚所寻求的字符位置,但解决方案可能涉及到wxTextCtrl::XYToPosition()和/或wxTextCtrl::PositionToXY(),但还不清楚结果应该在哪个坐标系中表示。

wxTextCtrl继承了提供wxWindow::GetPosition()wxWindow。父程序由wxWindow::GetParent找到。

在他们之间,我怀疑答案很容易得到。

票数 0
EN

Stack Overflow用户

发布于 2011-04-22 03:22:05

我的上一次wxWidgets经历已经有一段时间了,但是如果您找不到一种更简单(更短)的方法,那么在插入符号之前计算文本的范围(例如使用wxDC::GetTextExtent())是否是一种可能的方法来找到您想要的位置?这将给出一个相对于wxTextCtrl中文本开头的位置。您可能需要考虑边框大小和边框与实际文本之间的间距。如果有必要,可以通过wxTextCtrl::HitTest()进行细化?

顺便说一下,wxStyledTextCtrl怎么样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5616821

复制
相关文章
如何从工作区、暂存区和Git仓库删除文件
版权声明:转载请注明出处。 https://blog.csdn.net/bagpiping/article/details/83827449
小火柴棒
2019/06/11
1.9K0
【Android 应用开发】Android 组件 位置坐标 属性 ( 组件位置属性 | 父容器坐标系坐标 | 窗口坐标系坐标 | 屏幕坐标系坐标 | 触摸坐标 )
left , top , right , bottom 是组件相对于父容器的位置 , 该值一般不会改变 ;
韩曙亮
2023/03/27
4K0
git mv 从工作区和暂存区中重命名内容
它会将内容从工作区和暂存区中重命名,手动重命名需要执行两步操作,git mv 一步即可
很酷的站长
2022/12/16
4690
git mv 从工作区和暂存区中重命名内容
Qml获取某个控件的全局坐标
  点击详情(detail)按钮调出菜单列表。菜单栏的位置需要定位详情按钮的下面,那么就需要知道具体坐标。
Qt君
2023/03/17
2.8K0
Qml获取某个控件的全局坐标
【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )
在上一篇博客 【Android 应用开发】Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 ) 中 , 简要介绍了 Paint.getTextBounds() 函数获取的 Rect 边界 , 今天补充下精准的绘图信息 ;
韩曙亮
2023/03/29
2.5K0
【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )
替换字符串指定位置字符 php,php如何从指定位置替换字符串
在php中可以使用“substr_replace”函数实现从指定位置替换字符串,其语法是“substr_replace(string,replacement,start,length)”,参数start表示从指定位置开始替换。
全栈程序员站长
2022/08/31
3.6K0
替换字符串指定位置字符 php,php如何从指定位置替换字符串
js获取鼠标当前位置坐标
chrome和safari一条龙通杀!完全支持所有属性.其中(offsetX和layerX都是以border为参考点)
OECOM
2020/07/01
14.9K0
React技巧获取鼠标坐标位置
原文链接:https://bobbyhadz.com/blog/react-get-mouse-position[1]
chuckQu
2022/08/19
2.3K0
React技巧获取鼠标坐标位置
工作区介绍
1.一个代码包可以有多个以.go为扩展名的源码文件组成如下,demo1.go demo2.go 和 main.go 都属于代码包main,注意同一个目录下的.go 文件只能属于一个代码包
酷走天涯
2019/06/11
8170
工作区介绍
[C#][控件]文本类控件
文本控件 1. TextBox 1.1 创建密码文本框 eg:     textBox1.UseSystemPasswordChar = true;     textBox1.PasswordChar = '*'; 1.2 突出显示文本框文本 eg:     textBox1.Text = "大江东去,浪淘尽,千古风流人物";     textBox1.SelectionStart = 3;        //从位置3开始选择     textBox1.SelectionLength = 5;        //选择5个字符 2. RichTextBox 2.1     richTextBox1.SelectionIndent = 8;            //使控件的左边缘与文本的左边缘间的距离为8像素     richTextBox1.SelectionRightIndent = 12;        //使控件的右边缘与文本的右边缘间的距离为12像素
静默虚空
2022/05/07
3750
Git工作流程、工作区、缓存区、版本库
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
子润先生
2021/07/08
1.1K0
MatLab工作区
MatLab 中的基础工作区是针对当前 MatLab 窗口内的脚本代码而言的(无论是命令行窗口输入的还是 M 脚本文件中的),是所有脚本代码所共享的(即对当前 MatLab 窗口而言是唯一的),是对外可见的(即 MatLab 窗口中显示的工作区),与当前 MatLab 窗口是共存亡的。
hotarugali
2022/03/01
1.3K0
从Slack工作区中提取敏感数据的工具:SlackPirate
SlackPirate是一款Slack信息枚举和提取工具,可以帮助广大研究人员从Slack工作区中提取敏感信息。该工具基于Python开发,并使用了原生Slack API来从给定访问令牌的Slack工作区中提取“有意思”的信息。
FB客服
2021/07/02
7100
设置坐标轴刻度的位置和样式
在matplotlib中,通过子模块ticker可以对坐标轴刻度的位置和样式进行设置。刻度线分为major和minor ticks, 通过以下4个函数可以对其位置和样式进行设置
生信修炼手册
2020/09/23
3.2K0
设置坐标轴刻度的位置和样式
Flutter Text(文本控件)
Flutter中的Text相当于Android中的TextView,用于展示文本。
毛大姑娘
2020/09/10
5.1K0
Flutter Text(文本控件)
ABB 1SBP260109R1001 可视化从远程位置检索
此外,来自电源单元 (PSU) 的数据可能会被保存并在以后进行分析以确定能源优化需求。或者,也许可以对中央 PLC 进行编程,使用硬件信号或总线命令关闭选定的 PSU,以切换到使用待机模式,以节省不必要的能源消耗。板载监控功能可以随时提供电源和指定连接负载的实时数据,并根据需要传输信号错误。
用户10530100
2023/05/08
1270
ABB 1SBP260109R1001 可视化从远程位置检索
jQuery控制控件文本的长度
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
1.3K0
Git之工作区和暂存区
工作区和暂存区 Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。 先来看名词解释。 工作区(Working Directory) 就是你在电脑里能看到的目录,比如
兮动人
2021/06/11
9120
Git之工作区和暂存区
点击加载更多

相似问题

如何从WhatsApp位置共享中检索位置坐标?

78

如何从给定的坐标中检索位置/区域?

110

WinAPI从编辑控件检索文本

28

android位置坐标检索0

10

从windows注册表中保存的工作区中检索窗口位置

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文