关于函数OnCtlColor()改变btn按钮控件的文字颜色和背景颜色的问题

关于函数OnCtlColor()改变btn按钮控件的文字颜色和背景颜色的问题,第1张

您好,

//CColorBtnh

class CColorBtn : public CButton

{

DECLARE_DYNAMIC(CColorBtn)

public:

CColorBtn();

virtual ~CColorBtn();

void SetHighLightTextColor(COLORREF color);//设置高亮时字体的颜色

void SetHighLightBkColor(COLORREF color);//设置高亮时的背景颜色

COLORREF GetHighLightTextColor() const;//获取高亮时字体的颜色

COLORREF GetHighLightBkColor() const;//设置高亮时的背景颜色

protected:

virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);//重载,颜色的修改工作主要通过此函数来完

bool m_IsHighLight;//记录按钮是否处于高亮状态的标志

UINT m_uStyle;//记录按钮类型的变量

COLORREF m_HighLightTextColor;//文本高亮颜色值

COLORREF m_HighLightBkColor;//背景高亮颜色值

protected:

DECLARE_MESSAGE_MAP()

public:

afx_msg void OnBnClicked();

protected:

virtual void PreSubclassWindow();

public:

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

};

以下是对应的CPP文件,主要列举一些关键函数:

1构造函数:

[cpp] view plaincopy

CColorBtn::CColorBtn()

{

m_IsHighLight=false;//默认按钮没有处于高亮状态

m_uStyle=DFCS_BUTTONPUSH;//窗口的默认样式

m_HighLightTextColor=RGB(255,0,0);//默认高亮字体为红色

m_HighLightBkColor=RGB(0,255,0);//默认高亮背景色为绿色

}

2鼠标按键按下响应函数:

[cpp] view plaincopy

void CColorBtn::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

m_uStyle|=DFCS_PUSHED;

CButton::OnLButtonDown(nFlags, point);

}

上述中,对于按钮的样式一定要用m_uStyle|=DFCS_PUSHED; 这样才能在保证按钮风格的情况下产生按下的效果。

3鼠标按键d起响应函数:

[cpp] view plaincopy

void CColorBtn::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

m_uStyle=DFCS_BUTTONPUSH;

CButton::OnLButtonUp(nFlags, point);

}

上述代码中,再将按钮样式回复为没有按下的状态即可:

4修改按钮的OwnerDraw属性。由于在调用这个类时,不能保证用户会在界面上将按钮的OwnerDraw属性置为True,因此,这里通过代码来进行修改,主要通过重载PreSubclassWindow()函数来实现:

[cpp] view plaincopy

void CColorBtn::PreSubclassWindow()

{

// TODO: 在此添加专用代码和/或调用基类

this->ModifyStyle(NULL,BS_OWNERDRAW);

CButton::PreSubclassWindow();

}

5自绘函数:

[cpp] view plaincopy

void CColorBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

// TODO: 添加您的代码以绘制指定项

//依据窗口类型绘制控件

::DrawFrameControl(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,DFC_BUTTON,m_uStyle);

CDC pDC=CDC::FromHandle(lpDrawItemStruct->hDC);

//获取按钮的文本信息

CString strText;

GetWindowText(strText);

LONG dist=0;//缩进距离

CBrush brush;

CRect rect;

CRect focusRect;

if(m_IsHighLight)

{

brushCreateSolidBrush(m_HighLightBkColor);

}

else

{

brushCreateSolidBrush(::GetSysColor(COLOR_BTNFACE));

}

rectCopyRect(&lpDrawItemStruct->rcItem);

dist=2;

rectleft+=dist;

rectright-=dist;

recttop+=dist;

rectbottom-=dist;

::FillRect(lpDrawItemStruct->hDC,&rect,(HBRUSH)brushm_hObject);

::SetBkMode(lpDrawItemStruct->hDC,TRANSPARENT);

COLORREF crOldColor;

if(m_IsHighLight)

{

crOldColor=::SetTextColor(lpDrawItemStruct->hDC,m_HighLightTextColor);

}

else

