c++ - MFC 组合框 killfocus 不起作用

标签 c++ combobox mfc onkillfocus

我有一个对话框,其中有几个 comboboxes 作为成员变量。控件向导允许我为 CBN_KILLFOCUS 消息的 comboboxes 创建处理程序。例如,自动调用一个这样的处理程序

void MyDlg::OnKillfocusMyCombo()

我希望这个处理程序在我退出时立即被调用。但它不会被调用。

最佳答案

我遇到了同样的问题。这是 MFC 中的错误。 (4 年多过去了,它仍然存在。)尽管 Win32 CBN_KILLFOCUS 通知本身已广播,但从未调用 ON_CBN_KILLFOCUS 处理程序。

要修复此问题,请手动覆盖对话框的 WindowProc(Win32 方式):

LRESULT CMyDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    // TODO: Add your specialized code here and/or call the base class

    //Fix for the bug in MFC
    if(message == WM_COMMAND)
    {
        if(HIWORD(wParam) == CBN_KILLFOCUS &&
            LOWORD(wParam) == Your_ComboBox_ID)
        {
            OnCbnKillfocusComboBox();
        }
    }

    return CDialog::WindowProc(message, wParam, lParam);
}

关于c++ - MFC 组合框 killfocus 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23068549/

相关文章:

c++ - 在画家程序中实现撤消重做

c++ - 分配指向固定大小数组的指针

C++ 禁用堆栈帧下方的异常

c++ - 当继承只为某些最终类型引入先决条件时如何记录/断言

c# - 如何禁用一个控件(即组合框)的鼠标滚轮?

winforms - Windows UI 设计 - 组合框

c++ - 如何区分某些 LVITEMS(文件或目录)?

Javascript - 尝试创建动态组合框

c++ - 使用带有 MFC CString 的 boost 字符串算法来检查字符串的结尾

visual-c++ - CDialog 和 CDialogEx 的区别