自绘按钮加载png的类

 
网上收集的三个自绘按钮控件加载png的类
1.路径获取
// CMFCApplication1Dlg 对话框
CString getModulePath( )
{
	CString strPath;
	TCHAR wszPathName[260] = { 0 };
	GetModuleFileName(0, wszPathName, 260);//获得完全路径+程序名
	strPath = wszPathName; //CString 转换
	int nPos = strPath.ReverseFind(L'\\');//返回此CString对象中与要求的字符匹配的最后一个字符的索引,从零开始
	CString strModulePath = strPath.Left(nPos);//从左边1开始获取前 nCount个字符,这里是没有零哦  	
	return  strPath.Left(nPos);
}


BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	 
	SetBackgroundColor(RGB(0,0,255));
	
	// TODO: 在此添加额外的初始化代码

	//1. lrButton类,加载路径方式,4个png合成一个大图,背景不透明问题未解决 
	 	 
	m_bt1.SetImage(getModulePath() + L"\\res\\sysbtn_close.png");

	 //2. UPNGButton类,加载路径方式,按钮不同模式之间会相互覆盖,由于透明,造成越来越模糊
	//解决办法BOOL CPngButton::OnEraseBkgnd(CDC* pDC)忘了添加GetClientRect(rc); 
	 	 
	 m_bt2.SetButtonImage(L"skin\\module_application.png", L"skin\\module_sms.png", L"skin\\connect_wifiicon.png", NULL);	
	 
	//3. PNGButtonCtrl类,加载资源方式,按钮不同模式之间会相互覆盖,由于透明,造成越来越模糊 
	 CRect rt;
	 GetClientRect(&rt);
	 m_bt4.Create(rt.right - 100, 50, this, 250, IDB_PNG3, IDB_PNG4, IDB_PNG1, IDB_PNG1);
	
	 

	 
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}




2.背景图
 
BOOL CMFCApplication1Dlg::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	 
	HDC hdc = pDC->GetSafeHdc();
	CRect rt;
	GetClientRect(&rt);
	HDC hMemdc = CreateCompatibleDC(hdc);
	 Image bk(getModulePath() + L"\\skin\\bg.png");

 	HBITMAP hMembmp = CreateCompatibleBitmap(hdc, rt.Width(), rt.Height());
 	HBITMAP hOldbmp = (HBITMAP)SelectObject(hMemdc, hMembmp);

	Graphics graphics(hMemdc);
	 
	graphics.DrawImage(&bk, 0, 0, rt.Width(), bk.GetHeight());	 	
	 BitBlt(hdc, 0, 0, rt.Width(), bk.GetHeight(), hMemdc, 0, 0, SRCCOPY);
	 
	graphics.ReleaseHDC(hMemdc);
	 SelectObject(hMemdc, hOldbmp);
	DeleteDC(hMemdc);
	 DeleteObject(hMembmp);

	 return TRUE;
//return CDialogEx::OnEraseBkgnd(pDC);
}

3.预览


4.下载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值