使用GDI+创建支持更多图片格式的按钮
2009-03-13 10:26
507 查看
派生一个 CButtonEx类
重载 OnCreate 利用GDI+贴图到 按钮上
int CButtonEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CButton::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 0;
}
为了好一点的效果处理 MouseMove 和MouseLeave
void CButtonEx::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON2.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
TRACKMOUSEEVENT event ;
event.cbSize = sizeof( event );
event.dwFlags = TME_LEAVE ;
event.dwHoverTime = 0 ;
event.hwndTrack = GetSafeHwnd() ;
VERIFY (_TrackMouseEvent( &event )) ;
CButton::OnMouseMove(nFlags, point);
}
int CButtonEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CButton::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 0;
}
LRESULT CButtonEx::OnMouseLeave( WPARAM wParam , LPARAM lParam )
{
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 1;
}
其中MouseLeave函数要手动添加消息响应
afx_msg LRESULT OnMouseLeave( WPARAM wParam , LPARAM lParam ) ;
ON_MESSAGE( WM_MOUSELEAVE , OnMouseLeave )
如果是用VC直接添加的按钮要设置为 所有者绘制 样式
动态创建要加上 BS_OWNERDRAW 类型
重载DrawItem函数
void CButtonEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
USES_CONVERSION; // 很复杂的定义 头文件添加了#include "atlbase.h"
wchar_t* TempBoardPath=A2W(m_ResoucePath);//CString 转 wchar_t
if(m_ResoucePath.IsEmpty())
{
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON 水晶1.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
}
else
{
Image image(TempBoardPath);
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
}
}
再添加一个函数用来接收外部传来的资源
void CButtonEx::SetResoucePath(CString path)
{
m_ResoucePath=path;
}
在Dlg类初始化部分
用
m_btnex.SetResoucePath("E:\\图片相关\\我的作品\\Recycle_bin_blue2.ico");
m_btnex2.SetResoucePath("E:\\图片相关\\我的作品\\Recycle_bin_full.ico");
m_btnex.Create(" ",BS_OWNERDRAW|WS_VISIBLE | WS_CHILD, CRect(0,0,50,50),this,11111);
m_btnex2.Create(" ",BS_OWNERDRAW|WS_VISIBLE | WS_CHILD, CRect(0,50,50,100),this,11112);
OK 快点Create一个试试看~~
左上角那个是在初始化中动态创建的
中间的是用VC添加的控件
效果图1
![](http://album.hi.csdn.net/app_uploads/FireBirdCN/20081011/124121855.p.JPG?d=20081011124345506)
鼠标悬停后 也就是切换一张图片显示
重载 OnCreate 利用GDI+贴图到 按钮上
int CButtonEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CButton::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 0;
}
为了好一点的效果处理 MouseMove 和MouseLeave
void CButtonEx::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON2.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
TRACKMOUSEEVENT event ;
event.cbSize = sizeof( event );
event.dwFlags = TME_LEAVE ;
event.dwHoverTime = 0 ;
event.hwndTrack = GetSafeHwnd() ;
VERIFY (_TrackMouseEvent( &event )) ;
CButton::OnMouseMove(nFlags, point);
}
int CButtonEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CButton::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 0;
}
LRESULT CButtonEx::OnMouseLeave( WPARAM wParam , LPARAM lParam )
{
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
return 1;
}
其中MouseLeave函数要手动添加消息响应
afx_msg LRESULT OnMouseLeave( WPARAM wParam , LPARAM lParam ) ;
ON_MESSAGE( WM_MOUSELEAVE , OnMouseLeave )
如果是用VC直接添加的按钮要设置为 所有者绘制 样式
动态创建要加上 BS_OWNERDRAW 类型
重载DrawItem函数
void CButtonEx::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CRect rc;
GetClientRect(&rc);
CDC dc;
using namespace Gdiplus;//应用 GDI+前必须的设置
Graphics graph(GetDC()->m_hDC);
USES_CONVERSION; // 很复杂的定义 头文件添加了#include "atlbase.h"
wchar_t* TempBoardPath=A2W(m_ResoucePath);//CString 转 wchar_t
if(m_ResoucePath.IsEmpty())
{
Image image(L"E:\\图片相关\\我的作品\\GDI+BUTTON 水晶1.png");
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
}
else
{
Image image(TempBoardPath);
graph.DrawImage(&image,0,0,rc.right-rc.left,rc.bottom-rc.top);
}
}
再添加一个函数用来接收外部传来的资源
void CButtonEx::SetResoucePath(CString path)
{
m_ResoucePath=path;
}
在Dlg类初始化部分
用
m_btnex.SetResoucePath("E:\\图片相关\\我的作品\\Recycle_bin_blue2.ico");
m_btnex2.SetResoucePath("E:\\图片相关\\我的作品\\Recycle_bin_full.ico");
m_btnex.Create(" ",BS_OWNERDRAW|WS_VISIBLE | WS_CHILD, CRect(0,0,50,50),this,11111);
m_btnex2.Create(" ",BS_OWNERDRAW|WS_VISIBLE | WS_CHILD, CRect(0,50,50,100),this,11112);
OK 快点Create一个试试看~~
左上角那个是在初始化中动态创建的
中间的是用VC添加的控件
效果图1
鼠标悬停后 也就是切换一张图片显示
相关文章推荐
- 使用GDI+创建支持更多图片格式的按钮
- 创建支持更多图片格式的按钮 使用VC6和GDI+
- SDL Game Development-第2章-4.使用SDL_image库操作更多格式的图片
- VC中使用GDI+实现为按钮加载Png图片
- VC中使用GDI+实现为按钮加载Png图片
- GDI+ 旋转图片(jpg,bmg,GDI+支持的图像格式)
- VC中使用GDI+实现为按钮加载Png图片
- 使用GDI+转换图片格式
- C++中使用CAtlHttpClient显示网络图片的方法,支持png,bmp,gif图片格式
- MFC使用OpenCV在文档窗口中显示图像(支持多图片格式)
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- VC中使用GDI+实现为按钮加载Png图片
- 如何使用GDI+装载图片对象(支持png图片)
- VS2010 使用GDI+创建图片水印的MFC程序
- mac使用创建服务转换图片格式(所有图片转换为jpg)
- HTML5异步上传图片(支持预览和进度条),使用其他按钮触发file onclick事件,解决某些浏览器无法触发的问题
- GDI+ 支持的图片文件格式
- 使用GDI+ 将索引格式的图片导入内存
- vc6.0使用gdi+在内存中绘图并将其保存为bmp,jpg,gif,png等格式的图片
- C++中使用CAtlHttpClient显示网络图片的方法,支持png,bmp,gif图片格式