求如何获取CEdit编辑框中当前输入焦点的位置 比如编辑框中有文本 abcdefG123 ,当用鼠标单击 G1 之间是,输入焦点就定位在 G1 之间现在的问题是,此时我要得到输入焦点的位置,即相对于整个文本头部的偏移位置 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 函数功能:该函数将插入标记的位置(按客户区坐标)信息拷贝到指定的POINT结构中。 函数原型:BOOL GetCaretPos(LPP0lNT IpPoint); 这也只是得到位置的POINT结构呀 CEdit::GetSel()函数你会获得2个位置,开始位置,结束位置。。如果没有选择的文本,那就是开始位置==结束位置==插入位置。 这个我已经试过了,测试的时候CEdit编辑框中有内容,在处理CEdit的ON_EN_SETFOCUS消息中调用GetSel(int &pos1,int &pos2),结果pos1和pos1始终都是0呀!! 那是因为全选了,不要在ON_EN_SETFOCUS中调用。或者,当发生鼠标或者键盘消息时,用一个变量记下当前的位置,懂了吧。。这样就能在ON_EN_SETFOCUS中获得当前的位置了 就是这个函数,之所以你得到的结果都是0,是由于你在ON_EN_SETFOCUS消息中处理的。当接受到ON_EN_SETFOCUS消息时,只是说哪个空间获得了焦点,并不 意味着输入光标已经确定在编辑框中的某个位置了。你可以尝试在WM_LBUTTONUP消息中处理:1、在你的.h文件中添加BOOL PreTranslateMessage(MSG *pMsg);2、在.cpp中:BOOL CDlgXXXX::PreTranslateMessage(MSG *pMsg){ if(pMsg->message == WM_LBUTTONUP) { if(pMsg->hwnd == Your_EditCtrl.m_hWnd) //编辑框 { int lStartPos=-1,lEndPos=-1; Your_EditCtrl.GetSel(lStartPos,lEndPos); if(lStartPos == lEndPos) //表示设置鼠标输入焦点 { Your_lCurSorPos = lStartPos; } } }}试试吧 鼠标移开菜单后状态栏怎样恢复为"ready"? XP 文件夹左侧那个任务导航的控件,有谁知道怎么实现?有现成的控件吗? 复制到剪贴板上的中文变成乱码问题 现在买《深入浅出MFC》第二版怎么样,大家指点一下我对VC++的学习! 工作目录是什么意思? 怎样最大化视图 谁知道计算机重启和关机的函数吗? 为何自己写的dll调用函数会出错,详见内容 如何用API函数建立快捷方式? 如何更新view的显示内容?(菜鸟请教) 对一段预编译代码的不理解 关于仿函数中operator()的疑问
函数原型:BOOL GetCaretPos(LPP0lNT IpPoint);
这个我已经试过了,测试的时候CEdit编辑框中有内容,在处理CEdit的ON_EN_SETFOCUS消息中调用
GetSel(int &pos1,int &pos2),结果pos1和pos1始终都是0呀!!
就是这个函数,之所以你得到的结果都是0,是由于你在ON_EN_SETFOCUS消息中处理的。当接受到ON_EN_SETFOCUS消息时,只是说哪个空间获得了焦点,并不 意味着输入光标已经确定在编辑框中的某个位置了。
你可以尝试在WM_LBUTTONUP消息中处理:
1、在你的.h文件中添加BOOL PreTranslateMessage(MSG *pMsg);
2、在.cpp中:BOOL CDlgXXXX::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_LBUTTONUP)
{
if(pMsg->hwnd == Your_EditCtrl.m_hWnd) //编辑框
{
int lStartPos=-1,lEndPos=-1;
Your_EditCtrl.GetSel(lStartPos,lEndPos);
if(lStartPos == lEndPos) //表示设置鼠标输入焦点
{
Your_lCurSorPos = lStartPos;
}
}
}
}
试试吧