关于测试工程提示信息功能的说明
该功能的实现完全依赖于CPPToolTip类,该类可以在 http://www.codeproject.com/
上下载到。具体说明见该网站的介绍。
本程序所需要的功能是点击工具栏的“属性”按钮之后,屏幕右下角弹出测试工程的详细属性。在屏幕任何地方单击鼠标左键之后,信息提示框消失。
因此,本程序没有直接按照codeproject上的介绍那样使用CPPToolTip类,而是当点击“属性”按钮之后,调用ShowHelpTooltip函数。
在ShowHelpTooltip函数的重载版本void ShowHelpTooltip (LPPOINT pt, LPCTSTR lpszString, HICON hIcon = NULL)中,lpszString支持HTML文本,因此可以利用HTML控制显示信息的格式。
弹出的信息提示框如下图所示。

源代码如下:

/**/
///
/MainFrm.h中定义
public
:
CPPToolTipm_toolTip;
//
显示测试属性的提示框

/**/
///
/MainFrm.cpp中
int
CMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct)

...
{
……
m_toolTip.Create(
this
);
//
Addstooltipfortoolbar
m_toolTip.AddToolBar(
&
m_ProperBar);
……
}

//
显示测试工程的属性
void
CEMCView::OnEditProper()

...
{
//
TODO:在此添加命令处理程序代码
if
(m_bIsWorking
&&
!
m_bOldVersion)

...
{
CEMCDoc
*
pDoc
=
GetDocument();

CMainFrame
*
pmfrm
=
(CMainFrame
*
)AfxGetMainWnd();
pmfrm
->
m_toolTip.SetDirection(PPTOOLTIP_BOTTOMEDGE_CENTER);
pmfrm
->
m_toolTip.AddTool(
this
,L
"
测试文件属性
"
);
//
pmfrm->m_toolTip.SetColorBk(RGB(0,0,255),RGB(192,192,192));
CPointpt;
CRectrc;
GetClientRect(
&
rc);
ClientToScreen(
&
rc);
pt.x
=
rc.right;
pt.y
=
rc.bottom;
//
pt为客户区窗口右下角对应的点

//
利用HTML控制提示框的显示格式
//
显示测试工程属性
CStringinfo
=
L
""
;
CStringstr
=
L
"
<center><h2><fontface="黑体"color=red>测试工程属性</font></h2><br><hrcolor=blue></center><br>
"
;
info
+=
str;
str.Format(L
"
<fontsize=14>测试类型:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
CE102)

...
{
str.Format(L
"
<spanclass=cpp-comment>CE102测试</span>
"
);
}
else
if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)

...
{
str.Format(L
"
<spanclass=cpp-comment>RE102测试</span>
"
);
}
info
+=
str;
str.Format(L
"
<fontsize=14>测试设备:</font>
"
);
info
+=
str;
switch
(pDoc
->
m_pTestPrj
->
m_TestEquip)

...
{
case
TEST_EQUIP_NONE:
str.Format(L
"
<spanclass=cpp-comment>无</span><br>
"
);
break
;
case
CUR_PROBE:
str.Format(L
"
<spanclass=cpp-comment>电流探头</span><br>
"
);
break
;
case
ET_G:
str.Format(L
"
<spanclass=cpp-comment>ET-G</span><br>
"
);
break
;
case
ET_Q:
str.Format(L
"
<spanclass=cpp-comment>ET-Q</span><br>
"
);
break
;
case
HT_1:
str.Format(L
"
<spanclass=cpp-comment>HT-1</span><br>
"
);
break
;
case
HT_6:
str.Format(L
"
<spanclass=cpp-comment>HT-6</span><br>
"
);
break
;
case
LISN:
str.Format(L
"
<spanclass=cpp-comment>LISN</span><br>
"
);
break
;
case
EZ_17:
str.Format(L
"
<spanclass=cpp-comment>EZ-17</span><br>
"
);
break
;
}
info
+=
str;
str.Format(L
"
<fontsize=14>起始频率:</font>
"
);
info
+=
str;
str.Format(L
"
<spanclass=cpp-comment>%5.2fMHz</span>
"
,pDoc
->
m_pTestPrj
->
m_StartFreq);
info
+=
str;
str.Format(L
"
<fontsize=14>终止频率:</font>
"
);
info
+=
str;
str.Format(L
"
<spanclass=cpp-comment>%5.2fMHz</span><br>
"
,pDoc
->
m_pTestPrj
->
m_StopFreq);
info
+=
str;
str.Format(L
"
<fontsize=14>EUT电压:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)
str.Format(L
"
<spanclass=cpp-comment>N/A</span>
"
);
else
str.Format(L
"
<spanclass=cpp-comment>%5.2fV</span>
"
,pDoc
->
m_pTestPrj
->
m_EUTVolt);
info
+=
str;
str.Format(L
"
<fontsize=14>待测设备:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_EUTName
!=
L
""
)
str.Format(L
"
<spanclass=cpp-comment>%s</span><br>
"
,pDoc
->
m_pTestPrj
->
m_EUTName);
else
str.Format(L
"
<spanclass=cpp-comment>N/A</span><br>
"
);
info
+=
str;
str.Format(L
"
<fontsize=14>测试模式:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)
str.Format(L
"
<spanclass=cpp-comment>N/A</span>
"
);
else

...
{
switch
(pDoc
->
m_pTestPrj
->
m_TestMode)

...
{
case
TEST_MODE_NONE:
str.Format(L
"
<spanclass=cpp-comment>无</span>
"
);
break
;
case
DIFFER:
str.Format(L
"
<spanclass=cpp-comment>差模</span>
"
);
break
;
case
COMMON:
str.Format(L
"
<spanclass=cpp-comment>共模</span>
"
);
break
;
}
}
info
+=
str;
str.Format(L
"
<fontsize=14>测试距离:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
CE102)
str.Format(L
"
<spanclass=cpp-comment>N/A</span><br>
"
);
else
str.Format(L
"
<spanclass=cpp-comment>%5.2fm</span><br>
"
,pDoc
->
m_pTestPrj
->
m_TestDist);
info
+=
str;

//
显示频谱仪设置
str.Format(L
"
<br><center><h2><fontface="黑体"color=red>频谱仪设置</font></h2><br><hrcolor=blue></center><br>
"
);
info
+=
str;
str.Format(L
"
<fontsize=14>RBW:</font>
"
);
info
+=
str;
if
(pDoc
->
m_pTestPrj
->
m_TestBand
==
9
)
str.Format(L
"
<spanclass=cpp-comment>9KHz</span>
"
);
else
if
(pDoc
->
m_pTestPrj
->
m_TestBand
==
120
)
str.Format(L
"
<spanclass=cpp-comment>120KHz</span>
"
);
else
str.Format(L
"
<spanclass=cpp-comment>AUTO</span>
"
);
info
+=
str;
str.Format(L
"
<fontsize=14>显示模式:</font>
"
);
info
+=
str;
switch
(pDoc
->
m_pTestPrj
->
m_DispPattern)

...
{
case
SAMPLE:
str.Format(L
"
<spanclass=cpp-comment>SAMPLE</span><br>
"
);
break
;
case
MIN_HOLD:
str.Format(L
"
<spanclass=cpp-comment>MIN.HOLD</span><br>
"
);
break
;
case
MAX_HOLD:
str.Format(L
"
<spanclass=cpp-comment>MAX.HOLD</span><br>
"
);
break
;
}
info
+=
str;
str.Format(L
"
<fontsize=14>内部衰减:</font>
"
);
info
+=
str;
str.Format(L
"
<spanclass=cpp-comment>%ddB</span>
"
,pDoc
->
m_pTestPrj
->
m_InnerAttenuator);
info
+=
str;
str.Format(L
"
<fontsize=14>外部衰减:</font>
"
);
info
+=
str;
str.Format(L
"
<spanclass=cpp-comment>%ddB</span><br>
"
,pDoc
->
m_pTestPrj
->
m_OuterAttenuator);
info
+=
str;

pmfrm
->
m_toolTip.ShowHelpTooltip(
&
pt,info);
}
}