gpt4 book ai didi

c++ - MFC: CToolTipCtrl 导致断言

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:35:08 28 4
gpt4 key购买 nike

我在一个基于 MFC 并使用 CPropertyPage 的应用程序中似乎成功地实现了工具提示。但是,在添加一个按钮以打开一个名为 IDC_USERMSG 的对话框后,该对话框在其中一个 CPropety 页面上包含一个 CEdit 控件,当 IDC_USERMSG 对话框被关闭时,将抛出一个断言。

_AFXWIN_INLINE CWnd* CWnd::GetParent() const
{
ASSERT(::IsWindow(m_hWnd)); // Asserts here.
return CWnd::FromHandle(::GetParent(m_hWnd));
}

我相信这是因为 IDC_USERMSG 对话框在这个阶段不再存在,因为它已经关闭。

按钮/工具提示实现如下。

BEGIN_MESSAGE_MAP(CUserData, CPropertyPage)
// Displays dialog when button pressed
ON_BN_CLICKED(IDC_USERMSG, &CUserData::OnBnClickedUsermsgbtn)
END_MESSAGE_MAP()

BOOL CUserData::OnInitDialog()
{
EnableToolTips(TRUE);
static CString ToolTip;
CTTCtrl.Create(this); // CToolTipCtrl CTTCtrl is a global
CTTCtrl.SetDelayTime(TTDT_AUTOPOP, 8000);
CTTCtrl.SetMaxTipWidth(ToolTipWidth);

ToolTip.LoadStringW(TT_REN);
CTTCtrl.AddTool( GetDlgItem( IDC_TT_REN), ToolTip );

return 0;
}

BOOL CUserData::PreTranslateMessage(MSG* pMsg)
{
CTTCtrl.RelayEvent( pMsg );
CDialog::PreTranslateMessage(pMsg);

// think I need some sort of filter here.

return CDialog::PreTranslateMessage(pMsg);
}

调用堆栈

mfc90ud.dll!CWnd::GetParent()  Line 297 + 0x2d bytes    C++
mfc90ud.dll!CWnd::FilterToolTipMessage(tagMSG * pMsg=0x00155570) Line 392 + 0x8 bytes C++
mfc90ud.dll!CWnd::_FilterToolTipMessage(tagMSG * pMsg=0x00155570, CWnd * pWnd=0x0012fa78) Line 374 C++
mfc90ud.dll!CWnd::PreTranslateMessage(tagMSG * pMsg=0x00155570) Line 1070 C++
mfc90ud.dll!CDialog::PreTranslateMessage(tagMSG * pMsg=0x00155570) Line 56 + 0xc bytes C++
MyApp.exe!CUserData::PreTranslateMessage(tagMSG * pMsg=0x00155570) Line 495 C++

最佳答案

您正在调用 CDialog::PreTranslateMessag 两次,删除第二次调用。

关于c++ - MFC: CToolTipCtrl 导致断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1481971/

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