gpt4 book ai didi

c++ - 如何在 MFC 自定义控件中设置控件焦点

转载 作者:行者123 更新时间:2023-11-28 04:45:07 28 4
gpt4 key购买 nike

专家!

我正在使用一个继承 CWnd 的类来使用水平滚动条使内容可见

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

enter image description here

不过,我有一些问题,请留言

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

enter image description here

如第二张图所示,按钮没有释放焦点。

但是在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 派生的 View 。 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 是更好的方法,因为它也解决了其他“关于对话框的问题”。包括失去和获得焦点和激活...

关于c++ - 如何在 MFC 自定义控件中设置控件焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49402061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com