扑克控件制作实例

前言

本文以扑克控件的制作过程为实例,介绍了MFC ActiveX控件的详细制作过程,希望对学习控件编写的朋友有所帮助。

一、扑克控件的制作

1、新建一个“MFC ActiveX ControlWizard”工程。为工程名起名为Cards,然后用向导的默认值一路OK生成工程。

2、为工程中添加五十四张扑克牌位图以及扑克背景位图资源。注意位图中有一张IDB_CARDS位图为控件显示时的图标,可以自行修改成自己喜欢的图样。

3、为控件填加属性值,打开View—>ClassWizard。点击Automation标签。从类名下拉框中选择CCardsCtrl,点击“Add Property”按钮弹出属性添加对话框。在External name中输入value,Type选择为short类型。同时在Implementation一项中选择Get/Set methods,还有两项不管它,就用它自己设置的函数就行了。现在我们已经为控件添加好了一个属性,它是用来处理扑克牌的点数的。

4、按照第三步的方法,我们再依次设置几个属性,分别是backbmp,类型为short,用来处理背景图案是什么;background,类型为BOOL,用来处理显示牌正面还是反面。

5、属性添加好了,下面为这些属性设置初始值:打开CardsCtl.cpp文件,在构造函数CCardsCtrl::CCardsCtrl()中加入代码:value=1;backbmp=1;

6、为了使控件能够在程序中正常显示出来,我们还需要对CCardsCtrl::OnDraw进行修改。修改后的内容如下:

void CCardsCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
  CBitmap *pOldBitmap;
  CBitmap bitmap;
  CRect rect;
  GetClientRect(rect);
  CDC ppdc;
  CClientDC dc(this);
  ppdc.CreateCompatibleDC(&dc);
  if(background)//背景图案
  {
    if(backbmp==1)bitmap.LoadBitmap(255);
    if(backbmp==2)bitmap.LoadBitmap(256);
  }
  else//前景图案
    bitmap.LoadBitmap(IDB_BITMAP1+value-1);
  pOldBitmap=ppdc.SelectObject(&bitmap);
  dc.BitBlt(0,0,rect.Width(),rect.Height(),&ppdc,0,0,SRCCOPY);
  ppdc.SelectObject(pOldBitmap);
}

在上面的代码中,要注意的是bitmap.LoadBitmap(IDB_BITMAP1+value-1);语句,一定要保证你在资源中插入的位图资源连续。可以打开Resource.h文件看一看,你的位图资源是否是连续的。

时间: 2024-12-30 22:02:31

扑克控件制作实例的相关文章

Silverlight实用窍门系列:39.Silverlight中使用Frame和Page控件制作导航【附带实例源码】

在Silverlight中有时需要进入不同的XAML页面,但是一般情况下是不能实现"前进"和"后退"的,在这里我们可以使用Frame+Page控件制作导航功能实现上一页和下一页的跳转功能. 在本文中我们制作一个实例如下:添加一个Frame控件,然后点击"加载UC"和"加载PageShow"按钮加载UC.xaml和PageShow.xaml页面.在加载后我们可以通过鼠标右键菜单中的"上一页"和"下一

IOS UI学习教程之使用UIImageView控件制作动画_IOS

本文实例为大家分享了IOS使用UIImageView控件制作动画的方法,供大家参考,具体内容如下 先添加40张tomcat的图片到资源列表中:名称为cat_eat0000.jpg到cat_eat0039.jpg. 1.定义所需控件 // 定义按钮,图片控件.可变数组对象 UIButton *actionbuttom; UIImageView *imageMove; NSMutableArray *imgsarray; 2.初始化各控件 // image动画 // 初始化UIImageView,大

标准MFC WinSock ActiveX控件开发实例(II)高级篇

回顾:在上一篇文章<标准MFC WinSock ActiveX控件开发实例>中我们详细介绍了控件的开发过程,以及接口和事件的 添加和响应方法.现在我们将继续上次没有写完的控件继续进行开发,并完善作为一个WinSock控件应该具备的功能. 二.按照前一篇文章提到的知识,现在我们来添加两个新的接口分别是SendData()和GetData(),它们看起来如下: //网络数据发送,在指定的超时时间内进行发送然后返回,成功返回实际发送字节数,否则返回负数 long CMFCWinSockCtrl::S

BCB控件制作和消息处理

1 前言 作为和delphi类似的rad(rapid application development)工具,c++ builder的强大功能不仅体现在数据库开发方面,也凸现于应用程序开发上(令人称绝的是这两方面结合得非常好).仅就应用程序而言,要真正体现c++ builder的优势,开发出高质量的软件,则在拖拉拽放之外,尚需用到一些进阶技术.如消息处理.dll.ole.线程.sdk编程.c++ builder在这些方面都或多或少有独到的优势.此外,可以方便地制作自定义控件,也是c++ build

wpf日历控件制作过程分析(2) 自定义样式属性

接上篇wpf日历控件制作过程分析(1) 定义header 在header中,我们看到了定义一个自定义样式TitleStyle 1.自定义样式 看后台代码定义 Code /**//// <summary> /// The DependencyProperty for the TitleStyle property. /// Flags: none /// Default Value: null /// </summary> public static readonly Depende

C/S模式开发中如何利用WebBrowser控件制作导航窗体

原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见进销存系统的同学肯定知道,在进入系统之后一般在mdi窗体中系统自动打开一个导航子窗体.将一些常见的功能以非常直观的图形展示给用户.观察市面上的此类产品,该功能基本是所有mdi窗体开发的管理系统中必备的功能窗体.下面我们就来分析一下如何在.net中实现这个功能.幸好我上次做了一个类似的系统,里面也用到

qt中如何根据类名动态创建qt默认的控件类实例

问题描述 qt中如何根据类名动态创建qt默认的控件类实例 7C 需要根据从外部读取类名来创建类的实例,类大多为qt自带的控件类,如QWidgetQLineEdit等.有没有不用继承这些类就可以动态创建的方法? 解决方案 int id = QMetaType::type(""MyClass"");if (id != 0) {void *myClassPtr = QMetaType::construct(id);...QMetaType::destroy(id myCl

vc++6 0-用vc++6.0 利用windows media player控件制作播放器时

问题描述 用vc++6.0 利用windows media player控件制作播放器时 在win7 64位环境下 要对 播放器进行暂停 快进等操作时 调用 CWMPcontrols 函数时 显示 'CWMPcontrols.h': No such file or directory 头文件 也加了 cwmpcontrols.h 头文件换成小写也是不行的 也说不能打开 没有这个文件 cwmpcontrols.h 头文件是存在的在工程目录下: 解决方案 你的VC++版本太旧,没有这个头文件.建议你

jquery checkbox和radio控件美化实例

由于checkbox与radio的特性,一般利用css教程是无法定义他的样式的,现在我们来讲一款jquery checkbox和radio控件美化实例哦,先到jquery.com下载jquery插件. $(function(){ $('#chklist').hcheckbox(); $('#radiolist').hradio(); $('#btnok').click(function(){ var checkedvalues = new array(); $('#chklist :checkb