{

crOldColor=::SetTextColor(lpDrawItemStruct->hDC,RGB(0,0,0));

}

::DrawText(lpDrawItemStruct->hDC,strText,strTextGetLength(),&lpDrawItemStruct->rcItem,DT_SINGLELINE|DT_VCENTER|DT_CENTER);

::SetTextColor(lpDrawItemStruct->hDC,crOldColor);

if(::GetFocus()==this->m_hWnd)

{

focusRectCopyRect(&lpDrawItemStruct->rcItem);

dist=3;//缩进距离

focusRectleft+=dist;

focusRectright-=dist;

focusRecttop+=dist;

focusRectbottom-=dist;

::DrawFocusRect(lpDrawItemStruct->hDC,(LPRECT)&focusRect);

}

}

3D-Brush是专为游戏美工设计的,它专注于游戏模型的细节设计,集三维模型实时纹理绘制和细节雕刻功能为一身,全面取代“ZBrush+Bodypaint”的传统低效率模式,加速细节设计流程,在更短的时间内创造出更多的价值。只需导入一个低精度模型,3D-Brush便可为其自动创建UV,一次绘制,法线贴图、置换贴图、颜色贴图、透时贴图、高光贴图就同时生成了。最大材质输出支持到40964096,真正的无缝材质输出!

基本介绍 外文名 :brush 用途 :为游戏模型的开发提供便利 优点 :模型雕刻和纹理绘制的高度集成 技术 :采用法线图技术 基本信息,关键特性,专注开发,中文支持,技术支持,独创技术, 基本信息 3D-Brush 的每一处设计都无不为游戏模型的开发提供便利,3D-Brush创新采用法线图技术而不是直接以片面的模式进行视窗显示,因此的法线图是实时生成的,可以随时按6键切换到低面模式显示模型,这和最终模型套用法线图在游戏引擎中的效果是一样的。因此,所见即所得,可随时在3D-Brush中预览模型在游戏中的显示效果。这对游戏开发人员显得尤其重要。除此之外,3D-Brush还专为游戏模型的设计提供了更多方便实用的小工具。 关键特性 模型雕刻和纹理绘制的高度集成: 3D-Brush将纹理绘制功能和雕刻功能整合在一个简单易用的界面中。 3D图层: 每个图层都包含了颜色,高光,透明度和凹凸通道。 简单易用: 3D-Brush虽然功能强大,但 *** 作界面却被设计的非常人性化,易于使用。每个 *** 作软体下方都有提示,因此您可以迅速的掌握3D-Brush。Photoshop中的一些常用快捷键,都可以直接在3D-Brush中使用,这使得平面设计人员都可以自然的投入到3D创作环境中。 复制/贴上: 您可以在3D环境中直接转移部分区域,复制/贴上,使用曲线或样条线进行绘制。 绘制轨迹和线缝: 3D-Brush有一种很简单的方法用于绘制轨迹和线缝。 与Photoshop的无缝集成: 3D-Brush与Potoshop的结合已经达到了空前的完美状态。您可以随时通过Ctrl+Shift+P将当前的工程转换到Potoshop当中进行编辑,编辑完成后您所做的修改将自动被转换到3D环境中,2D图层中的信息将被自动转换到3D图层中,任何信息都不会丢失!任何您在Photoshop中的 *** 作与在3D-Brush中的 *** 作都是等同的。最新支持到Phtoshop CS3! 自适应细分: 3D-Brush和其他雕刻软体的其中一个主要不同之处就是它的自适应细分算法。其他雕刻软体将每个边分成两部分,因此它们很难处理狭长的多边形。然而3D-Brush确采用了一种“聪明”的算法,根据每个边的长度决定将其分为几个部分。狭长的多边形可以被合理的细分。您可以以倍增的方式改变模型的细分级别(就像其他的软体一样),还可以使用百分比来调节,例如40%。您在3D-Brush中雕刻模型,改变模型格线的顶点,自适应细分可以使模型细分的非常均匀。 法线图实时生成: 由于采用了特殊的算法,3D-Brush的视窗显示是采用法线图技术来完成的。因此法线贴图是实时生成的,您不必再等待漫长的烘焙时间。您可以随时通过"查看\查看世界空间的法线图"命令实时查看法线贴图。 多种贴图输出: 只需一次绘制,就可以随意输出无论是法线贴图、置换贴图、颜色贴图,透明贴图还是高光贴图。最大材质输出支持到40964096,真正的无缝材质输出! 可自动生成UV坐标: 如果需要3D-Brush可以自动为模型创建一个合适的UV贴图坐标。这样即使模型没有UV,3D-Brush照样能够将其载入,并创建一个合适的UV。当然您也可以选择保留原来的UV设定。 专注开发 3D-Brush是专为游戏美工设计的。使用3D-Brush开发游戏模型,无疑是最好的选择。3D-Brush不仅同时具备了模型雕刻和纹理绘制功能,每一处设计都无不考虑为游戏模型的开发提供便利。3D-Brush的法线图是实时生成的,可以随时按6键切换到低面模式显示模型,这和最终模型套用法线图在游戏引擎中的效果是一样的。因此,所见即所得,可以随时在3D-Brush中预览模型在游戏中的显示效果。这对游戏开发人员显得尤其重要。除此之外,3D-Brush还专为游戏模型的设计提供了许多实用的小工具。 中文支持 3D-Brush软体对中文有着良好的支持,您现在就可以运用文字工具直接在3D模型上输入中文,这些文字将被自动转换为三维信息,你可以把它当作模型一样随意的进行调整。支持中文路径。 服务教育机构: 3D-Brush为方便教育机构教学,特别增加了中英双语支持,还特别提供了教育特供价,使得教育机构以很低的价格就可以获得足够多的软体许可。 技术支持 3D-Brush一早就有了中文版软体,一早就有了中文手册、中文官方论坛,甚至QQ技术交流群。相比Zbrush和Mudbox,3D-Brush更加本土化,使您的学习无忧! 3D-Brush是用户的软体,而不是软体开发商的: 3D-Brush是一款极具活力的软体,它不断吸收广大使用者们的意见和建议,每一次更新都包含了使用者的概念。您可以随时将自己的想法反馈到中文官方论坛上,您的反馈甚至决定了3D-Brush的发展方向。使您感觉,3D-Brush就好像是为自己定制开发的一样,倍感亲切! 独创技术 3D-Brush创新采用法线图技术而不是直接以片面的形式作为视窗显示, 法线图是实时生成的 ,这样就能够以较少的面显示出非常多的细节。在3D-Brush中,一个4万-10万面的模型因为法线图的缘故,看起来就像1百万-1600万面一样细腻。 可以编辑的材质支持到4096x4096。

