js怎样获取可编辑div中光标的位置

js怎样获取可编辑div中光标的位置,第1张

首先要实现输入内容不同颜色是可以实现的,比如使用一个可编辑iframe就可以了,textarea是不行的。

至于功能的实现,我觉得不需要获取结束位置。

首先检测鼠标事件,如果有点击编辑区的某个位置,你就获取当前鼠标的落点,然后用innerHTML加入一对标签,<span class="color:#XXXXXX"></span>,所有输入内容都在这个span中间。效果就是输入的所有文字都变色。

不知道楼主明白没?

我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。

不过,我可以写几个鼠标函数给你参考一下。

首先了解一下鼠标的中断。

_AX=0x01 表示显示光标

_AX=0x02 停止显示光标

_AX=0x03 读取光标位置与案件

_AX=0x04 设置光标位置

所以啊。根据这四个中断,有以下几个函数

----------------------------------------------------

void MouseOn(void)//鼠标光标显示

{

_AX = 0x01;

geninterrupt(0x33);

}

----------------------------------------------------

void MouseOff(void)//鼠标光标隐藏

{

_AX = 0x02;

geninterrupt(0x33);

}

---------------------------------------------------

void MouseSetXY(int x,int y)//设置当前位置

{

_CX = x,

_CD = y;

_AX = 0x04;

geninterrupt(0x33);

}

---------------------------------------------------

int LeftPress(void)//鼠标左键按下

{

_AX = 0x33;

geninterrupt(0x33);

return(_BX&1);

}

-----------------------------------------------------

鼠标右键的应该也会了吧。不过要return(_BX&2);

-----------------------------------------------------

void MouseGetXY(void)//得到当前位置

{

_AX = 0x33;

geninterrupt(0x33);

MouseX = _CX;

MouseY = _DX;

}

---------------------------------------------------------------

最好要复制粘贴,打字打得手疼。

看到你的问题我感到有点纠结,没弄明白什么叫“修改状态”。\x0d\GetDlgItem (IDC_EDIT1)->SetFocus();//这里可以使编辑框变成可输入状态,但用的地方一定要用对,放在OnInitDialog()中就不行。\x0d\你要的修改状态是不是这样子的:比如说你原来的框里有字符abc,修改状态也就是编辑框变成可输入状态,而且abc是选定的(颜色变蓝色),如果你输入字符,abc就会被替换成你输入的字符。\x0d\ CString str="abc";\x0d\ CEdit p=(CEdit)GetDlgItem(IDC_EDIT1);\x0d\ p->SetFocus(); \x0d\ p->SetWindowText(str);\x0d\ p->SetSel(0,-1);\x0d\当然,换成p->SetSel(strGetLength(),-1);abc不会被选定,输入光标在abc的最后。\x0d\不知道你是不是这个意思。

1要获取鼠标在屏幕上的 位置代码为:

Point pt = ControlMousePosition;

2获取鼠标在窗体上的位置可根据单击窗体事件获得,在事件中写上:

private void Form1_MouseClick(object sender, MouseEventArgs e)

{

Point p = new Point(eX, eY);

}

全手打,亲自实验 !!!!   请把分给我,

定义子类 CMyWin : public CWnd 继承CWnd

CMyWin mywin;放在父类的头文件中  局部的话 运行完就结束了

按钮响应事件

mywin = new CMyWin();

 mywin->Create(0,"CNewWnd",WS_CHILD|WS_BORDER|WS_VISIBLE,CRect(140,10,660,430),this,1000,0); 

子类主要实现

class CMyWin :public  CWnd

{

public:

    CMyWin();

    CEdit edt1;

    virtual ~CMyWin();

    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); //重要

    DECLARE_MESSAGE_MAP();//重要

};

//以下3句写到 类的实现中  CPP中 随便找个地方

BEGIN_MESSAGE_MAP(CMyWin, CWnd)//重要

    ON_WM_CREATE()//重要

END_MESSAGE_MAP()//重要

int CMyWin::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

edt1 = new CEdit();

        edt1->CreateEx(WS_EX_CLIENTEDGE,_T("EDIT"),NULL,

        WS_CHILD | WS_VISIBLE |WS_BORDER | WS_TABSTOP,

        CRect(1,1,50,50),this,125); //重要 有时候边框大小 你找不到 区域调整好 

return 0;

}

//你的代码出错主要是消息循环 WINDOWS是基于消息的

没有看到代码。只能帮你分析一下。

UpdateData(FALSE)函数的意思是:

将窗口控件的变量的值赋值到控件上,UpdateData(TRUE)将控件上的值赋值到窗口控件的变量。可能问题就出在多次调用UpdateData(FALSE)上。

也可能是因为你在响应编辑框EN_CHANGE消息时,处理过程中调用到了SetSel()函数,造成你每次编辑框内容改变就会从新获取焦点,这样光标就变动了。

---------------------------------------

补充:

你是不是想通过鼠标点击某个按钮把内容加到编辑框里例如计算器?

不管怎么样,你非得用SetSel()的话,你看看SetSel()参数设置错没有

CString str;

m_editGetWindowText(str);//m_edit是编辑框CEdit变量

int i=strlen(str);

m_editSetSel(i,i);//i表示光标选中的起始和结束位置范围

---------------------------------------

——————————————————————————————————

再次补充。

UpdateData(FALSE)相当于刷新编辑框。当编辑框刷新后焦点将在最前面。

你写成这样就对了:

UpdateData(FALSE);

((CEdit)GetDlgItem(IDC_INPUT_EDIT))->SetSel(m_strinputGetLength(), m_strinputGetLength(),FALSE);

说下转大小写的问题。

可以使用CString的MakeUpper()函数。

我还想说下你的算法。

if(c<'0' || c>'9' && c<65 || c>70)

你的这句我真理解不了,看不懂。 感觉你的算法还有点问题。

我给你改了下代码:

UpdateData(TRUE);

char c=m_strinputGetAt(m_strinputGetLength()-1);

//下面这句判断输入的是否是0-9或者A-F或者a-f不是就清空。你需要其他的自己改

if ((c>='0' && c<='9') || (c>='A' && c<='F') || (c>='a' && c<='f'))

m_strinputMakeUpper();//整个字符串里的小写转大写

else

m_strinputEmpty();

UpdateData(FALSE);

((CEdit)GetDlgItem(IDC_EDIT1))->SetSel(m_strinputGetLength(),\

m_strinputGetLength(),FALSE);

以上就是关于js怎样获取可编辑div中光标的位置全部的内容,包括:js怎样获取可编辑div中光标的位置、c语言 获取鼠标键盘事件、vc6.0如何使用getwindowtext函数获取edit控件中的文本内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9520884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存