欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

自绘按钮加载png的类

程序员文章站 2022-03-10 22:08:26
...
 
网上收集的三个自绘按钮控件加载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.预览
自绘按钮加载png的类

4.下载


相关标签: 自绘按钮