请教各位,一个关于win32 编辑控件的光标问题?

dingzhanxing 2012-09-06 04:39:46
我现在想实现的是这样的一个功能,我打算在主窗口屏幕上双击鼠标,这时候再鼠标的位置创建一个编辑控件,
这个编辑空间中默认有hello world这样的文本。

我的问题是,我双击之后创建了编辑控件,但是这时候看不到光标在闪烁,必须得鼠标再次点击一下文本框才行。

我现在想要的效果是,双击创建编辑控件后可以看到光标闪烁,而且光标位于这段文本的最右侧,同时可以直接输入文字编辑。

我尝试了SetFocus(hEdit); //加上这句之后可以直接编辑了,但是看不到光标删除,而且是在最左侧插入字符。
ShowCaret(hEdit);// 加上这个之后仍然看不到光标闪烁,并且产生的另外一个问题是点击鼠标居然也看不到光标了。

各位帮忙看看咋回事儿呢?
...全文
312 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
house_ 2013-08-10
  • 打赏
  • 举报
回复
是不是使用了移动窗体的函数(也就是用鼠标点击窗体上非标题栏的部分不松开,并移动鼠标,窗体随之移动)? 这个函数要获取鼠标响应,你点击编辑框也要获得鼠标响应,所以在处理这个事件的时候要分清楚,鼠标点击的是子窗口控件还是主窗体。 case WM_LBUTTONDOWN: switch(LOWORD(wParam)) { case 1022://是子窗口控件就略过(可能要列出所有子窗口控件的ID) return 0; default://除了子窗口以外就是主窗体了 OnLbuttonDown(hWnd,lParam);//在窗口上按住左键可拖动窗口 break;
schlafenhamster 2012-09-06
  • 打赏
  • 举报
回复
m_hEdit = 0 ??
dingzhanxing 2012-09-06
  • 打赏
  • 举报
回复
我是如下这样做的,为啥不行呢,我的目的是双击之后直接选中编辑控件里的文本:

m_hEdit = CreateWindowEx( 0, TEXT("Edit"), m_atcText, WS_VISIBLE | WS_CHILD |
WS_BORDER, m_ptTextPos.x, m_ptTextPos.y, m_iTextWidth,m_iTextHeight, m_hParent, NULL, NULL, NULL);

SetFocus(m_hEdit);
SendMessage( m_hEdit, EM_SETSEL, 0, lstrlen(m_atcText) ); //运行到这里程序就挂了,这句话感觉没有问题啊。
schlafenhamster 2012-09-06
  • 打赏
  • 举报
回复
SetCaretPos();
Eleven 2012-09-06
  • 打赏
  • 举报
回复
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
{
if((WM_LBUTTONDBLCLK == pMsg->message) && (GetSafeHwnd() == pMsg->hwnd))
{
CEdit edit;
CPoint pt = pMsg->pt;
ScreenToClient(&pt);
edit.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, CRect(pt, CSize(100, 20)), this, 0x11);
edit.SetFocus();
edit.SetSel(-1, -1);
edit.ReplaceSel(_T("Hello, World!"));
edit.UnsubclassWindow();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