用VC++实现自绘按钮控制

用VC++实现自绘按钮控制

Microsoft Windows以其丰富一致的 图形用户界面, 简单灵便的操
作,被广大用户所接受。对话框就是其中一个非常重要的界面形式,
并且Windows为其应用程序的开发者提供了相当丰富的界面资源,许多
控制可以方便地加入对话框中。但当我们需要编写一个商业应用,需
要一个更友好的图形用户界面时,就会发现资源的贫乏。
Visual C++提供了一个CBitmap Button类在一定程序上缓解了
增加新资源的要求。但当我们要求在程序中能动态地改变图形时,我
们就不得不考虑放弃CBitmapButton类,而坐下来自己做一点工作了。
一个可行的办法就是重载CButton类(即按钮控制)。这样对这块区域
的大小、位置和ID号都可以通过AppStadio方便地制作。当然这样作最
大的好处还是在于充分利用C++的特性把绘制控制的代码封装了起来
,既避免了重复性开发,又使程序变得更简洁,增强了代码的可读性

现在我们就通过创建一个名叫CColorButton的类来学习这种方法
。虽然这是一个功能非常简单的类,通过调用成员函数ChangeColor可
改变其颜色,鼠标点中时则高亮边框表示选中。但利用这种思路我们
只需添加几个数据成员和重载一个函数就可以方便地实现你所需要的
功能。
在创建这个类之前,我们必须先了解WM_DRAWITEM消息。当按钮
、组合框、列表框或菜单的某一视觉状况发生变化时,系统就会发送
一条WM_DRAWITEM消息给这些控制的拥有者窗口。这个消息的wParam
指出这个控制的 id 号,而IParam则是一个指向DRAWITEMSTRUCT结构
的指针,该结构存放有关要绘制的项的信息以及绘制所需的类型。DR
AWITEMSTRUCT结构具有如下格式。
typedef struct tagDRAWITEMSTRUCT{
UINT CtlType; // 控制类型
UINT CtlID;// 控制的ID号
UNIT itemID;//菜单项的索引
UINT itemAction;// 说明需要的绘图操作
UINT itemState; // 指明绘图后的可见状态
HWND hwndItem; // 控制的窗口句柄
HDC hDC; // 相关的设备环境
RECT rcItem;//被画控制的边框
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
自绘进度条需要具备以下几个步骤: 1. 创建一个 UIView,作为进度条的背景。可以通过代码或者Storyboard创建一个具有一定宽度和高度的视图,并设置其背景颜色为进度条的底色。 2. 在该视图上添加另一个 UIView,作为进度条的填充。设置其初始宽度为0,并设置其背景颜色为进度条的填充色。 3. 在需要更新进度的地方,计算出当前进度的百分比,并根据百分比计算出填充视图的新宽度。 4. 使用 UIView 的动画功能,将填充视图的宽度从当前宽度变化为新宽度,以呈现进度条的动画效果。可以使用 UIView 的 animateWithDuration:animations: 方法来实现,设置动画时间和新宽度即可。 以下是一个示例代码: ```swift // 在需要使用进度条的地方,定义进度条的属性 let progressBarWidth: CGFloat = 200 let progressBarHeight: CGFloat = 20 let progressBarColor = UIColor.blue // 创建进度条背景视图 let backgroundView = UIView(frame: CGRect(x: 0, y: 0, width: progressBarWidth, height: progressBarHeight)) backgroundView.backgroundColor = UIColor.lightGray // 创建进度条填充视图 let fillView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: progressBarHeight)) fillView.backgroundColor = progressBarColor // 将填充视图添加到背景视图上 backgroundView.addSubview(fillView) // 将背景视图添加到父视图上 self.view.addSubview(backgroundView) // 假设当前进度为50% let progress: CGFloat = 0.5 // 计算新的填充视图宽度 let newFillWidth = progressBarWidth * progress // 使用动画效果将填充视图宽度变为新宽度 UIView.animate(withDuration: 0.5) { fillView.frame.size.width = newFillWidth } ``` 以上就是使用 UIView 自绘进度条的基本步骤,根据实际需求可以进行扩展和定制化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值