VC 当EDIT失去焦点的同时,发送回车事件。

在OnKillFocus(CWnd*pNewWnd)中发送回车事件。用来保存此处EDIT中的值。谢谢。... 在OnKillFocus(CWnd* pNewWnd) 中发送回车事件。
用来保存此处EDIT中的值。

谢谢。
展开
 我来答
paperNote
推荐于2016-10-07 · TA获得超过386个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:260万
展开全部
我的做法是这的,在工程主对话框中添加一个CEdit和CButton,意思是当编辑框获得焦点时,输入内容,然后按下回车,焦点转到按钮上,当按钮被按下的那一刻,同时调用了CEdit子类的OnKillFocus函数...以下是具体内容:

1、为CEdit添加一个派生类CBaseEdit,然后添加一个OnKillFocus()函数

2、为OnKillFocus写入以下代码:
#include "TestDlg.h"//把当前主对话框作为CBaseEdit的父窗口
。。。
void CBaseEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);

// TODO: Add your message handler code here
MessageBox("CEdit的OnKillFocus函数被调用了!");
CTestDlg * parent = (CFocusDlg*)GetParent();//创建一个父窗口的指针对象
CString str;
GetWindowText(str);
parent->m_str = str;//当前编辑框中的内容赋给主对话框类成员变量m_str
parent->m_btn.SetFocus();
}

3、主对话框CTestDlg类中,为按钮添加消息响应函数
#include "BaseEdit.h"
CString m_str;
CButton m_btn;
CBaseEdit m_edit;
。。。

void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
MessageBox(m_str);
}

5、在主对话框类中添加PreTranslateMessage消息响应函数
BOOL CTestDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg==NULL) return false;
const HWND hwnd=pMsg->hwnd;

if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==13){
SetTheFocus();//按下回车键时调用该函数
}
return CDialog::PreTranslateMessage(pMsg);
}

6、在主对话框类添加一个自定义函数SetTheFocus
void CTestDlg::SetTheFocus()
{
HWND hwnd=::GetFocus();
int iID=::GetDlgCtrlID(hwnd);
switch(iID)//判断当前哪个控件获得焦点
{
case IDC_EDIT1:
m_btn.SetFocus();
break;
case IDC_BUTTON1:
::PostMessage(this->GetSafeHwnd(),WM_COMMAND,iID,(UINT)hwnd);
break;
}
}
追问
比如说我的EDIT中存放的是BUTTON的高,当在EDIT中输入80后按回车键,BUTTOn的高变成80。
可是当在EDIT中输入80后,再点击其他的东西,这是EDIT失去了焦点。我就想要当失去焦点的同时,不按回车键也能把BUTTON的高设置成功。
这个问题全部解决妥当了,我再送你50分。
追答
不用回车键反而会简单些,就在当前主对话框上,为每个控件以及对话框加上各自的鼠标单击消息响应函数就可以了,不需要用到PreTranslateMessage函数。
void CBaseEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);

// TODO: Add your message handler code here
MessageBox("CEdit的OnKillFocus函数被调用了!");
CTestDlg * parent = (CFocusDlg*)GetParent();//创建一个父窗口的指针对象
CString str;
GetWindowText(str);
parent->m_str = str;//当前编辑框中的内容赋给主对话框类成员变量m_str
}

void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point) //主对话框的单击消息响应
{
// TODO: Add your message handler code here and/or call default
this->SetFocus();
this->SetWindowText(m_str);
CDialog::OnLButtonDown(nFlags, point);
}
void CTestDlg::OnButton1() //按钮的消息响应
{
// TODO: Add your control notification handler code here
this->SetWindowText(m_str);
}

void CEditDlg::OnSetfocusEdit() //编辑框的消息响应
{
// TODO: Add your control notification handler code here
this->SetWindowText(m_str);
}
何处淬吴钩
2011-06-07 · TA获得超过5044个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2406万
展开全部
SendMessage(接收该消息的句柄,WM_KEYDOW,VK_RETURN,NULL);
追问
目前SendMessage是三个参数,接收该消息的句柄没有怎么办。
还有,sendmessage把消息给谁了,谁来接收啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤松独海
2011-06-07 · TA获得超过1513个赞
知道大有可为答主
回答量:1220
采纳率:0%
帮助的人:489万
展开全部
就发给本窗口,直接传m_hwnd就可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式