VC 当EDIT失去焦点的同时,发送回车事件。
在OnKillFocus(CWnd*pNewWnd)中发送回车事件。用来保存此处EDIT中的值。谢谢。...
在OnKillFocus(CWnd* pNewWnd) 中发送回车事件。
用来保存此处EDIT中的值。
谢谢。 展开
用来保存此处EDIT中的值。
谢谢。 展开
3个回答
展开全部
我的做法是这的,在工程主对话框中添加一个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;
}
}
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);
}
展开全部
SendMessage(接收该消息的句柄,WM_KEYDOW,VK_RETURN,NULL);
追问
目前SendMessage是三个参数,接收该消息的句柄没有怎么办。
还有,sendmessage把消息给谁了,谁来接收啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就发给本窗口,直接传m_hwnd就可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询