zoukankan      html  css  js  c++  java
  • 自绘按钮的实现过程


    自绘按钮的实现过程

    • 申明自绘属性
    • 进行VM_MESUREITEM事件响应,说明按钮的尺寸
    • 进行VM_DRAWITEM消息的重新响应,说明如何绘制按钮

    首先在vc6中新建工程,选择MFC并且新建dialog工程

    输入工程名,然后将生成的按钮等删除,重新添加两个按钮。

    为按钮设置属性

    选择自绘,就是自己向上贴图

    在dlg类的对象上添加WM_DRAWITEM属性

    在生成的OnDrawItem方法中添加如下代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    //添加绘图函数
    void CMy40_mybuttonDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
    {
        // TODO: Add your message handler code here and/or call default
        CDC ButtonDC;
        CBitmap bitmapTrans;
        BITMAP bmp;
        CDC mem;
        CRect rc;
        //得到用于绘制按钮的DC
        ButtonDC.Attach(lpDrawItemStruct->hDC);
        //准备用于向按钮区域传输位图
        mem.CreateCompatibleDC(&ButtonDC);
        //获取按钮所占的矩形大小
        rc=lpDrawItemStruct->rcItem;
        //获取按钮目前所处的状态,根据不同的状态绘制不同的按钮
        UINT state = lpDrawItemStruct->itemState;
        //如果按钮已经得到焦点,绘制选中状态下的按钮
        if(state&ODS_FOCUS)
        {
            bitmapTrans.LoadBitmap(IDB_BITMAP1);
            bitmapTrans.GetBitmap(&bmp);
            CBitmap *old=mem.SelectObject(&bitmapTrans);
            //向按钮所在位置传输位图
            //使用StretcnBlt的目的是为了让位图随按钮的大小而改变
            ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
            mem.SelectObject(old);
            bitmapTrans.DeleteObject();
            //设置文字背景为透明
            ButtonDC.SetBkMode(TRANSPARENT);
            ButtonDC.DrawText("已选中",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
        }
        else
        {
            bitmapTrans.LoadBitmap(IDB_BITMAP2);
            CBitmap *old2 = mem.SelectObject(&bitmapTrans);
            bitmapTrans.GetBitmap(&bmp);
            CBitmap *old=mem.SelectObject(&bitmapTrans);
            ButtonDC.StretchBlt(rc.left,rc.top,rc.right,rc.bottom,&mem,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
            ButtonDC.SetBkMode(TRANSPARENT);
            ButtonDC.DrawText("未选中",&rc,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
            mem.SelectObject(old2);
            bitmapTrans.DeleteObject();
        }
      
        CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
    }

    编译运行,运行后得到效果如果所示

  • 相关阅读:
    C语言之逻辑运算符
    iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView
    Mac 环境下svn服务器的配置
    ld: warning: directory not found for option 去掉警告的方法
    Mac怎么设置wifi热点
    如何获取AppStore软件安装包的路径
    四种卸载Mac软件的方法
    UIAlertController
    uiview关联xib
    OC学习篇之---文件的操作
  • 原文地址:https://www.cnblogs.com/jinsedemaitian/p/5589169.html
Copyright © 2011-2022 走看看