场景

1.在开发WTL(Win32)程序时,超链接控件是很常见的,比如需要跳转网页或者打开本地文件夹等,都需要用到。Win32本身就有提供系统自带的WC_LINK控件,而我们用WTL有相应的封装类CLinkCtrl<atlctrls.h>.

2.有时需要根据界面的颜色主题需要修改超链接的颜色以适配界面。但是CLinkCtrl并没有提供修改字体颜色的方法, 而微软的MSDN里对Link也没有相应修改颜色的例子或说明. 如何做?

说明

1.一般情况下我们知道修改系统控件的字体颜色都是通过响应WM_CTLCOLORSTATIC,WM_CTLCOLOREDIT,WM_CTLCOLORBTN等相关消息来修改。超链接控件也是一样的,需要响应WM_CTLCOLORSTATIC并修改如下:

BEGIN_MSG_MAP 里添加

MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColor)

OnCtlColor 实现增加.

SetBkMode(hDC,TRANSPARENT);
SetTextColor(hDC,RGB(255,0,0));
return (LRESULT)AtlGetStockBrush(HOLLOW_BRUSH);

但是不生效,咋办?如果我们有时间和耐心看完官方的SysLink里的Link Attributes也有说明. 里面用到一个结构体LITEMstate的值LIS_DEFAULTCOLORS,原来SysLink的默认颜色是不能改的,需要通过设置LIS_DEFAULTCOLORS来启用颜色可修改, 那就好办了。只要通过在创建SysLink之后设置LIS_DEFAULTCOLORS启用颜色可修改。我们的OnCtlColor里的更改字体颜色就会生效.

LITEM item = { 0 };
item.iLink = 0;
item.mask = LIF_ITEMINDEX | LIF_STATE;
item.state = LIS_DEFAULTCOLORS; // 修改默认超链接颜色需要vista以上系统才支持.
item.stateMask = LIS_DEFAULTCOLORS;
SendMessage(link_support_, LM_SETITEM, 0, (LPARAM)&item);

代码

View.h

// View.h : interface of the CView class
//
/#pragma onceenum
{kMyDeviceLinkSupportId = WM_USER+1
};class CView : public CWindowImpl<CView>
{public:DECLARE_WND_CLASS(NULL)BOOL PreTranslateMessage(MSG* pMsg);BEGIN_MSG_MAP_EX(CView)MSG_WM_CREATE(OnCreate)MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColor)MESSAGE_HANDLER(WM_PAINT, OnPaint)END_MSG_MAP()// Handler prototypes (uncomment arguments if needed):
//  LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
//  LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
//  LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);int OnCreate(LPCREATESTRUCT lpCreateStruct);LRESULT OnCtlColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);private:CLinkCtrl link_support_;CFont font_16_normal_;
};

View.cpp

// View.cpp : implementation of the CView class
//
/#include "stdafx.h"
#include "resource.h"#include "View.h"
#include <CommCtrl.h>
#include <string>
#include <atlmisc.h>BOOL CView::PreTranslateMessage(MSG* pMsg)
{pMsg;return FALSE;
}LRESULT CView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{CPaintDC dc(m_hWnd);//TODO: Add your drawing code herereturn 0;
}static HFONT CreateFont(int pixel,bool bold,const wchar_t* font_name)
{LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); // zero out structure lf.lfHeight = pixel; // request a 8-pixel-height fontif(bold){lf.lfWeight = FW_BOLD;  }lstrcpy(lf.lfFaceName, font_name); // request a face name "Arial"HFONT font = ::CreateFontIndirect(&lf);return font;
}LRESULT CView::OnCtlColor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{HDC hDC = (HDC)wParam;HWND hWnd = (HWND)lParam;if(hWnd == link_support_){SetBkMode(hDC,TRANSPARENT);SetTextColor(hDC,RGB(255,0,0));return (LRESULT)AtlGetStockBrush(HOLLOW_BRUSH);}return 0;
}int CView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{LITEM item = { 0 };item.iLink = 0;item.mask = LIF_ITEMINDEX | LIF_STATE;item.state = LIS_DEFAULTCOLORS; // 修改默认超链接颜色需要vista以上系统才支持.item.stateMask = LIS_DEFAULTCOLORS;std::wstring text_link_connectfail;text_link_connectfail.append(L"hello <A HREF=\"https://infoworld.blog.csdn.net\">tobey</A>, "L"good good study,<A HREF=\"https://infoworld.blog.csdn.net\">day day up</A>.");font_16_normal_ = CreateFont(16,false,L"Arial");link_support_.Create(m_hWnd,NULL,text_link_connectfail.c_str(),WS_CHILD |WS_VISIBLE| WS_CLIPCHILDREN,0,kMyDeviceLinkSupportId);link_support_.SetFont(font_16_normal_);CSize size;link_support_.GetIdealSize(size);int rc = link_support_.SetWindowPos(NULL,100, 100, size.cx, size.cy,(SWP_NOZORDER | SWP_NOREPOSITION | SWP_NOACTIVATE));link_.SetItem(&item); // 第一个链接item.iLink = 1; //第二个链接link_.SetItem(&item);return 0;
}

