50分求按钮位图变化的代码 按钮两幅位图当响应按键的时候显示另一个位图,表明按下没有鼠标,响应按键哪位有相关代码贴出来参考下 多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 主要是使用函数TrackMouseEvent,可看此贴,有代码示例。也可看看CButtonST,下载区有。http://blog.csdn.net/hityct1/archive/2009/02/03/3859286.aspx 给你一个类吧,用法如下:在对话框上添加一个标签控件,并映射一个CHtmStatic的变量。并调用SetBitmap函数设置两张图片,一个是没有鼠标在上面的,另一个鼠标移过时的图片。头文件:#pragma once// CHtmStatic#define WM_INFOCHANGE WM_USER+2000class 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());} PictureButton可以显示四种状态,实现也简单,网上有代码,就不给你找了 http://www.vckbase.com/document/viewdoc/?id=1834楼主可以搜一下自绘按钮 用CButtonSt类吧,实际上这种按钮是check box。 在工程中加入文件,在主对话框类的头文件中包含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); win32创建对话框求助 关闭连接的受信端 菜鸟问题:如何自动生成这两个消息的响应 VC++6.0 编译器的编码不兼容问题 请问如果用CHttpConnection向一个网页使用POST方式发送数据?? 奇怪的问题,CArray竟然没有RemoveAt,InsertAt方法。晕死了 请问关于在VC中操作EXCEL的基本问题,谢谢 请问各位大侠MFC中类模板包含文件的头文件是什么? 请问我做了一个Dialog程序,如何在代码中修改它是否为模态或非模态对话框呢。 一个也许挺简单的问题。另外《深入浅出MFC》第二版在北京哪儿有卖? 字符串截取问题 急! 为什么我的控件不能使用呢?
http://blog.csdn.net/hityct1/archive/2009/02/03/3859286.aspx
头文件:#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());
}
把按钮关联到一个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);