由于标准的按钮控件在样式上比较单调,因此,在很多时候,我们都需要对标准按钮控件实行自画,以满足特定的需求。为了能让按钮控件支持自画,需要设置按钮的BS_OWNERDRAW风格,一般情况下,我们可以在PreSubclassWindow中进行设置:
class CxxxButton : public CButton
{
...
};
void CxxxButton::PreSubclassWindow()
{
ModifyStyle( 0, BS_OWNERDRAW);
CButton::PreSubclassWindow ();
}
这样,我们就可以重载DrawItem,从而按照自己的意愿对按钮进行自画。
但是,在实际环境中,我们经常发现这样的bug:我们明明已经对某个按钮控件进行了子类化了,并且开始的时候,该按钮也确实是自画的,可以满足当前的需求。但是在进行了一些其它的操作之后,发现该按钮有变为了标准的按钮了,自画属性已经不翼而飞了!这可不是我们所希望的。
那么,该如何让按钮在不管进行了什么操作之后,还能保持自画的风格呢?从MSDN中找到了解决的方法:截获BM_SETSTYLE的消息。从MSDN中,可以了解到,应用程序在改变按钮的风格的时候,会给按钮发送BM_SETSTYLE的消息。我们在按钮处理该消息之前截获它,然后修改消息参数为符合自己需求的风格,这样就不怕应用程序在暗地里捣鬼了。部分代码如下:
1、消息声明:
afx_msg LRESULT OnSetStyle ( WPARAM wParam, LPARAM lParam );
2、消息映射:
ON_MESSAGE ( BM_SETSTYLE, OnSetStyle )
3、实现修改风格:
LRESULT CxxxButton::OnSetStyle ( WPARAM wParam, LPARAM lParam )
{
return DefWindowProc ( BM_SETSTYLE, ( wParam & ~BS_TYPEMASK ) | BS_OWNERDRAW, lParam );
}
如果编译的时候提示没有定义BS_TYPEMASK,那么可以手动添加该宏:
#ifndef BS_TYPEMASK
#define BS_TYPEMASK SS_TYPEMASK
#endif
相关推荐
C# 自定义按钮控件教程与实践
自定义控件是软件开发中提升用户界面(UI)一致性和复用性的重要工具。在本章中,我们将探讨自定义控件的基本概念以及它们在整个开发过程中的重要性。自定义控件是开发者为了满足特定需求,从现有控件或从头开始创建的用户界面组件。它们可以嵌入到应用程序中,以增强应用程序的功能性和美观性。自定义控件可以封装复杂的功能,并通过简化的接口暴露给开发者,使得在不同的上下文中重用相同的UI元素变得更加容易。
自绘的一些属性
// 以下两个消息都是父窗口收到的 1. WM_MEASUREITEM // 拦截这个消息, 设置相应的属性 // The MEASUREITEMSTRUCT structure informs the system of the dimensions of an owner-drawn control or menu item. // This allows the system t
用Python手把手教你实现一个多层感知机(MLP)——从理论到代码实战
本文详细介绍了如何使用Python和Theano库从零开始实现多层感知机(MLP),涵盖从核心原理到代码实战的全过程。通过构建隐藏层、输出层和完整MLP模型,结合权重初始化、激活函数选择和训练技巧,帮助开发者深入理解神经网络工作机制,并应用于实际机器学习任务。
自绘按钮的实现
自绘按钮的实现如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用
LED单元板驱动(HUB75接口)
开始之前先吐槽一下,搜这个的资料。要么都是Arduino,要么单片机的收费。小小的一个LED单元板,凭什么? 用Arduino是你速度快还是我ST,树莓派不好用?收费更离谱,这点东西还藏私?给你个中指凸。把原理都写出来看你怎么收费。 一、接口定义及原理 如图,有两个RGB通道,共占用6个IO。剩下的ABCDE为地址通道,LAT为行数据锁存通道,CLK为数据时钟,OE为低电平使能LED显示。图片这里没有E,证明它是16扫的,有E就会把B上面的地改为E。这样就是5位,2的5次方32扫。1.
硬件学习笔记(器件篇)—— 磁珠与磁环
因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。
Winform 窗体怎么暂停自绘
<br />从数据库读出数据后,需要在窗体动态添加大量控件。<br />这些控件是一个一个从窗体出现的,整个过程很慢。<br /> SuspendLayout() ResumeLayout()两个方法好像只是针对布局的。<br />能不能先让窗体停止自绘,等控件增加完成了之后再一起显示出来。这样显示效率会不会高一点?<br />那些控件实际上也是绘出来的,如果要快,就自已写这些控件(用画的方式),当然是要付出代价的<br />话说版主是有这个特权的,不过除非问题已经解决了,否则不会在技术区灌水,所以能看到这
SAP S/4HANA 可扩展性 – 面向初学者的简化指南
可扩展性(Extensibility)是 SAP ECC 和 SAP S/4HANA 的一项关键功能。它使客户能够通过定制其业务流程来创造竞争优势,并使合作伙伴能够通过量身定制的解决方案来丰富核心 ECC 或 S/4HANA。在过去的几十年中,SAP 的 on-premise 版本客户和合作伙伴主要使用经典的 ABAP 扩展性来扩展他们的 ERP 解决方案。经典扩展性允许 ABAP 开发人员使用甚至修改所有 SAP 对象。尽管经典扩展性非常强大和灵活,但在当今的云世界中,它已不再是一个好的选择。
关于BS_OWNERDRAW的用法
BS_OWNERDRAW用于自绘按钮,通常与WM_CTLCOLORBTN消息连用,如下: LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND button0; switch (message) { case WM_CREATE: button0 =
Qt C++ + Qt 3D 的数字孪生工厂
以下是一个基于 **Qt C++ + Qt 3D** 的数字孪生工厂完整源码示例,集成了 **Qt 3D** 产线建模和 **WebSocket** 实时数据交互。ui->qualifiedProductsLabel->setText(QString("合格产品: %1").arg(data.qualifiedProducts));ui->totalProductsLabel->setText(QString("总产量: %1").arg(data.totalProducts));
ubuntu系统禁止/开启内核自动更新
内核自动更新会导致驱动和内核版本不对应,导致驱动无法使用,所以需要禁止自动更新内核。本文介绍ubuntu系统禁止/开启内核更新的方法。
截获BM_SETSTYLE:自绘按钮控件属性自绘属性的保持
由于标准的按钮控件在样式上比较单调,因此,在很多时候,我们都需要对标准按钮控件实行自画,以满足特定的需求。为了能让按钮控件支持自画,需要设置按钮的BS_OWNERDRAW风格,一般情况下,我们可以在PreSubclassWindow中进行设置: class CxxxButton : public CButton { ... }; void CxxxButton::...
109. 使用 SAP UI5 FileUploader 控件上传本地文件
我们可以使用SAPUI5提供的控件,将本地文件上传到远端服务器进行存储。远端服务器负责接收上传的文件的逻辑,可以采取Java,Node.js或者ABAP等任意的编程语言实现。本地文件上传也是最终用户同文件服务器交互的重要手段之一,因此文件上传这个主题,本教程会通过若干篇文章连续进行介绍。笔者还另外实现了一个不通过SAPUI5FileUploader控件,而是直接用HTML原生的input。先看本步骤完成后实现的场景。本步骤完整的源代码位置。进入目录109,运行命令行。...
自绘按钮
1 native C++ 创建带BS_OWNERDRAWf风格的按钮 在wndproc中响应WM_DRAWITEM,自绘。 下图为(windows程序设计(第五版)中)截图,上图响应WM_DRAWITEM,但是没有画。 2 MFC原理同上 继承CButton类,添加BS_OWNERDRAW风格 void CxxxButton::PreSubclassWindow() {
cursor AI代码编辑器IDE对接deepseek模型api;字节ai编辑器trae
参考: https://www.cursor.com/ https://platform.deepseek.com/https://www.cursor.com/下载安装后,注册账号登录即可 再高级里选择设置 再模型这注册模型: 模型名称一定要填正确,url地址填好,最后填上秘钥验证
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
mfc自绘控件的实现
自绘按钮的实现 作者:杜修杏 一、准备工作 在开始编码之前,首先应该确定好,更准确的说应该是设计好按钮在各种状态下的外观。按钮控件的几中基本状态包括: Normal状态,就是按钮一开始显示时的样子
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
c#高级自定义保持按钮控件
最简单的用户控件创建 创建一个c#窗体应用程序 解决方案管理器选中项目名称,右键添加-用户控件命名为HoldButton 点击设计器,属性-事件-click事件 全局一个标志位public bool Isclick; 在click事件中 Isclick = !Isclick; this.BackColor = Isclick ? Color.Blue : Color.Red; 6.菜单栏-生成-重新生成解决方案 7.选择窗体,点击工具箱,在项目组件中找到刚刚新建的用户控件,添加到窗体,运行程序
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
按钮控件(button)
按钮控件根据其风格属性可派生出:命令按钮(Pushbutton)、检查框(Check Box)、单选按钮(Radio Button)、组框(Group Box)和自绘式按钮(Owner-draw Button)。 命令按钮是指可以响应鼠标点击的小矩形子窗口。命令按钮的作用是对用户的鼠标单击作出反应并触发相应的事件,在按钮中既可以显示正文,也可以显示位图。 选择框控件可作为一种选择标记,可以有
.自绘按钮(DrawItem)
如果你希望能够在自己的程序中表现出新意,那么你一定不会仅仅满足于MFC提供那些标准控件。这时,我们就必须自己另外多做些工作了。就改变控件外观这一点来说,主要是利用控件的自绘功能(Owner Draw)实现的。本篇将和各位一起定义一个XP风格的CXPButton按钮类,目的不在于介绍CXPButton类的使用技巧,而在于向各位阐述实现自绘按钮的方法。当然如果你觉得CXPButton有用的话,也可以把...
1181



被折叠的 条评论
为什么被折叠?



