首先要实现输入内容不同颜色是可以实现的,比如使用一个可编辑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控件中的文本内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)