2.3 静态文本控件典型实例
静态文本控件(Static Text)是一种单向交互的控件,用于显示数据,但是不接受输入,本节通过几个实例介绍静态文本控件在程序中的应用。
实例050 制作超链接控件
这是一个可以提高基础技能的实例
实例位置:光盘\mingrisoft\02\050
实例说明
设计应用程序时,为了让用户方便地通过程序访问某个网站,需要采用具有超级链接功能的控件,本实例通过静态文本控件设计一个超级链接控件,实例运行结果如图2.11所示。
图2.11 实现超级链接
技术要点
本实例通过新建SetCursor函数和ShellExecute函数来实现控件的超链接功能。SetCursor函数用于设置鼠标光标的样式,ShellExecute函数用来打开超链接。
(1)SetCursor函数,语法如下:
HCURSOR SetCursor( HCURSOR hCursor );
参数说明:
● hCursor:光标的句柄。
(2)ShellExecute函数,语法如下:
HINSTANCE APIENTRY ShellExecute(HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd);
参数说明:
● hwnd:窗口句柄。
● lpOperation:执行的操作,包括open、print和explore。
● lpFile:文件路径。
● lpParameters:执行操作的参数。
● lpDirectory:指定默认目录。
● nShowCmd:是否显示。
实现过程
(1)新建一个基于对话框的应用程序。
(2)在工程中添加一个以CStatic类为基类的类CSuperLabel。
(3)在对话框上添加5个静态文本控件和3个编辑框控件,设置其中1个静态文本控件的ID为IDC_CONNECT。
(4)在CSuperLabel类的OnPaint方法中绘制控件外观,代码如下:
void CSuperLabel::OnPaint() { CPaintDC dc(this); CDC*pDC=GetDC(); //获得设备上下文 CString text; GetWindowText(text); //获得控件显示文本 if (m_ConnectStr.IsEmpty()) m_ConnectStr=text; //设置超链接文本 pDC->SetBkMode(TRANSPARENT); //设置背景透明 pDC->SetTextColor(RGB(0,0,255)); //设置文本颜色为蓝色 pDC->SelectObject(&m_Font); //选入字体对象 pDC->TextOut(0,0,text); //绘制超链接文本 }
(5)重载CSuperLabel类的PreSubclassWindow虚方法,在该虚方法中设置超链接文本和字体,代码如下:
void CSuperLabel::PreSubclassWindow() { GetWindowText(m_ConnectStr); //获得超链接文本 CFont*pFont=GetFont(); //获得控件字体 pFont->GetLogFont(&lfont); lfont.lfUnderline=TRUE; //设置下划线 m_Font.CreateFontIndirect(&lfont); //创建新字体 CStatic::PreSubclassWindow(); }
(6)处理CSuperLabel类的鼠标移动消息,在该消息的处理函数中修改鼠标的样式,代码如下:
void CSuperLabel::OnMouseMove(UINT nFlags, CPoint point) { ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1)); //设置鼠标样式 CStatic::OnMouseMove(nFlags, point); }
(7)处理CSuperLabel类的鼠标左键按下消息,在该消息的处理函数中打开超级链接,代码如下:
void CSuperLabel::OnLButtonDown(UINT nFlags, CPoint point) { ShellExecute(m_hWnd,NULL,m_ConnectStr,NULL,NULL,SW_SHOW); //打开超链接 CStatic::OnLButtonDown(nFlags, point); }
举一反三
根据本实例,读者可以:
自绘静态文本控件。