专家!
我正在使用一个继承Activator.CreateInstance
的类,使用水平滚动条显示内容
我想要创建的控件如下所示:
但是,我遇到了一些问题,并提出了一个问题
当按钮获得焦点时,它会变为蓝色。如果按下另一个按钮,则接收现有焦点的按钮应该不聚焦。
按钮不会释放焦点,如第二张图片所示。
但是,在Dialog中实现时会出现上述问题,而不是在SDI中。
我需要帮助解决这个问题。
CWnd
答案 0 :(得分:1)
所谓的"默认按钮处理"由名为IsDialogMessage
的函数完成。
控制此方法的最简单方法是让您的父控件从CDialog
派生一个窗口,或者如果它是从CFormView
派生的视图。 MFC将在适当的PreTranslateMessage
处理程序中为您处理所有这些。
如果您想自己执行此操作,可以插入自己的PreTranslateMessage
处理程序并使用IsDialogMessage
。 CWnd
类还有一个名为CWnd::PreTranslateInput
的预定义实现。
所以这可能就足够了:
BOOL CYourParentClass::PreTranslateMessage(MSG* pMsg)
{
// allow standard processing
if (__super::PreTranslateMessage(pMsg))
return TRUE;
return PreTranslateInput(pMsg);
}
从我的角度来看,使用CFormView
/ CDialog
是更好的方法,因为还有其他有关对话框的问题"解决了它。包括失去和获得焦点和激活......