请教CEdit控件中的换行问题

leehomyoung 2012-11-12 07:13:46
现在想实现类似于QQ发送消息的机制,按住“Ctrl+Enter”组合键进行发送消息,已经在PreTranslate中捕捉消息实现,但是发现每次发送完消息,光标移到下一行,求教有么有解决方法,可以实现光标还是在控件起始位置,不需要重新换行?
...全文
291 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2012-11-14
  • 打赏
  • 举报
回复
不知道: GetKeyState(VK_RETURN) < 0 是不是等于 pMsg->wParam == VK_RETURN
leehomyoung 2012-11-14
  • 打赏
  • 举报
回复
If the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled. 没错,GetKeyState返回值说明
schlafenhamster 2012-11-14
  • 打赏
  • 举报
回复
" if((GetKeyState(VK_CONTROL) < 0) && (GetKeyState(VK_RETURN) < 0)) " 一个是 if ((pMsg->wParam == VK_RETURN)&&(GetKeyState(VK_CONTROL)&0x8000)) 吧?
schlafenhamster 2012-11-14
  • 打赏
  • 举报
回复
CXXXDlg 现在在 DLL 中,你把代码搬到 exe 中试试。
leehomyoung 2012-11-14
  • 打赏
  • 举报
回复
引用 34 楼 schlafenhamster 的回复:
不知道: GetKeyState(VK_RETURN) < 0 是不是等于 pMsg->wParam == VK_RETURN
一样的,两个都可以实现,问题是怎么解决这个换行问题
schlafenhamster 2012-11-13
  • 打赏
  • 举报
回复
上传“已经在PreTranslate中捕捉消息实现”
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_MESSAGE); pEdit->SetSel(0,-1); pEdit->Clear(); pEdit->PosFromChar(0); pEdit->SetSel(0,-1); pEdit->SetFocus(); 楼上的方法都试过了,还是不行
sumos 2012-11-13
  • 打赏
  • 举报
回复
话说你消息都发送了,文本还不清空
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
引用 28 楼 schlafenhamster 的回复:
那就是 PreTranlateMessage 有问题
嗯,有问题怎么解决?
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
引用 29 楼 VisualEleven 的回复:
C/C++ code? 12345678910111213141516 BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) { CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); ASSERT(pEdit && pEdit->GetSafeHwnd()); if……
试了啊,换行依旧
Eleven 2012-11-13
  • 打赏
  • 举报
回复
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
	CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
	ASSERT(pEdit && pEdit->GetSafeHwnd());
	if(pMsg->hwnd == pEdit->GetSafeHwnd())
	{
		if((GetKeyState(VK_CONTROL) < 0) && (GetKeyState(VK_RETURN) < 0))
		{
			// 调用你的OnBnClickedButtonSend()函数发送数据
			pEdit->SetSel(0, 0);
			pEdit->SetFocus();
			return TRUE;
		}
	}
	return CDialog::PreTranslateMessage(pMsg);
}
schlafenhamster 2012-11-13
  • 打赏
  • 举报
回复
那就是 PreTranlateMessage 有问题
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
嗯,照你说的做还是换行
schlafenhamster 2012-11-13
  • 打赏
  • 举报
回复
你先不调用:OnBnClickedButtonSend(); 直接 return TRUE; 看ctl+ret 还能不能 打到 edit中 。
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
还有我做的主窗口是dll,靠dll的主窗口提供给我PreTranslate接口,这个有没有影响?
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
,实际上它就是这样的哈
schlafenhamster 2012-11-13
  • 打赏
  • 举报
回复
"实际上按了一次Ctrl+Enter,消息可以被PreTranslate捕获到,但是Enter还会引起换行" 不可能!除非 PreTranlateMessage 中 不返回 TRUE。 就是: f ((pMsg->wParam == VK_RETURN)&&(GetKeyState(VK_CONTROL)&0x80)) { OnBnClickedButtonSend(); return TRUE; }
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
实际上按了一次Ctrl+Enter,消息可以被PreTranslate捕获到,但是Enter还会引起换行。我想知道有没有方法可以移动光标到编辑框开始位置处
leehomyoung 2012-11-13
  • 打赏
  • 举报
回复
不是,"strMsg.Replace("\r\n","");" 就是为了屏蔽发送的消息中只有回车换行符
cbzjzsb123 2012-11-13
  • 打赏
  • 举报
回复
加载更多回复(16)

15,979

社区成员

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

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