MFC对话框对控件失去焦点和获取焦点的统一处理,WM_KILLFOCUS消息失败

50 篇文章 0 订阅

如上图,我实现了WM_KILLFOCU的映射,但是对话框除了第一次会进去

下面的消息函数后,再也没有进来过来

我在对话框上摆放的Edit控件失去焦点也不会进来

后面无意中看到一篇文章,正确的处理方式应该是这样

重载虚函数,OnCommand 

BOOL CDlgConfigWebservice::OnCommand(WPARAM wParam, LPARAM lParam)
{
    // TODO: 在此添加专用代码和/或调用基类
    UINT nID = LOWORD(wParam);
    HWND hWndCtrl = (HWND)lParam;
    int nCode = HIWORD(wParam);

    if(nCode == EN_SETFOCUS)
    {
        m_nFocusEditId = nID;
    }
    else if (nCode == EN_KILLFOCUS)
    {
    }
    else if (nCode == BN_CLICKED)
    {
        m_nFocusEditId = -1;
    }

    return CDlgConfigObject::OnCommand(wParam, lParam);
}

 所有编辑控件的获取焦点和失去焦点,上面都可以监控到了

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MFC是Microsoft Foundation Class的缩写,是一组用于编写Windows桌面应用程序的C++类库。MFC提供了一些常用的用户界面控件和基础功能,包括对话框、按钮、菜单、文本框等。 如果MFC对话框无法正常显示,可能有多种原因导致,以下是一些可能的解决方法: 1. 检查资源文件是否正确:对话框资源文件(.rc)中的ID是否与代码中的ID匹配。 2. 检查类名是否正确:对话框类名(如CMyDialog)是否正确。 3. 检查OnInitDialog函数是否正确:OnInitDialog函数是对话框创建时自动调用的函数,可以在该函数中对对话框控件进行初始化。 4. 检查控件ID是否正确:控件ID应该与资源文件中定义的ID相同,否则可能导致控件无法正常显示。 5. 检查控件变量是否正确:在代码中声明控件变量时,要确保变量类型与控件类型相同,并且变量名称和ID名称相同。 6. 检查消息映射是否正确:在消息映射表中,确保有处理对话框消息的函数,并且函数名称和ID名称相同。 希望以上内容对您有所帮助。 ### 回答2: 在MFC对话框中判断失去焦点的方法有多种途径。以下是其中的两种常见方式: 1. 通过WM_KILLFOCUS消息进行判断: 可以通过对话框类重载OnKillFocus()函数来处理失去焦点事件。当对话框失去焦点时,该函数会被触发。在OnKillFocus()函数中,可以编写相应的代码来处理失去焦点的逻辑。 例如: ``` void CMyDialog::OnKillFocus(CWnd* pNewWnd) { CDialogEx::OnKillFocus(pNewWnd); // 对失去焦点处理代码 } ``` 2. 使用控件消息进行判断: 可以通过重载控件类的响应函数来判断失去焦点事件。常见的控件如文本框、按钮等,都有相应的响应函数来处理消息。 例如,对于编辑框控件(CEdit)来说,可以重载其响应函数OnKillFocus()来处理失去焦点的逻辑。 ``` void CMyEdit::OnKillFocus(CWnd* pNewWnd) { CEdit::OnKillFocus(pNewWnd); // 对失去焦点处理代码 } ``` 然后,将自定义的CMyEdit控件添加到对话框资源中并设置ID,通过对应的响应函数来处理失去焦点事件。 以上是两种常见的判断MFC对话框失去焦点的方法,在实际应用中可根据需求选择合适的方式来进行处理。 ### 回答3: MFC对话框中,可以使用WM_KILLFOCUS消息来判断对话框是否失去焦点。具体的步骤如下: 1. 在对话框类的消息映射中添加WM_KILLFOCUS消息处理函数。例如,可以在对话框类的头文件中添加如下代码: afx_msg void OnKillFocus(CWnd* pNewWnd); 2. 在对话框类的消息映射中添加消息处理函数的声明。例如,在对话框类的实现文件中添加如下代码: BEGIN_MESSAGE_MAP(CYourDialog, CDialog) ON_WM_KILLFOCUS() END_MESSAGE_MAP() 3. 在对话框类中实现OnKillFocus函数。例如,在对话框类的实现文件中添加如下代码: void CYourDialog::OnKillFocus(CWnd* pNewWnd) { CDialog::OnKillFocus(pNewWnd); // 在此处添加失去焦点后的处理逻辑 } 4. 当对话框失去焦点时,系统会发送WM_KILLFOCUS消息对话框类中的OnKillFocus函数。在OnKillFocus函数中,可以添加需要执行的失去焦点后的处理逻辑。 总结来说,通过重载对话框类的OnKillFocus函数,可以在对话框失去焦点时进行相应的处理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值