图片背景
如何他一个位图做为窗体的背景啊
好象是响应 WM ERASEBKGND
具体如何做
问题点数:100、回复次数:9Top
1 楼laiyiling(陌生人[MVP])回复于 2004-10-03 14:59:21 得分 25
看程序段:
BOOL C**View::OnEraseBkgnd(CDC* pDC)
{
// 设置所要求背景色的刷子
CBrush backBrush(RGB(255, 128, 128)); //把这里的颜色刷子换为你的位图刷子
// 保存旧刷子
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // 擦除所需的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}Top
2 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:02:00 得分 0
//把这里的颜色刷子换为你的位图刷子
CBrush brush;
CBitmap bmp;
bmp.LoadBitmap(ID_BITMAP);//ID_BITMAP是你的位图资源
brush.CreatePatternBrush(&bmp);
bmp.DeleteObject();Top
3 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:04:52 得分 0
哦,把你的CBrush定义为窗口的类成员变量,不要在函数体里定义Top
4 楼jdzwq(酷吏巡城Ⅱ)回复于 2004-10-03 15:10:48 得分 5
导入一个位图标识为IDB_BK
定义两个全局变量
HBITMAP bmp;
HBRUSH brush;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
HBRUSH org;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_ERASEBKGND:
//memdc = CreateCompatibleDC((HDC)wParam);
hdc = (HDC)wParam;
org = (HBRUSH)SelectObject(hdc,brush);
GetClientRect(hWnd,&rt);
PatBlt(hdc,rt.left,rt.top,rt.right - rt.left,rt.bottom - rt.top,PATCOPY);
SelectObject(hdc,org);
return 0;
case WM_CREATE:
bmp = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BK));
brush = CreatePatternBrush(bmp);
break;
case WM_DESTROY:
DeleteObject(brush);
DeleteObject(bmp);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}Top
5 楼kugou123(酷狗)(彪悍的人生,不需要解释 www.xiaozhou.net)回复于 2004-10-03 15:14:37 得分 10
在OnPaint里面也可以画。
可以参考:
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);//得到窗体的大小
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BITMAPBACKGROUND);//加载背景图片
BITMAP bitMap;
bmpBackground.GetBitmap(&bitMap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);//画窗体
文章名称:仿制金山毒霸专杀工具界面
文章地址:http://www.vckbase.com/document/viewdoc/?id=491Top
6 楼laiyiling(陌生人[MVP])回复于 2004-10-03 15:15:50 得分 0
参考这里的,很详细
http://community.csdn.net/Expert/topic/3151/3151136.xml?temp=.3077509Top
7 楼nwpulipeng(☆→【★海阔天空★】)回复于 2004-10-03 19:01:39 得分 0
帮顶混分Top
8 楼Chiyer(星羽)回复于 2004-10-04 14:15:57 得分 50
Dialog背景图象
在CODEGURU看到一个MDI CLIENT以位图为背景的例子,
受到启发,在DIALOG中相似地模仿了以下,效果很好。
主要要点是处理背景擦除消息时在DIALOG CLIENT区域画
位图,代码如下:
BOOL CBmpbgDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
GetClientRect(&rect);
BITMAP bm;
CDC dcMem;
m_pBmp->GetObject(sizeof(BITMAP),(LPVOID)&bm);
dcMem.CreateCompatibleDC(NULL);
CBitmap* pOldBitmap = dcMem.SelectObject(m_pBmp);
for (register int nX=0;nXBitBlt(nX,nY,bm.bmWidth,bm.bmHeight,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
return TRUE;Top
9 楼mynamelj(风动,帆动,仁者心动)回复于 2004-10-04 14:19:51 得分 10
//Erase dialog background and draw bitmap background
BOOL CWwwDlg::OnEraseBkgnd(CDC* pDC)
{
CDC MemDC;
CBitmap bitmap;
//From resources by load bitmap
if(!bitmap.LoadBitmap(IDB_BITMAP1))
return FALSE;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldbit = MemDC.SelectObject(&bitmap);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldbit);
return TRUE;
}
//ON_WM_ERASEBKGND这个消息涵数ClassWizard是不提供的要手工添加进去.
//函数原型:afx_msg BOOL OnEraseBkgnd(CDC* pDC);
Top