SolidBrush继承自Brush,表示单色的笔刷。

Brushes 类则继承自SystemObject。它提供了一些标准颜色的画笔,包含静态的只读属性,这些属性返回由属性名指示的颜色的 Brush 对象。通常不必显式处置由此类中的属性返回的画笔,除非该画笔用于构造新画笔。因此,没有必要创建Brushes 类的实例

可以这么看Brush brush = BrushesGreen 和 Brush brush = new SolidBrush(ColorGreen) 是等效的。只不过后者一般是需要 brushDispose() 的,前者不需要。

还有其他的继承自 Brush 的类

SystemDrawingDrawing2DHatchBrush(阴影、前景色和背景色定义的矩形笔刷)

SystemDrawingDrawing2DLinearGradientBrush(线性渐变笔刷)

SystemDrawingDrawing2DPathGradientBrush(用渐变填充 GraphicsPath 对象的内部的笔刷)

SystemDrawingTextureBrush(用图像来填充形状的内部的笔刷)

以上就是关于关于函数OnCtlColor()改变btn按钮控件的文字颜色和背景颜色的问题全部的内容,包括:关于函数OnCtlColor()改变btn按钮控件的文字颜色和背景颜色的问题、brush(游戏美工设计软体)详细资料大全、C# 新手提问,请问Brushes和SolidBrush有什么区别吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9552932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存