MFC中CStatic控件动态改变
我现在需要一个静态控件,当鼠标放上去时字体与颜色都要改变,当鼠标离开时在变回来。
现在可以改变字体,但是改变字的颜色还不行。我去网上搜了一下,两种方法,一个在父窗口中相应onctlcolor消息,但是我想在类的内部解决问题,所以不想用这个办法。二就是重写onpain函数。但是,我重写了之后,在OnMouseOver函数中用Invaliadate控件并不会刷新,也就是当鼠标放上去时没有变化。
麻烦各位帮忙看看
void MyCstatic::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// 改变字体
CStatic::OnMouseMove(nFlags, point);
static bool IsChanged = false;
CFont* cf=new CFont();
CWnd* ptrPrevWnd = NULL;
CRect rect;
if(!IsChanged){//还没改变,鼠标进入
IsChanged = true;
m_pOldFont = this->GetFont();
cf->CreatePointFont(120,"隶书");
m_pCurFont = cf;
m_hCurTextColor = RGB(255,0,0);
ptrPrevWnd = SetCapture();
Invalidate(FALSE);
this->RedrawWindow();
this->SendMessage(WM_PAINT,0,0);
}
else{
GetClientRect(rect);
if(!rect.PtInRect(point)){
IsChanged = false;
this->SetFont(m_pOldFont);
ReleaseCapture();
}
}
}
void MyCstatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
m_hOldTextColor = dc.SetTextColor(m_hCurTextColor);
MessageBox("OnPaint","paint");
CString str;
this->GetWindowText(str);
CRect rect;
this->GetClientRect(rect);
dc.SelectObject(m_pCurFont);
dc.SetBkMode(TRANSPARENT);
dc.DrawText(str,rect,DT_CENTER ¦DT_VCENTER ¦DT_SINGLELINE);
// Do not call CStatic::OnPaint() for painting messages
}
可以使用消息反射在控件自身处理消息,比如WM_CTLCOLOR。
这个问题第1个回答:
这个问题第2个回答:
其实你并不需要在OnMouseMove里做主动刷新的事情,当鼠标移动到控件上的时候系统会自动重画该控件的。而且调用Invaliadate也应该注意,如果要一个控件Invaliadate,不论你调用多少次,系统都只按照最后一次调用来进行重画,所以调用的多并不一定能得到期望的效果。
楼主要做颜色变换的,最简单的嘛就是重载DrawItem,根据它的参数LPDRAWITEMSTRUCT,可以得到当前控件的状态,根据不同的状态去做不同的绘画的动作咯。
这个问题第3个回答:
ls说的正确,可以通过重写DrawItem函数。
MFC中CStatic控件动态改变相关推荐
- MFC中CSTATIC控件双击全屏/双击恢复
双击全屏方法有两种 1.双击放大的时候调static控件的父句柄SerParent让控件的父句柄变成桌面,然后再提取桌面的分辨率用movewindow或者setwindowpos改变控件大小.恢复成原 ...
- MFC中picture控件如何响应鼠标移动?
MFC中picture控件如何响应鼠标移动? 2011-08-21 21:23 轻若惊鸿 | 浏览 3354 次 硬件网络 我将一个picture控件的属性中的Notify勾上了,但是只能响应鼠标按键 ...
- MFC中的控件是怎么实现的呢?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠
请教一下MFC中的控件是怎么实现的呢(通过调用什么样的API,传递什么参数)?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠在主窗口上?还是直接在主窗口上画图? 我想到的是: JavaScr ...
- MFC中Listbox控件的简单使用
MFC中listbox控件是为了显示一系列的文本,每个文本占一行. Listbox控件可以设置属性为: LBS_CHILD :(默认)子窗口 LBS_Visible :(默认)可视 LBS_Mul ...
- (VC2005)MFC中添加控件的成员变量.
VC 2005 中添加控件的成员变量. 方法一:使用变量添加向导. 右击控件->Add Variable (打开了 Add Member Variable Wizard) -> 输入Va ...
- MFC中常见控件的操作
1.下面的代码用于获取屏幕的长度和宽度 int iWidth = GetSystemMetrics(SM_CXSCREEN); // int iHeight = GetSystemMetrics(S ...
- 关于错误码0x80040154 MFC中ACtiveX控件没有注册的正确解决方案
今天遇到一个问题,以前VC++6.0做好的工程文件在另一台电脑上无法运行,并且报错, CoCreateInstance of OLE control {67397AA3-7FB1-11D0-B148- ...
- MFC中树形控件的应用——电话簿
一.电话薄的代码如下: 1. // PhoneDlg.cpp : implementation file //#include "stdafx.h" #include " ...
- MFC中Combo控件的使用
Combo-box-control 组合框 示例: 实现父类继承下来的虚函数OnInitDialog(),并添加以下代码: r_combo1.InsertString(0,L"胡桃" ...
最新文章
- 博士生起诉学校,因核心期刊发文数不够申请学位被拒,一审判决胜诉!
- 【报错】No match for argument: mysql-community-server Error: Unable to find a match: mysql-community-s
- 【城市沙龙】LiveVideoStack Meet|合肥:在“霸都”邂逅音视频技术
- springboot问题Description Resource Path Location Type Java compiler level does not match the version o
- Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数
- java常用jar_常用jar包含义
- oracle rman 检查坏块,Oracle中使用RMAN来检验坏块
- 使用PowerShell将字符串拆分为数组
- 笨办法学Python(第三版)pdf
- 大数据: 城市转型发展新的驱动力
- 最新苹果CMS对接千月版本-畅视影视(V9.3开源)已搭建测试版
- freeswitch通话记录mysql_freeswitch电话计费详单入库方法
- 如何正确认识和提升自己的格局
- 模板匹配及其源代码---Edge Based Template Matching
- dellR720运用U盘安装windows2008R2系统指导
- 【分享】集简云小程序识别名片到CRM流程搭建示例
- uni-app 微信小程序接入高德SDK
- appstore开发者 名称修改
- 中兴通讯5G近期出席多个大会,有风范更有担当!
- c#Html转图片的两种方式
热门文章
- ajax requestbody传值,ajax POST方法调用后@RequestBody属性为空
- (网络编程)TCP实现聊天
- 分布式事务的解决方案
- java import自定义类_Java实现的自定义类加载器示例
- 高斯拟合原理_AlexNet原理和实现
- 负数显示红字html语言,需要将单元格内的负数显示为红色且不带负号显示两位小数的格式代码是下面哪一种A、 0.00;[红色...
- python包导入方式_python导包的几种方法(自定义包的生成以及导入详解)
- 【教程】Linux 下软 RAID 实现方案!!
- 云原生背景下故障演练体系建设的思考与实践—云原生混沌工程系列之指南篇
- 消息队列RocketMQ应对双十一流量洪峰的“六大武器”