﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-codepeng-随笔分类-MFC/SDK编程</title><link>http://www.cppblog.com/codepeng/category/16793.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 01 May 2011 02:47:30 GMT</lastBuildDate><pubDate>Sun, 01 May 2011 02:47:30 GMT</pubDate><ttl>60</ttl><item><title>用MFC实现静态文本超链接的方法</title><link>http://www.cppblog.com/codepeng/archive/2011/05/01/145440.html</link><dc:creator>acpeng</dc:creator><author>acpeng</author><pubDate>Sun, 01 May 2011 01:54:00 GMT</pubDate><guid>http://www.cppblog.com/codepeng/archive/2011/05/01/145440.html</guid><wfw:comment>http://www.cppblog.com/codepeng/comments/145440.html</wfw:comment><comments>http://www.cppblog.com/codepeng/archive/2011/05/01/145440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codepeng/comments/commentRss/145440.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codepeng/services/trackbacks/145440.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: 黑体; FONT-SIZE: 16px">最近写一个小的对话框程序时，想加一个文本超链接，研究了一下，发上自己的研究成果，供大家参考。下面说说完整的步骤。</span></p>
<p><span style="FONT-FAMILY: 黑体; FONT-SIZE: 16px">(假定静态文本ID为ID_STATIC)</span></p>
<p><span style="FONT-FAMILY: 黑体; FONT-SIZE: 16px"></span><strong><span style="FONT-FAMILY: 楷体; COLOR: red; FONT-SIZE: 14pt">首先，设置鼠标的形状及响应鼠标点击<span></span></span></strong></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">第一步，在<span>Dlg</span>类中定义一个<span>protect</span>成员变量<span>HCURSOR<span>&nbsp;&nbsp;</span>m_hCursor,</span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">在构造函数里（或者在<span>OnInitDialog()</span>里）调用语句<span></span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">m_hCursor=AfxGetApp()-&gt;LoadCursor(IDI_CURLINK);</span><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">加载鼠标<span>;</span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">第二步，在<span>Dlg</span>类中定义一个<span>protect</span>成员变量<span>RECT<span>&nbsp;&nbsp;</span>m_StaticRect,</span>表示静态文本的坐标，在成员函数<span>OnInitDialog()</span>里调用语句<span></span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">GetDlgItem(IDC_STATIC)-&gt;GetWindowRect(&amp;m_StaticRect);</span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">ScreenToClient(&amp;m_StaticRect);</span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">第三步，加载鼠标移动消息，在<span>OnMouseMove()</span>里调用语句<span></span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;point.x&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.left&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;point.x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.right&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif">&nbsp;&nbsp;&nbsp;&nbsp;point.y&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.top&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;point.y&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.bottom&nbsp;)&nbsp;<br><img id=Codehighlighter1_139_176_Open_Image onclick="this.style.display='none'; Codehighlighter1_139_176_Open_Text.style.display='none'; Codehighlighter1_139_176_Closed_Image.style.display='inline'; Codehighlighter1_139_176_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_139_176_Closed_Image onclick="this.style.display='none'; Codehighlighter1_139_176_Closed_Text.style.display='none'; Codehighlighter1_139_176_Open_Image.style.display='inline'; Codehighlighter1_139_176_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_139_176_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_139_176_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetCursor(m_hCursor);&nbsp;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>第四步，加载鼠标单击消息，在<span>OnLButtonDown()</span>里添加语句<span></span></span></p>
<p><strong><span style="FONT-FAMILY: 楷体; COLOR: red; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;point.x&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.left&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;point.x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.right&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">point.y&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.top&nbsp;&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;point.y&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;m_StaticRect.bottom&nbsp;)<br><img id=Codehighlighter1_129_235_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_235_Open_Text.style.display='none'; Codehighlighter1_129_235_Closed_Image.style.display='inline'; Codehighlighter1_129_235_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_129_235_Closed_Image onclick="this.style.display='none'; Codehighlighter1_129_235_Closed_Text.style.display='none'; Codehighlighter1_129_235_Open_Image.style.display='inline'; Codehighlighter1_129_235_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_129_235_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_129_235_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">SetCursor(m_hCursor);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">ShellExecute(NULL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">open</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,TEXT(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.tlu.edu.cn</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">),NULL,NULL,&nbsp;SW_SHOWNORMAL);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p>注意，</span></strong><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">若是邮箱，则改为</span><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">ShellExecute(NULL, "open",_T("mailto:apeng332@sohu.com"), NULL, NULL, SW_SHOWNORMAL);</span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">在鼠标单击抬起的时候最好也加上<span>SetCursor(m_hCursor);</span>使得鼠标的移动更流畅，鼠标右键消息也可以加上<span>SetCursor(m_hCursor)</span>。<span></span></span></p>
<p><strong><span style="FONT-FAMILY: 楷体; COLOR: red; FONT-SIZE: 14pt">其次，设置静态文本的字体与颜色<span></span></span></strong></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">第一步，字体的设置：在<span>Dlg</span>类中定义一个<span>protect</span>成员变量<span>CFont m_Font</span>表示字体，在类的成员函数<span>OnInitDialog()</span>里调用<span>m_Font.CreateFont(</span>&#8230;&#8230;<span>),</span>注意参数很多，参考<span>MSDN</span>。接着编写两行代码：<span></span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">CStatic *m_static=(CStatic *)GetDlgItem(IDC_STATIC);</span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">m_static-&gt;SetFont(&amp;m_Font,false);</span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt">第二步，颜色的设置：在<span>Dlg</span>中加载<span>WM_CTLCOLOR</span>消息，在此消息的响应函数<span>OnCtlColor(</span>&#8230;&#8230;<span>)</span>里添加如下代码：<span></span></span></p>
<p><span style="FONT-FAMILY: 楷体; COLOR: green; FONT-SIZE: 12pt"></p>
<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #000000">HBRUSH&nbsp;CScreenShotsDlg::OnCtlColor(CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDC,&nbsp;CWnd</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pWnd,&nbsp;UINT&nbsp;nCtlColor)<br><img id=Codehighlighter1_73_251_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_251_Open_Text.style.display='none'; Codehighlighter1_73_251_Closed_Image.style.display='inline'; Codehighlighter1_73_251_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_73_251_Closed_Image onclick="this.style.display='none'; Codehighlighter1_73_251_Closed_Text.style.display='none'; Codehighlighter1_73_251_Open_Image.style.display='inline'; Codehighlighter1_73_251_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_73_251_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_73_251_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;HBRUSH&nbsp;hbr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;CDialog::OnCtlColor(pDC,&nbsp;pWnd,&nbsp;nCtlColor);<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pWnd</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetDlgCtrlID()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;IDC_STATIC)<br><img id=Codehighlighter1_184_233_Open_Image onclick="this.style.display='none'; Codehighlighter1_184_233_Open_Text.style.display='none'; Codehighlighter1_184_233_Closed_Image.style.display='inline'; Codehighlighter1_184_233_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_184_233_Closed_Image onclick="this.style.display='none'; Codehighlighter1_184_233_Closed_Text.style.display='none'; Codehighlighter1_184_233_Open_Image.style.display='inline'; Codehighlighter1_184_233_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_184_233_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_184_233_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetTextColor(RGB(</span><span style="COLOR: #000000">255</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">));<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;hbr;<br><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<p>即可</span></p>
<img src ="http://www.cppblog.com/codepeng/aggbug/145440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codepeng/" target="_blank">acpeng</a> 2011-05-01 09:54 <a href="http://www.cppblog.com/codepeng/archive/2011/05/01/145440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>