图1:

项目

https://download.csdn.net/download/infoworld/12062541

参考

create-syslink-controls

change-color-of-syslink-control

syslink-overview

ns-commctrl-litem

[WTL/ATL]_[初级]_[设置超链接字体颜色]相关推荐

  1. html修改链接文字颜色,html设置超链接字体颜色 html超链接的字体颜色怎么改

    html链接文字颜色怎么设置 定义a标签的css属性即可. 例如:文字颜色 在css中写上a{color: #000;} (#号后面是颜色值) 如果单独定义一条a标签,可以先找前面的div,写a样式的 ...

  2. HTML设置超链接字体颜色和点击后的字体颜色

    CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类 定义链接样式  CSS为一些特殊效果准备 ...

  3. php链接字体颜色,通过html/css设置超链接字体颜色

    超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色 超链接字体颜色设置是通过 ...

  4. 设置超链接字体颜色和点击后的字体颜色步骤流程

    今天试用了一款 Typecho主题.启用后发现该主题一个弊端就是文章详情页里加上超链接的文字部分和其他正文一样,看不出有超链接,只有在鼠标放上去之后才会显示.这样不利于用户体验.经研究尝试,给出以下解 ...

  5. HTML设置超链接字体颜色和点击后的字体颜色(总结)

    CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是:  :link  :visi ...

  6. HTML中怎么设置超链接字体颜色和点击后的字体颜色

    定义链接样式CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是::link:vi ...

  7. HTML怎么设置超链接字体颜色和点击后的字体颜色?

    我们要定义链接样式,所以其中必不可少的就是超级链接中的a标签,a标签和伪类链接起来书写的方法就是定义链接样式的基础方法,它们的写法如下: a:link a:visited a:hover a:acti ...

  8. 怎么在html中加入字体颜色链接,html超链接字体颜色怎么改

    在html中怎么修改超链接后的字体的颜色 html链接文字颜色怎么设置 定义a标签的css属性即可. 例如:文字颜色 在css中写上a{color: #000;} (#号后面是颜色值) 如果单独定义一 ...

  9. 设置TextView中超链接字体颜色、下划线

    ClickableSpan:这是超链接相关的样式控制和点击事件的控制类,我们需要对它进行继承,然后修改成我们需要的样式.其中,可以对超链接文本字符进行颜色.字体大小.字体.下划线.点击事件的自定义控制 ...

最新文章

  1. Spring学习(九)Spring 和数据库编程【了解】
  2. java泛型程序设计——反射和泛型
  3. python都可以开发什么_Python的优势到底是什么?Python都能开发什么?
  4. Android5.1 Audio计算音量流程
  5. netty 多线程微盘_Netty多线程处理机制
  6. Ecshop源码阅读
  7. 日语中单词后面1,2,3,4,5是什么意思
  8. 记一次失败的小米前端面试经历
  9. 记录几个程序员接单搞副业的网站
  10. Agv、Rgv 车辆控制调度系统开发第一篇
  11. 河南2021年高考成绩位次查询,河南高考成绩位次排名查询2020,河南高考一分一段表...
  12. barrier linux,Linux Barrier I/O
  13. The class file xxx contains a signature 'xxx;' ill-formed at position 6 问题的解决
  14. matlab打开dat形式文件_matlab 读取dat文件
  15. css 知识点小结以及颜色大全,全在这里
  16. 计算机发展未来的畅想英语作文,科技畅想未来英语作文
  17. 虚拟机文件无法正常打开的解决方法
  18. 边玩边学!15 个学编程的游戏网站!
  19. Python,一正整数,如果是奇数,乘3加1,如果是偶数,除2,最终可以得到1
  20. 等于(==)与全等(===)的区别 ?

热门文章

  1. 算法 || 蛮力法【求解最大子序列和】#05
  2. 程序江湖:第三章 莫等闲白了少年头
  3. vim graphical cheat sheet
  4. OpenJudge 1.6.1
  5. 【Linux应用】卷组概念及其操作
  6. gbdt、xgb、lgb决策树模型
  7. java深度复制 xjh 亲测 两种方法
  8. js比较俩个对象是否相等
  9. Ext JS 容器Containers
  10. 企业撩文化下的品牌推广策略