MFC Edit Control 获得焦点

MFC Edit Control 获得焦点,第1张

这是设置焦点和去除焦点的方法:

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7748964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存