![](/img/trans.png)
[英]MFC: How to catch set focus of each control of dialog in one function
[英]How to set control focus inside an MFC custom control
专家!
我正在使用一个继承CWnd
的类,以便使用水平滚动条使内容可见
我要创建的控件如下所示:
但是,我有一些问题,还有一个问题
当按钮获得焦点时,它将变为蓝色。 如果按下另一个按钮,则接收到现有焦点的按钮应处于未聚焦状态。
该按钮不会释放焦点,如第二张图片所示。
但是,上述问题是在Dialog中而不是在SDI中实现时发生的。
我需要帮助解决这个问题。
m_ScrollWnd.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 1234);
BOOL CScrollWnd::Create(DWORD dwStyle, CRect &rect, CWnd *pParent, UINT nID)
{
dwStyle |= ((WS_HSCROLL) );
return CWnd::Create(CScrollWnd::IID, nullptr, dwStyle, rect, pParent, nID);
}
m_Button3.Create(_T("Hello3"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, CRect(0, 0, 0, 0), this, 1238);
所谓的“默认按钮处理”是通过名为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
是更好的方法,因为还解决了其他“有关对话框的问题”。 包括放松,获得关注和激活...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.