zoukankan      html  css  js  c++  java
  • 自绘控件之按钮类

    准备制作自己的控件类,按钮是第一个,我会将我在其中遇到困难和大家分享一些,只要实现下面的功能,按钮类就可以满足大部分的需求

    按钮类功能:

    1、正常

    2、光标在按钮区域上

    3、按下

    4、当前按钮为活动按钮

    5、按钮不可用

    6、位图按钮上显示名称

    7、制作圆角矩形、圆形按钮

    其中前三个都很好实现,下面是响应函数;

    OnMouseLeave()//光标离开按钮区域

    OnMouseHover()//光标在按钮区域

    OnLButtonDown//按下

    OnLButtonUp//松开

    //以下4个问题都是在DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)中添加代码

    第四个问题的解决方式:

    函数:DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)
    lpdrawitemstruct->itemState();//itemState:指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值可以为下表中所示值的一个或者多个的联合。
    【ODS_FOCUS=H8:如果菜单项将被选中,则可设置该值。该值只对菜单项有用。】

    所以只要通过判断lpdrawitemstruct->itemState();是否等于ODS_FOCUS=H8:就可以设置按钮为当前活动按钮时的响应了。

    第五个问题

    函数:DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)
    lpdrawitemstruct->itemState();//itemState:指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值可以为下表中所示值的一个或者多个的联合。
    【ODS_DISABLED=H4:如果控件将被禁止,则设置该值。】

    所以只要通过判断lpdrawitemstruct->itemState();是否等于ODS_DISABLED=H4:就可以设置按钮为不可用按钮时的响应了。

    第六个问题:按钮上的名称怎么显示(我的按钮的几个状态都是位图切换)

    CString add;

    CDC ButtonDC;

    ButtonDC.Attach(lpdrawitemstruct->hDC);//获取DC

    ButtonDC.SetBkMode(TRANSPARENT);//字体背景透明

    GetWindowText(add);

    .DrawText(add,CRect(5,5,10,10),DT_CENTER | DT_VCENTER | DT_SINGLELINE);

    第七个问题:怎么制作圆形按钮或者是圆角按钮

    CRng rc;

    rc.CreateRoundRect(0,0,rect.Width(),rect.Heignt(),50,50);//获取一个圆角矩形区域

    ::GetWindowRgn(lpdrawitemstruct->hwndItem,rc);

    ButtonDC.SelectClipRng(&rc);

    SetWindowRgn(rc,true)//有效区域

    最后记得释放内存

    ButtonDC.DeleteDC();

    http://blog.csdn.net/bigtree_mfc/article/details/42269417

  • 相关阅读:
    linux拷贝软连接文件
    【知识点】Java常用类库
    Maven之pom.xml配置文件详解
    Java+Bigdata学习路线
    Hadoop界的Hello World!
    JavaEE三大框架的整合
    学完微型服务器(Tomcat)对其工作流程的理解,自己着手写个简单的tomcat
    【数据结构与算法】之链表
    JavaEE项目开发所需要的包(Struts2+Spring5+Hibernate5)
    在Linux(Centos7)系统上对进行Hadoop分布式配置以及运行Hadoop伪分布式实例
  • 原文地址:https://www.cnblogs.com/findumars/p/5801429.html
Copyright © 2011-2022 走看看