这是设置焦点和去除焦点的方法:
void SetFocus(BOOL bFocus = TRUE){
if(bFocus)
{
::PostMessage(m_Edit.m_hWnd,WM_SETFOCUS, (WPARAM)m_Edit.m_hWnd, 0)
::PostMessage(m_Edit.m_hWnd,WM_ACTIVATE, WA_ACTIVE, 0)
}
else
{
::PostMessage(m_Edit.m_hWnd,WM_KILLFOCUS, 0, 0)
}
}
控件的句柄和获得焦点的控件的句柄比较如何得到那个控件获得了焦点?API函数GetFocus()返回得到焦点的控件的局部
如何得到已知控件ID的某个控件的句柄
先用CWND类的GetDlgItem方法得到该控件的CWnd*指针
然后调用CWnd类的GetSafeHwnd方法得到该控件的句柄
if(GetDlgItem(控件ID)->GetSafeHwnd()==::GetFocus())
甚至可以直接比较指针不用比较句柄用CWnd类的GetFocus方法返回得到焦点的控件的CWnd*指针(不需要GetSafeHwnd了)
举例
mfc对话框工程添加wm_close、wm_timer消息响应函数
oninitdialog中添加定时器SetTimer(1,1000,NULL)
onclose中KillTimer(1)删掉定时器
添加两个edit控件
ontimer函数中
voidCMfcdlgDlg::OnTimer(UINTnIDEvent)
{
//TODO:Addyourmessagehandlercodehereand/orcalldefault
//if(GetDlgItem(IDC_EDIT2)->GetSafeHwnd()==::GetFocus())
if(GetDlgItem(IDC_EDIT2)==GetFocus())
{
MessageBox("edit2getfocus")
}
CDialog::OnTimer(nIDEvent)
}
程序每隔1秒检测一下焦点在不在edit2上如果在就messagebox输出信息
EDIT1,EDIT2;属性,EDIT1 可以编辑,EDIT2,不可以编辑if EDIT1 输入结束,按某个特定的键触发事件
事件描述为:将EDIT1的字符串添加到EDIT2尾部,EDIT2 获取焦点,EDIT1设置为空;相关的函数你可以查找MSDN
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)