图片背景 如何他一个位图做为窗体的背景啊好象是响应 WM ERASEBKGND具体如何做 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看程序段: 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; } //把这里的颜色刷子换为你的位图刷子CBrush brush;CBitmap bmp;bmp.LoadBitmap(ID_BITMAP);//ID_BITMAP是你的位图资源brush.CreatePatternBrush(&bmp);bmp.DeleteObject(); 哦,把你的CBrush定义为窗口的类成员变量,不要在函数体里定义 导入一个位图标识为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;} 在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=491 参考这里的,很详细http://community.csdn.net/Expert/topic/3151/3151136.xml?temp=.3077509 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; //Erase dialog background and draw bitmap backgroundBOOL 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); mysql连接数的问题。 散分~寻找风铃~ CString连续赋值出错??帮看看!? 如何获取显示器当前的象素(即整个桌面的大小) 连接远程的数据库问题 请帮忙推荐一下有c++源代码下载的网站 第一次写ACTIVEX控件,大家帮帮忙,高分相送! vc里有没有类似vb中的 InputBox 之类的东东,就是一个最简单的弹出式接收数据窗口? 东方卫士的杀毒原理是什么? 基于OPENCV的车牌识别问题 怎样把下载的MSDN刻到多张光盘上 在classview里建了一个folder却不会用
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;
}
CBrush brush;
CBitmap bmp;
bmp.LoadBitmap(ID_BITMAP);//ID_BITMAP是你的位图资源
brush.CreatePatternBrush(&bmp);
bmp.DeleteObject();
定义两个全局变量
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;
}
可以参考:
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=491
http://community.csdn.net/Expert/topic/3151/3151136.xml?temp=.3077509
受到启发,在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;
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);