[WTL/ATL]_[初级]_[设置超链接字体颜色]
场景
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
也有说明. 里面用到一个结构体LITEM
的state
的值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]_[初级]_[设置超链接字体颜色]相关推荐
- html修改链接文字颜色,html设置超链接字体颜色 html超链接的字体颜色怎么改
html链接文字颜色怎么设置 定义a标签的css属性即可. 例如:文字颜色 在css中写上a{color: #000;} (#号后面是颜色值) 如果单独定义一条a标签,可以先找前面的div,写a样式的 ...
- HTML设置超链接字体颜色和点击后的字体颜色
CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类 定义链接样式 CSS为一些特殊效果准备 ...
- php链接字体颜色,通过html/css设置超链接字体颜色
超链接字体颜色设置是通过css来设置,a链接的颜色设置常用的有以下两种,1.超链接a的初始状态颜色,2.超链接字体的鼠标滑过颜色,还有两种病不常用:3.超链接字体的已访问颜色 超链接字体颜色设置是通过 ...
- 设置超链接字体颜色和点击后的字体颜色步骤流程
今天试用了一款 Typecho主题.启用后发现该主题一个弊端就是文章详情页里加上超链接的文字部分和其他正文一样,看不出有超链接,只有在鼠标放上去之后才会显示.这样不利于用户体验.经研究尝试,给出以下解 ...
- HTML设置超链接字体颜色和点击后的字体颜色(总结)
CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link :visi ...
- HTML中怎么设置超链接字体颜色和点击后的字体颜色
定义链接样式CSS为一些特殊效果准备了特定的工具,我们称之为"伪类".其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是::link:vi ...
- HTML怎么设置超链接字体颜色和点击后的字体颜色?
我们要定义链接样式,所以其中必不可少的就是超级链接中的a标签,a标签和伪类链接起来书写的方法就是定义链接样式的基础方法,它们的写法如下: a:link a:visited a:hover a:acti ...
- 怎么在html中加入字体颜色链接,html超链接字体颜色怎么改
在html中怎么修改超链接后的字体的颜色 html链接文字颜色怎么设置 定义a标签的css属性即可. 例如:文字颜色 在css中写上a{color: #000;} (#号后面是颜色值) 如果单独定义一 ...
- 设置TextView中超链接字体颜色、下划线
ClickableSpan:这是超链接相关的样式控制和点击事件的控制类,我们需要对它进行继承,然后修改成我们需要的样式.其中,可以对超链接文本字符进行颜色.字体大小.字体.下划线.点击事件的自定义控制 ...
最新文章
- Spring学习(九)Spring 和数据库编程【了解】
- java泛型程序设计——反射和泛型
- python都可以开发什么_Python的优势到底是什么?Python都能开发什么?
- Android5.1 Audio计算音量流程
- netty 多线程微盘_Netty多线程处理机制
- Ecshop源码阅读
- 日语中单词后面1,2,3,4,5是什么意思
- 记一次失败的小米前端面试经历
- 记录几个程序员接单搞副业的网站
- Agv、Rgv 车辆控制调度系统开发第一篇
- 河南2021年高考成绩位次查询,河南高考成绩位次排名查询2020,河南高考一分一段表...
- barrier linux,Linux Barrier I/O
- The class file xxx contains a signature 'xxx;' ill-formed at position 6 问题的解决
- matlab打开dat形式文件_matlab 读取dat文件
- css 知识点小结以及颜色大全,全在这里
- 计算机发展未来的畅想英语作文,科技畅想未来英语作文
- 虚拟机文件无法正常打开的解决方法
- 边玩边学!15 个学编程的游戏网站!
- Python,一正整数,如果是奇数,乘3加1,如果是偶数,除2,最终可以得到1
- 等于(==)与全等(===)的区别 ?