我现在想实现的是这样的一个功能,我打算在主窗口屏幕上双击鼠标,这时候再鼠标的位置创建一个编辑控件,
这个编辑空间中默认有hello world这样的文本。我的问题是,我双击之后创建了编辑控件,但是这时候看不到光标在闪烁,必须得鼠标再次点击一下文本框才行。我现在想要的效果是,双击创建编辑控件后可以看到光标闪烁,而且光标位于这段文本的最右侧,同时可以直接输入文字编辑。我尝试了SetFocus(hEdit); //加上这句之后可以直接编辑了,但是看不到光标删除,而且是在最左侧插入字符。
ShowCaret(hEdit);// 加上这个之后仍然看不到光标闪烁,并且产生的另外一个问题是点击鼠标居然也看不到光标了。各位帮忙看看咋回事儿呢?
这个编辑空间中默认有hello world这样的文本。我的问题是,我双击之后创建了编辑控件,但是这时候看不到光标在闪烁,必须得鼠标再次点击一下文本框才行。我现在想要的效果是,双击创建编辑控件后可以看到光标闪烁,而且光标位于这段文本的最右侧,同时可以直接输入文字编辑。我尝试了SetFocus(hEdit); //加上这句之后可以直接编辑了,但是看不到光标删除,而且是在最左侧插入字符。
ShowCaret(hEdit);// 加上这个之后仍然看不到光标闪烁,并且产生的另外一个问题是点击鼠标居然也看不到光标了。各位帮忙看看咋回事儿呢?
{
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);
}
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) ); //运行到这里程序就挂了,这句话感觉没有问题啊。
这个函数要获取鼠标响应,你点击编辑框也要获得鼠标响应,所以在处理这个事件的时候要分清楚,鼠标点击的是子窗口控件还是主窗体。
case WM_LBUTTONDOWN:
switch(LOWORD(wParam))
{
case 1022://是子窗口控件就略过(可能要列出所有子窗口控件的ID)
return 0; default://除了子窗口以外就是主窗体了
OnLbuttonDown(hWnd,lParam);//在窗口上按住左键可拖动窗口
break;