按钮两幅位图
当响应按键的时候显示另一个位图,表明按下没有鼠标,响应按键哪位有相关代码贴出来参考下 多谢

解决方案 »

  1.   

    主要是使用函数TrackMouseEvent,可看此贴,有代码示例。也可看看CButtonST,下载区有。
    http://blog.csdn.net/hityct1/archive/2009/02/03/3859286.aspx
      

  2.   

    给你一个类吧,用法如下:在对话框上添加一个标签控件,并映射一个CHtmStatic的变量。并调用SetBitmap函数设置两张图片,一个是没有鼠标在上面的,另一个鼠标移过时的图片。
    头文件:#pragma once
    // CHtmStatic
    #define WM_INFOCHANGE WM_USER+2000
    class CHtmStatic : public CStatic
    {
    DECLARE_DYNAMIC(CHtmStatic)
    protected:
    CBitmap *m_pGeneralBmp;
    CBitmap *m_pHotBmp;
    BOOL m_bChangeHot; //控制是否切换图片
    BOOL m_bSentMsg;
    public:
    void SetBmp(UINT nOrgID ,UINT nHotID );
    void SetBmp(CString strFileOrg,CString strHotFile);
    void SetHotChange(BOOL bHot){m_bChangeHot = bHot;}
    void SetMsg(BOOL bSend){m_bSentMsg = bSend;}
    BOOL IsHotChange(){return m_bChangeHot;}
    CHtmStatic(); virtual ~CHtmStatic();protected:
    DECLARE_MESSAGE_MAP()
    public:
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    };CPP文件// HtmStatic.cpp : 实现文件
    //#include "stdafx.h"
    #include "HtmStatic.h"
    #include ".\htmstatic.h"
    #include "..\resource.h"
    #include <atlimage.h>// CHtmStaticIMPLEMENT_DYNAMIC(CHtmStatic, CStatic)
    CHtmStatic::CHtmStatic()
    {
    m_pGeneralBmp = NULL;
    m_pHotBmp = NULL;
    m_bChangeHot = FALSE;
    m_bSentMsg = TRUE;}CHtmStatic::~CHtmStatic()
    {
    if(m_pGeneralBmp != NULL)
    delete m_pGeneralBmp;
    if(m_pHotBmp != NULL)
    delete m_pHotBmp;
    }
    BEGIN_MESSAGE_MAP(CHtmStatic, CStatic)
    ON_WM_MOUSEMOVE()
    END_MESSAGE_MAP()// CHtmStatic 消息处理程序
    void CHtmStatic::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CStatic::OnMouseMove(nFlags, point);
    HCURSOR hCurs = AfxGetApp()->LoadCursor(IDC_CURSOR_HAND);
    ::SetCursor(hCurs); if(m_bChangeHot)
    {
    ClientToScreen(&point);
    if(::WindowFromPoint(point) == this->GetSafeHwnd())
    {
    if(CStatic::GetBitmap() != (HBITMAP)m_pHotBmp->GetSafeHandle())
    {
    CStatic::SetBitmap((HBITMAP)m_pHotBmp->GetSafeHandle());
    if(m_bSentMsg)
    GetOwner()->SendMessage(WM_INFOCHANGE,(WPARAM)GetDlgCtrlID(),NULL);
    } if(GetCapture() != this)
    SetCapture();
    }
    else
    {
    if(CStatic::GetBitmap() != (HBITMAP)m_pGeneralBmp->GetSafeHandle())
    CStatic::SetBitmap((HBITMAP)m_pGeneralBmp->GetSafeHandle()); if(GetCapture() == this)
    {
    ReleaseCapture();
    if(m_bSentMsg)
    GetOwner()->SendMessage(WM_INFOCHANGE,(WPARAM)GetDlgCtrlID(),1);
    }
    } }}void CHtmStatic::SetBmp(UINT nOrgID ,UINT nHotID )
    {
    if(m_pGeneralBmp != NULL)
    delete m_pGeneralBmp;
    if(m_pHotBmp != NULL)
    delete m_pHotBmp;
    m_pGeneralBmp = new CBitmap;
    m_pHotBmp = new CBitmap ; if(!m_pGeneralBmp->LoadBitmap(nOrgID))
    {
    delete m_pGeneralBmp;
    m_pGeneralBmp = NULL;
    }
    if(!m_pHotBmp->LoadBitmap(nHotID))
    {
    delete m_pHotBmp;
    m_pHotBmp = NULL;
    }
    CStatic::SetBitmap((HBITMAP)m_pGeneralBmp->GetSafeHandle());
    }
    void CHtmStatic::SetBmp(CString strFileOrg,CString strHotFile)
    {
    if(m_pGeneralBmp != NULL)
    delete m_pGeneralBmp;
    if(m_pHotBmp != NULL)
    delete m_pHotBmp; m_pGeneralBmp = new CBitmap;
    m_pHotBmp = new CBitmap ; CImage Image;
    Image.Load(strFileOrg);
    m_pGeneralBmp->Attach((HBITMAP)Image);
    Image.Detach();
    Image.Load(strHotFile);
    m_pHotBmp->Attach((HBITMAP)Image);
    Image.Detach();
    CStatic::SetBitmap((HBITMAP)m_pGeneralBmp->GetSafeHandle());
    }
      

  3.   

    PictureButton可以显示四种状态,实现也简单,网上有代码,就不给你找了
      

  4.   

    http://www.vckbase.com/document/viewdoc/?id=1834楼主可以搜一下自绘按钮 
      

  5.   

    用CButtonSt类吧,实际上这种按钮是check box。
      

  6.   

    在工程中加入文件,在主对话框类的头文件中包含BtnSt.h.
    把按钮关联到一个CButtonST类型的变量,如m_bt;
    在InitDialog()函数中加入以下几句:
    m_bt1.SetIcon(IDI_OPEN, (int)BTNST_AUTO_GRAY); //设置按钮的图片为idi_open,
    m_bt1.SetTooltipText(_T("Open"));//设置冒泡提示的字符串.或:
    short shBtnColor = 30;
    m_bt1.SetIcon(IDI_ZIP2, IDI_ZIP1);//设置初如图标为IDI_ZIP1,当鼠标移上去时的图标为IDI_ZIP2.
    m_bt1.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, shBtnColor);//设置当鼠标移上去时颜色.如果是checkbox复选按钮:
    m_bt1.SetIcon(IDI_LEDON, IDI_LEDOFF);//两副图片的ID,注意m_bt1是checkbox复选按钮。
    m_bt1.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, shBtnColor);