- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有课
class CCfgUserPage : public CPropertyPage
它还拥有各种控件,从复选框到文本区域。我想为每个控件添加工具提示,但似乎有问题。
在 CCfgUserPage 中,我将其添加到消息映射中
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipText )
当此对象捕获到该消息时,它会调用如下所示的函数 OnToolTipText
BOOL CCfgUserPage::OnToolTipText( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
UINT nID = pNMHDR->idFrom;
CString ttStr;
int partOrient = GetDlgItem(IDC_PARTORIENT_CHECK)->GetDlgCtrlID();
if (pTTT->uFlags & TTF_IDISHWND)
{
// idFrom is actually the HWND of the tool
nID = ::GetDlgCtrlID((HWND)nID);
if( nID == partOrient ) // Only Display TT for The buttons with these ID's
{
if( nID == partOrient )
ttStr = "Part Orient";
pTTT->lpszText = (LPTSTR)(LPCTSTR)ttStr;
pTTT->hinst = AfxGetResourceHandle();
return TRUE;
}
}
return FALSE;
}
我还在
中启用了工具提示CCfgUserPage::OnInitDialog
只要 OnToolTipText 返回 TRUE,应用程序就会崩溃并通知我
Access violation reading location
我正在尝试通过堆栈框架,但它对我来说深入 MFC 以了解出了什么问题。我可能遗漏了什么会导致这种情况发生?
最佳答案
看看你在 MSDN 上的提示:
When you handle the TTN_NEEDTEXT notification message, specify the string to be displayed in one of the following ways:
- Copy the text to the buffer specified by the szText member.
- Copy the address of the buffer that contains the text to the lpszText member.
- Copy the identifier of a string resource to the lpszText member, and copy the handle of the instance that contains the resource to the hinst member.
所以不要这样做:
CString ttStr;
// ...
if( nID == partOrient )
ttStr = "Part Orient";
// Below is the unsafe part: you initialize lpszText with something
// expected to be valid after you return from the handler
// effectively, this is internal buffer of local ttStr valriable
// which is to be freed and lpszText would keep point to undefined
// memory
pTTT->lpszText = (LPTSTR)(LPCTSTR)ttStr;
pTTT->hinst = AfxGetResourceHandle();
你宁愿:
if(nID == partOrient)
{
// NOTE: Here instead you don't create any dynamic instances (strings)
// and the value resides directly in the notification structure
_tcsncpy_s(pTTT->szText, _T("Part Orient"), _TRUNCATE);
pTTT->lpszText = pTTT->szText; // Just a safety, it's already pointing there
}
关于c++ - 在 PropertyPage 上的控件上显示工具提示。将 TRUE 返回到 ON_NOTIFY_EX(TTN_NEEDTEXT...) 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15618235/
我正在创建一个属性页。在页面上,我有一个名为“添加”的按钮。我希望用户能够按 Enter 键,然后单击“添加”按钮,而不是单击“确定”按钮。这可以做到吗? 我考虑过的一个选择是在performOk()
我正在为 Eclipse 插件设计一个属性页。我需要对页面上默认创建的“恢复默认值”和“应用”按钮进行编程。有人可以帮助我如何去做吗? 谢谢! 最佳答案 您可以重写属性页中的performDefaul
我有课 class CCfgUserPage : public CPropertyPage 它还拥有各种控件,从复选框到文本区域。我想为每个控件添加工具提示,但似乎有问题。 在 CCfgUserPag
在 VS2013 中,我创建了一个基于对话的 MFC 应用程序。我修改了项目以便在应用程序开始时使用 PropertyPage 和 Propertysheet,因此,它不会启动 CDialog,而是启
我是一名优秀的程序员,十分优秀!