如何在MFC自定义控件内设置控件焦点

时间:2018-03-21 09:06:32

标签: c++ mfc

专家!

我正在使用一个继承Activator.CreateInstance的类,使用水平滚动条显示内容

我想要创建的控件如下所示:

enter image description here

但是,我遇到了一些问题,并提出了一个问题

当按钮获得焦点时,它会变为蓝色。如果按下另一个按钮,则接收现有焦点的按钮应该不聚焦。

enter image description here

按钮不会释放焦点,如第二张图片所示。

但是,在Dialog中实现时会出现上述问题,而不是在SDI中。

我需要帮助解决这个问题。

自定义控件创建代码;

CWnd

1 个答案:

答案 0 :(得分:1)

所谓的"默认按钮处理"由名为IsDialogMessage的函数完成。

控制此方法的最简单方法是让您的父控件从CDialog派生一个窗口,或者如果它是从CFormView派生的视图。 MFC将在适当的PreTranslateMessage处理程序中为您处理所有这些。

如果您想自己执行此操作,可以插入自己的PreTranslateMessage处理程序并使用IsDialogMessageCWnd类还有一个名为CWnd::PreTranslateInput的预定义实现。

所以这可能就足够了:

BOOL CYourParentClass::PreTranslateMessage(MSG* pMsg)
{
    // allow standard processing
    if (__super::PreTranslateMessage(pMsg))
        return TRUE;
    return PreTranslateInput(pMsg);
}

从我的角度来看,使用CFormView / CDialog是更好的方法,因为还有其他有关对话框的问题"解决了它。包括失去和获得焦点和激活......