使用CMFCPropertyGridCtrl,当鼠标移动到内容过长的编辑框时,如何避免提示?
使用使用CMFCPropertyGridCtrl,当鼠标移动到内容过长的编辑框时,如何避免提示?,mfc,Mfc,使用CMFCPropertyGridCtrl, 当鼠标移动到内容太长的编辑框时,如何避免提示?您是否看过使用: 它接受一个BOOL参数 补充资料 我查看了属性网格的源代码,并注意到以下内容: void CMFCPropertyGridCtrl::Init() { CRect rectDummy; rectDummy.SetRectEmpty(); if (GetGlobalData()->m_hcurStretch == NULL) {
CMFCPropertyGridCtrl
,
当鼠标移动到内容太长的编辑框时,如何避免提示?您是否看过使用: 它接受一个
BOOL
参数
补充资料 我查看了属性网格的源代码,并注意到以下内容:
void CMFCPropertyGridCtrl::Init()
{
CRect rectDummy;
rectDummy.SetRectEmpty();
if (GetGlobalData()->m_hcurStretch == NULL)
{
GetGlobalData()->m_hcurStretch = AfxGetApp()->LoadCursor(AFX_IDC_HSPLITBAR);
}
if (GetGlobalData()->m_hcurStretchVert == NULL)
{
GetGlobalData()->m_hcurStretchVert = AfxGetApp()->LoadCursor(AFX_IDC_VSPLITBAR);
}
InitHeader();
HDITEM hdItem;
hdItem.mask = HDI_TEXT | HDI_FORMAT;
hdItem.fmt = HDF_LEFT;
hdItem.pszText = _T("Property");
hdItem.cchTextMax = 100;
GetHeaderCtrl().InsertItem(0, &hdItem);
hdItem.pszText = _T("Value");
hdItem.cchTextMax = 100;
GetHeaderCtrl().InsertItem(1, &hdItem);
m_wndScrollVert.Create(WS_CHILD | WS_VISIBLE | SBS_VERT, rectDummy, this, AFX_ID_SCROLL_VERT);
m_ToolTip.Create(this, TTS_ALWAYSTIP);
m_ToolTip.Activate(TRUE);
if (GetGlobalData()->m_nMaxToolTipWidth != -1)
{
m_ToolTip.SetMaxTipWidth(GetGlobalData()->m_nMaxToolTipWidth);
}
m_ToolTip.SetWindowPos(&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE);
m_IPToolTip.Create(this);
CWnd* pWndParent = GetParent();
m_bControlBarColors = pWndParent == NULL || !pWndParent->IsKindOf(RUNTIME_CLASS(CDialog));
AdjustLayout();
CreateBoldFont();
CalcEditMargin();
}
我没有访问头文件的权限,因此我不知道m\u ToolTip
变量是否为公共变量。有趣的是,当您阅读有关该类的内容时,它确实指出:
MFC自动创建此控件并在CMFCPropertyGridCtrl
类中使用它
如果工具提示对象未公开,则可能可以创建从基类派生的自己的属性网格类,然后可以公开m_工具提示
控件或将其停用,或者执行任何您想执行的操作
我还在
CMFCPropertyGridProperty
类的代码中看到对以下内容的引用:
m_pWndList->m_ToolTip.AddTool(m_pWndList, LPSTR_TEXTCALLBACK, rectName, m_pWndList->m_nTooltipsCount + 1);
m_pWndList->m_nTooltipsCount ++;
可能值得检查MFC代码,以查看工具提示的使用位置和方式,然后您将能够更好地在派生类中重写它们的行为
我的电脑上的MFC代码路径:
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\atlmfc\src\mfc
如何做
- 显示类向导:
- 添加MFC类:
- 为其命名并选择属性网格控件作为基类:
void CMyPropertyGrid::DeactivateToolTips()
{
m_ToolTip.Activate(FALSE);
}
理论上,如果您在正确的时间调用此
DeactivateToolTips
方法,它应该禁用提示。请记住,工具提示控件处理许多元素的提示,因此最终的解决方案可能不是这么简单,但它应该能让您朝着正确的方向前进。您是否考虑过使用:
它接受一个BOOL
参数
补充资料 我查看了属性网格的源代码,并注意到以下内容:
void CMFCPropertyGridCtrl::Init()
{
CRect rectDummy;
rectDummy.SetRectEmpty();
if (GetGlobalData()->m_hcurStretch == NULL)
{
GetGlobalData()->m_hcurStretch = AfxGetApp()->LoadCursor(AFX_IDC_HSPLITBAR);
}
if (GetGlobalData()->m_hcurStretchVert == NULL)
{
GetGlobalData()->m_hcurStretchVert = AfxGetApp()->LoadCursor(AFX_IDC_VSPLITBAR);
}
InitHeader();
HDITEM hdItem;
hdItem.mask = HDI_TEXT | HDI_FORMAT;
hdItem.fmt = HDF_LEFT;
hdItem.pszText = _T("Property");
hdItem.cchTextMax = 100;
GetHeaderCtrl().InsertItem(0, &hdItem);
hdItem.pszText = _T("Value");
hdItem.cchTextMax = 100;
GetHeaderCtrl().InsertItem(1, &hdItem);
m_wndScrollVert.Create(WS_CHILD | WS_VISIBLE | SBS_VERT, rectDummy, this, AFX_ID_SCROLL_VERT);
m_ToolTip.Create(this, TTS_ALWAYSTIP);
m_ToolTip.Activate(TRUE);
if (GetGlobalData()->m_nMaxToolTipWidth != -1)
{
m_ToolTip.SetMaxTipWidth(GetGlobalData()->m_nMaxToolTipWidth);
}
m_ToolTip.SetWindowPos(&wndTop, -1, -1, -1, -1, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOSIZE);
m_IPToolTip.Create(this);
CWnd* pWndParent = GetParent();
m_bControlBarColors = pWndParent == NULL || !pWndParent->IsKindOf(RUNTIME_CLASS(CDialog));
AdjustLayout();
CreateBoldFont();
CalcEditMargin();
}
我没有访问头文件的权限,因此我不知道m\u ToolTip
变量是否为公共变量。有趣的是,当您阅读有关该类的内容时,它确实指出:
MFC自动创建此控件并在CMFCPropertyGridCtrl
类中使用它
如果工具提示对象未公开,则可能可以创建从基类派生的自己的属性网格类,然后可以公开m_工具提示
控件或将其停用,或者执行任何您想执行的操作
我还在
CMFCPropertyGridProperty
类的代码中看到对以下内容的引用:
m_pWndList->m_ToolTip.AddTool(m_pWndList, LPSTR_TEXTCALLBACK, rectName, m_pWndList->m_nTooltipsCount + 1);
m_pWndList->m_nTooltipsCount ++;
可能值得检查MFC代码,以查看工具提示的使用位置和方式,然后您将能够更好地在派生类中重写它们的行为
我的电脑上的MFC代码路径:
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\atlmfc\src\mfc
如何做
- 显示类向导:
- 添加MFC类:
- 为其命名并选择属性网格控件作为基类:
void CMyPropertyGrid::DeactivateToolTips()
{
m_ToolTip.Activate(FALSE);
}
理论上,如果您在正确的时间调用此
DeactivateToolTips
方法,它应该禁用提示。请记住,工具提示控件处理许多元素的提示,因此最终的解决方案可能不是这么简单,但它应该可以让您朝正确的方向前进。此开关在两种操作模式之间切换:无条件显示工具提示,或仅当显示文本被截断时才显示工具提示。这无助于OP解决他们的问题。不知道这个开关的作用是可以理解的,因为MFC的文档是完全无用的。@IInspectable Oops。很抱歉。我试图找到一个解释,正如你所说的帮助是无用的。AlwaysShowUserToolTip(FALSE)没有任何效果,当鼠标移动upm_时仍会显示提示。ToolTip是受保护的variable@Andrew非常感谢您的帮助!此开关可在两种操作模式之间切换:无条件显示工具提示,或者仅当显示文本被截断时才显示工具提示。这无助于OP解决他们的问题。不知道这个开关的作用是可以理解的,因为MFC的文档是完全无用的。@IInspectable Oops。很抱歉。我试图找到一个解释,正如你说的,帮助是无用的。总是显示用户工具提示(错误)没有任何效果,当鼠标移动upm\U时仍将显示提示工具提示受保护variable@Andrew非常感谢您的帮助!为您更新了我的答案并提供了更多详细信息。为您更新了我的答案并提供了更多详细信息。