资源描述:
《evc中透明控件的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、2008年05月09日13:38:37EVC中透明控件的实现本文从创建一个工程开始详细说明如何用EVC实现WINCE应用程序下的透明控件(这里实现按钮和STATIC)。1. 新建一个MFC对话框工程取名TransButton2. 在ResourceView处插入一背景图片IDB_BITMAP13. 在对话框中拉4个控件:两个按钮,两个STATIC4. 增加TransButtonDlg.h文件中增加如下3个类成员HBRUSHGetBkBrush(HWNDhWnd,UINTnID,HBITMAPhBmBk);HBITMAPm_hBm
2、Bkgnd;//对话框背景图片HBRUSHm_hBrCtl[2];//控件背景画刷5. 在TransButtonDlg.cpp中增加GetBkBrush()的实现HBRUSHCTransButtonDlg::GetBkBrush(HWNDhWnd,UINTnID,HBITMAPhBmBk){#define_X(x)(x.left)#define_Y(x)(x.top)#define_W(x) (x.right-x.left)#define_H(x)(x.bottom-x.top)HWNDhWndCtrl;hWndCtrl=::Get
3、DlgItem(hWnd,nID);HBRUSHhBrushCtrl=NULL;if(NULL!=hWndCtrl){ RECTrcCtrl; ::GetWindowRect(hWndCtrl,&rcCtrl); ::ScreenToClient(hWnd,(LPPOINT)&rcCtrl); ::ScreenToClient(hWnd,((LPPOINT)&rcCtrl)+1); HDChDC=::GetDC(hWnd); HDChMemDCBk=CreateCompatibleDC(hDC); HDChMemDCCtr
4、l=CreateCompatibleDC(hDC); HBITMAPhBmCtrl=CreateCompatibleBitmap(hDC,_W(rcCtrl),_H(rcCtrl)); HBITMAPhBmOldBk; HBITMAPhBmOldCtrl; hBmOldBk=(HBITMAP)::SelectObject(hMemDCBk,hBmBk); hBmOldCtrl=(HBITMAP)::SelectObject(hMemDCCtrl,hBmCtrl); ::BitBlt(hMemDCCtrl,0,0,_W(rcC
5、trl),_H(rcCtrl),hMemDCBk,_X(rcCtrl),_Y(rcCtrl),SRCCOPY); ::SelectObject(hMemDCCtrl,hBmOldCtrl); ::SelectObject(hMemDCBk,hBmOldBk); hBrushCtrl=::CreatePatternBrush(hBmCtrl); DeleteObject(hBmCtrl); ::DeleteDC(hMemDCBk); ::DeleteDC(hMemDCCtrl); ::ReleaseDC(hWnd,hDC
6、);}returnhBrushCtrl;}6. 在OnInitDialog()中增加下面一段截取控件所在部分的图片:m_hBmBkgnd=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));if(m_hBmBkgnd){ m_hBrCtl[0]=GetBkBrush(GetSafeHwnd(),IDC_BUTTON_TEST1,m_hBmBkgnd); m_hBrCtl[1]=GetBkBrush(GetSafeHwnd(),IDC_STATIC_TE
7、ST1,m_hBmBkgnd);}7. 增加WM_PAINT的处理函数,并在函数中增加画背景的部分(OnPaint()函数):CDCmemDC;CBitmapbmBkgnd;bmBkgnd.Attach(m_hBmBkgnd);memDC.CreateCompatibleDC(&dc);CBitmap*pOldBm=memDC.SelectObject(&bmBkgnd);BITMAPbm;bmBkgnd.GetObject(sizeof(bm),&bm);dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,&m
8、emDC,0,0,SRCCOPY);memDC.SelectObject(pOldBm);bmBkgnd.Detach();8. 增加WM_CTLCOLOR的处理函数,并在其中增加画控件背景的部分:if(