新闻:| 业内新闻 | 病毒公告 | 漏洞公告 | 站内新闻 | 网上商城
文章:| 菜鸟入门 | Q Q 安全 | 电脑知识 | 网络知识 | 个人安全 | 防骗专家 | 激励人生 | 建站技术
动画:| 每日动画 | Q Q 动画 | 安全动画 | 免费培训 | 攻防动画 | 破解动画 | 其他动画 | VIP 动画
软件:| 常用软件 | Q Q 软件 | 安全防护 | 综合利用 | 软件开发 | 破解软件 | 免费资源 | VIP 工具
专题:| 网赚专题 | Q Q 专题 | 提权专题 | 私服技术 | 远控专题 | 外挂专题 | 木马专题 | 其他专题

会员登入
技术论坛
投稿须知
技术培训
您现在的位置: 死神网络 >> 文章中心 >> 技能培训 >> 简单编程 >> 文章正文
【字体:             ★★★
 

VC按钮绘制互联型按钮
作者:佚名    文章来源:网络    点击数:    更新时间:2008-5-31
按钮互联型,一种简单处理图标按钮的方法,总结如下

    在工程中常常用到这样的按钮,即:第一次点击时按钮呈现一种状态,第二次点击时呈现另一种状态.
  
    有时候甚至要用到几个按钮之间关联着呈现这种状态。所以下面介绍一种相对简单的方法。

    功能:开始时按钮A无效,按钮B有效。点击B,A有效,B有状态1呈现状态2,此时点击A,A有状态1呈现状态2。如此反复。

    重点问题:

    1 按钮之所以呈现不同状态是由于付在按钮上的位图发生变化所致。
    2 位图之所以会变化是由于标志位发生变化所致,标志位是在按钮事件中被重新付值才会发生变化。
了解了这些就不难了。

    步骤:

1初始化变量,标志位
(dlg.h)
public:
    int     m_nSpeed;//步数标志位
    int  m_nPlayState;//按钮状态标志位
    void ChangeOldPlayBmp();//加载位图函数,可以把这两个写成一个函数,可为了以后扩展方便些了两个,想想看,不会总是只有两个按钮吧
    void ChangeNewPlayBmp();
    
    CButton *m_pBtnPlay;//按钮指针
    CButton *m_pBtnStop; //按钮指针,指针的好处在于可以用他指向很多不同的东西
    
    CBitmap m_BmpPlayb, m_BmpPlayr;    //一个按钮不同的两张状态图
    CBitmap m_BmpStopb,    m_BmpStopr;    //一个按钮不同的两张状态图

    BOOL IsPause;//判断按钮是否被点击,主要用来防止彼此互连时干扰,如果需要复杂的互连,如状态1必须和状态2同步,也可改这里。
加载需要的位图。
把按钮上的属性设为:Bitmap
2初始化
先定义一组结构,很直观的表现按钮状态,免了很多麻烦。在(.h主体框架类文件继承: public CWinApp的那个)
typedef enum _tagPlayState{
    PLAY_STOP = 0,
    PLAY_PLAY,
    PLAY_PAUSE,
    PLAY_REVERSE,
} EPlayState;

(dlg.cpp)
初始化Init方法中
    m_nSpeed            = 0;
    IsPause = false;
    m_nPlayState        = PLAY_STOP;
    m_BmpPlayb.LoadBitmap(IDB_BITMAP_Play);//加载位图
    m_BmpStopb.LoadBitmap(IDB_BITMAP2);
    m_BmpPlayr.LoadBitmap(IDB_BITMAP1);
    m_BmpStopr.LoadBitmap(IDB_BITMAP_Pause);
    
    m_pBtnPlay = (CButton*)GetDlgItem(IDC_BtnPlay);//获取按钮指针
    m_pBtnPlay->SetBitmap(m_BmpPlayb);//设置按钮上的图片
    m_pBtnStop = (CButton *)GetDlgItem(IDC_BtnPause);
    m_pBtnStop->SetBitmap(m_BmpStopr);

    m_pBtnPlay->EnableWindow(FALSE);//设置按钮无效
3编写事件和函数
(dlg.cpp)
void CBtnTextDlg::OnBtnPlay()
{
    if (IsPause) {//下面给出一个入口参数
        m_nPlayState = PLAY_PLAY;
        m_nSpeed = 0;
        IsPause = false;
    }
    if((m_nPlayState == PLAY_PLAY)&&(m_nSpeed==0)){
        
        m_nSpeed = 2;
        m_nPlayState = PLAY_PLAY;
        ChangeNewPlayBmp();
    }else if((m_nPlayState == PLAY_PLAY)&&(m_nSpeed==2)){
        m_nSpeed = 0;
        m_nPlayState = PLAY_PLAY;
        ChangeOldPlayBmp();
    }
}
void CBtnTextDlg::ChangeOldPlayBmp()
{
    if(m_nPlayState == PLAY_PLAY){        
        m_pBtnPlay->SetBitmap(m_BmpPlayb);
    }else if (m_nPlayState == PLAY_STOP) {
        m_pBtnStop->SetBitmap(m_BmpStopb);
    }
    //else if(m_nPlayState == PLAY_REVERSE){//逆再生        
    //    m_pBtnRev->SetBitmap(m_BmpRevb);
}
void CBtnTextDlg::ChangeNewPlayBmp()
{
    if(m_nPlayState == PLAY_PLAY){        
        m_pBtnPlay->SetBitmap(m_BmpPlayr);
    }else if (m_nPlayState == PLAY_STOP) {
        m_pBtnStop->SetBitmap(m_BmpStopr);
    }
}

void CBtnTextDlg::OnBtnPause()
{
    if (IsPause==false) {
        m_nPlayState = PLAY_STOP;
        m_nSpeed = 0;
        IsPause = true;
    }

    if((m_nPlayState == PLAY_STOP)&&(m_nSpeed==0)){
        m_pBtnPlay->EnableWindow(TRUE);
        m_nSpeed = 2;
        m_nPlayState = PLAY_STOP;
        ChangeOldPlayBmp();
    }else if ((m_nPlayState == PLAY_STOP)&&(m_nSpeed==2)) {
    //    ChangeOldPlayBmp();
        m_nSpeed = 0;
        m_nPlayState = PLAY_STOP;
        ChangeNewPlayBmp();    
    }
}
成果物:
1   2   3 点击按钮2
4 点击按钮1  5 再次点击1

文章录入:小辉    责任编辑:小辉  
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    推 荐 文 章
    更多内容
     
    网赚班火热招生
    全球黑客大赛周三开幕
    提示:小心黑客打着破解
    万元赏金 寻找动易Sit
    当姜太公成为黑客
    热 门 文 章  
    更多内容
     
     
    [业内新闻]新西兰18岁黑客认罪 
    [业内新闻]全球黑客大赛周三开幕
    [业内新闻]提示:小心黑客打着破解
    [业内新闻]万元赏金 寻找动易Sit
    [电脑知识]Windows2000/XP任务管
    相 关 文 章
    更多内容
     
    用命令实现简单的黑客
    系统对Image File Exe
    Icesword 是如何列出隐
    VC++多线远程IPC种植木
    vbs病毒制作之一——复
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |

    Copyright © 2007 - 2010 SKYHACK All rights reserved.
    本站中文版权所有 死神网络 保留所有权利 未经许可请勿任意转载或复制使用
    客服QQ: 147232323 客服电话:0319-2022934 投诉电话:0319-2029192
    冀ICP备08001034号