接着昨天晚上的東西做。我們做了如何添加一個背景到對話框上,再來看一下這個效果,昨天晚上因爲網不好,而已又着急。所以今天晚上來我換一張大的圖片,來看一下效果。
因爲我的這個圖片是800*600的在窗口初始化的時候,我要設置下窗口的大小。
看到效果了吧,很好是不 是,比你們用gdi+jpg,是不是容易的很呀!
現在我們來往按鈕上貼張圖,看一下效果,因爲是png圖。你需要用你的ps來處理一下你的圖片。保存成png格式的。
下來我們需要重寫一下CButton類。來跟我一步一步的做吧
。
好了之後,我們需要開始寫這個類,
第一步先導入cximage這個類的頭文件
include "ximage.h"
public:
CxImage * m_setpng;
寫好之後。我們需要添加這個個函數。
下來,我們寫PreSubclassWindow
void CMybutton::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
ModifyStyle(0,BS_OWNERDRAW|BS_PUSHBUTTON);
CButton::PreSubclassWindow();
}
這個寫好了之後。我們來寫drawitem()
void CMybutton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CRect rc=lpDrawItemStruct->rcItem;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.SetBkMode(TRANSPARENT);
if(m_setpng!=NULL)
{
CDC*pRealDC=CDC::FromHandle(lpDrawItemStruct->hDC);
m_setpng->Draw(pRealDC->GetSafeHdc());
}else
{
CButton::DrawItem(lpDrawItemStruct);
}
dc.DeleteDC();
}
在寫這個OnEraseBkgnd函數。
BOOL CMybutton::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//return CButton::OnEraseBkgnd(pDC);
return true;
}
還得添加一個方法來。來給按鈕賦值。
void CMybutton::SetImage(CxImage *image)
{
m_setpng=image;
}
這些都寫好之後。
在你的cxxxdlg裏找到OnInitDialog()這個函數裏寫這幾句話就行了。
BOOL CCximageDlg::OnInitDialog()
{
m_button1=new CMybutton ();
CxImage *pImage=new CxImage();
pImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG4),_T("PNG")), CXIMAGE_FORMAT_PNG);
m_button1->SetImage(pImage);
m_button1->Create("",WS_VISIBLE|WS_CHILD,CRect(43,320,153,457),this,0);
}
效果看到下圖。
好了大功告成。