关于测试工程提示信息功能的说明

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

弹出的信息提示框如下图所示。

信息提示框

源代码如下:




///
/ MainFrm.h中定义



public
:

CPPToolTip m_toolTip;

//
显示测试属性的提示框





///
/ MainFrm.cpp中



int
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)




{

……

m_toolTip.Create(

this
);


//
Adds tooltip for toolbar



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));





CPoint pt;

CRect rc;

GetClientRect(

&
rc);

ClientToScreen(

&
rc);

pt.x

=
rc.right;

pt.y

=
rc.bottom;
//
pt为客户区窗口右下角对应的点




//
利用HTML控制提示框的显示格式


//
显示测试工程属性



CString info
=
L
""
;

CString str

=
L
"
<center><h2><font face="黑体" color=red>测试工程属性</font></h2><br><hr color=blue></center><br>
"
;

info

+=
str;

str.Format(L

"
<font size=14>测试类型:</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
CE102)




{

str.Format(L

"
<span class=cpp-comment>CE102测试</span>
"
);

}





else

if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)




{

str.Format(L

"
<span class=cpp-comment>RE102测试</span>
"
);

}




info

+=
str;

str.Format(L

"
<font size=14>测试设备:</font>
"
);

info

+=
str;


switch
(pDoc
->
m_pTestPrj
->
m_TestEquip)




{


case
TEST_EQUIP_NONE:

str.Format(L

"
<span class=cpp-comment>无</span><br>
"
);


break
;


case
CUR_PROBE:

str.Format(L

"
<span class=cpp-comment>电流探头</span><br>
"
);


break
;


case
ET_G:

str.Format(L

"
<span class=cpp-comment>ET-G</span><br>
"
);


break
;


case
ET_Q:

str.Format(L

"
<span class=cpp-comment>ET-Q</span><br>
"
);


break
;


case
HT_1:

str.Format(L

"
<span class=cpp-comment>HT-1</span><br>
"
);


break
;


case
HT_6:

str.Format(L

"
<span class=cpp-comment>HT-6</span><br>
"
);


break
;


case
LISN:

str.Format(L

"
<span class=cpp-comment>LISN</span><br>
"
);


break
;


case
EZ_17:

str.Format(L

"
<span class=cpp-comment>EZ-17</span><br>
"
);


break
;

}




info

+=
str;

str.Format(L

"
<font size=14>起始频率:</font>
"
);

info

+=
str;

str.Format(L

"
<span class=cpp-comment>%5.2fMHz</span>
"
,pDoc
->
m_pTestPrj
->
m_StartFreq);

info

+=
str;

str.Format(L

"
<font size=14>终止频率:</font>
"
);

info

+=
str;

str.Format(L

"
<span class=cpp-comment>%5.2fMHz</span><br>
"
,pDoc
->
m_pTestPrj
->
m_StopFreq);

info

+=
str;

str.Format(L

"
<font size=14>EUT电压:</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)

str.Format(L

"
<span class=cpp-comment>N/A</span>
"
);


else


str.Format(L

"
<span class=cpp-comment>%5.2fV</span>
"
,pDoc
->
m_pTestPrj
->
m_EUTVolt);

info

+=
str;

str.Format(L

"
<font size=14>待测设备:</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_EUTName
!=
L
""
)

str.Format(L

"
<span class=cpp-comment>%s</span><br>
"
,pDoc
->
m_pTestPrj
->
m_EUTName);


else


str.Format(L

"
<span class=cpp-comment>N/A</span><br>
"
);

info

+=
str;

str.Format(L

"
<font size=14>测试模式:</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
RE102)

str.Format(L

"
<span class=cpp-comment>N/A</span>
"
);


else





{


switch
(pDoc
->
m_pTestPrj
->
m_TestMode)




{


case
TEST_MODE_NONE:

str.Format(L

"
<span class=cpp-comment>无</span>
"
);


break
;


case
DIFFER:

str.Format(L

"
<span class=cpp-comment>差模</span>
"
);


break
;


case
COMMON:

str.Format(L

"
<span class=cpp-comment>共模</span>
"
);


break
;

}




}




info

+=
str;

str.Format(L

"
<font size=14>测试距离:</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_TestCon
==
CE102)

str.Format(L

"
<span class=cpp-comment>N/A</span><br>
"
);


else


str.Format(L

"
<span class=cpp-comment>%5.2fm</span><br>
"
,pDoc
->
m_pTestPrj
->
m_TestDist);

info

+=
str;




//
显示频谱仪设置



str.Format(L
"
<br><center><h2><font face="黑体" color=red>频谱仪设置</font></h2><br><hr color=blue></center><br>
"
);

info

+=
str;

str.Format(L

"
<font size=14>RBW     :</font>
"
);

info

+=
str;


if
(pDoc
->
m_pTestPrj
->
m_TestBand
==
9
)

str.Format(L

"
<span class=cpp-comment>9KHz</span>
"
);


else

if
(pDoc
->
m_pTestPrj
->
m_TestBand
==
120
)

str.Format(L

"
<span class=cpp-comment>120KHz</span>
"
);


else


str.Format(L

"
<span class=cpp-comment>AUTO</span>
"
);

info

+=
str;

str.Format(L

"
<font size=14>显示模式:</font>
"
);

info

+=
str;


switch
(pDoc
->
m_pTestPrj
->
m_DispPattern)




{


case
SAMPLE:

str.Format(L

"
<span class=cpp-comment>SAMPLE</span><br>
"
);


break
;


case
MIN_HOLD:

str.Format(L

"
<span class=cpp-comment>MIN.HOLD</span><br>
"
);


break
;


case
MAX_HOLD:

str.Format(L

"
<span class=cpp-comment>MAX.HOLD</span><br>
"
);


break
;

}




info

+=
str;

str.Format(L

"
<font size=14>内部衰减:</font>
"
);

info

+=
str;

str.Format(L

"
<span class=cpp-comment>%ddB</span>
"
,pDoc
->
m_pTestPrj
->
m_InnerAttenuator);

info

+=
str;

str.Format(L

"
<font size=14>外部衰减:</font>
"
);

info

+=
str;

str.Format(L

"
<span class=cpp-comment>%ddB</span><br>
"
,pDoc
->
m_pTestPrj
->
m_OuterAttenuator);

info

+=
str;



pmfrm

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

}




}