请教CEdit控件中的换行问题

leehomyoung 2012-11-12 07:13:46
现在想实现类似于QQ发送消息的机制,按住“Ctrl+Enter”组合键进行发送消息,已经在PreTranslate中捕捉消息实现,但是发现每次发送完消息,光标移到下一行,求教有么有解决方法,可以实现光标还是在控件起始位置,不需要重新换行?
...全文
261 点赞 收藏 37
写回复
37 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
加载更多回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2012-11-12 07:13
社区公告
暂无公告