VC中用bmp位图做背景的问题。 如何将一张小的bmp位图平铺到整个逻辑窗口上。因为我的窗口会出现滚动条,在我拖动滚动条的时候,在超出物理窗口的逻辑区域,位图铺不上去。请告诉我如何在OnDraw()函数中将整个逻辑窗口铺上位图,使得在拖动滚动条的时候也能够出现我的bmp位图背景。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Bitblt可以把bmp画在窗口了,但是如果bmp比较小要想让它充满窗口就要用StretchBlt把bmp等比缩放咯!! 我在OnDraw()中的代码: CGraphDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, _T ("c:\\backgrnd.bmp"), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE); m_bitmaptest->Attach(hBitmap); if(hBitmap==NULL) MessageBox("error"); BITMAP bm1; m_bitmaptest->GetObject(sizeof(BITMAP),&bm1); CDC dcImage; if (!dcImage.CreateCompatibleDC(pDC)) return ; CBitmap* pOldBitmap = dcImage.SelectObject(m_bitmaptest); CRect rect_t1; GetClientRect(&rect_t1); for(int wide_x=0;wide_x<rect_t1.right;wide_x+=bm1.bmWidth) for(int wide_y=0;wide_y<rect_t1.bottom;wide_y+=bm1.bmHeight) { pDC->BitBlt( wide_x, wide_y, bm1.bmWidth, bm1.bmHeight, &dcImage, 0, 0, SRCCOPY ); } dcImage.SelectObject(pOldBitmap); DeleteObject(m_bitmaptest->Detach()); 先GetScrollPosition, 然后在ONDRAGDROP里调OnDraw就可以,用设备坐标画。 see the sample below :http://www.codeproject.com/bitmap/graphicsuite.asp 设lpszName 是你要加载的位图路径,pDC是显示DC则: const char* lpszName = "c:\\test.bmp"; HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, lpszName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); CBitmap bmp; bmp.Attach(hBitmap); BITMAP bm; bmp.GetBitmap(&bm); CDC memDC; memDC.CreateCompatibleDC(pDC); CBitmap *pOldBmp = memDC.SelectObject(&bmp); pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp);---------------------------------------void CTestListDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here HBITMAP hBitmap; hBitmap=(HBITMAP)LoadImage( ::AfxGetInstanceHandle(),"res\\background.bmp", IMAGE_BITMAP,0,0, LR_LOADFROMFILE|LR_CREATEDIBSECTION); ASSERT( hBitmap); HBITMAP hOldBitmap; CDC MemDC; CRect rect; CDC *pDC=this->GetDC(); MemDC.CreateCompatibleDC(pDC); GetClientRect(rect); hOldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap); pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(hOldBitmap); // Do not call CDialog::OnPaint() for painting messages} CBitmap bmp; CBrush brush; CRect rect; GetClientRect(&rect); bmp.LoadBitmap(IDR_MYBITMAP);//加载位图资源 brush.CreatePatternBrush(&bmp); pDC->FillRect(rect,&brush); 要辞职了~!心里滋味很复杂... VC dll 取时间的问题,大侠帮忙 关于delete释放内存的问题 DataGrid向绑定的数据库添加新记录的问题(另有00分在数据库分区) VC中如何调用MessageBox(....)? 这个最好用什么实现? 很菜的问题:vc中的combobox怎么加入item?(设置属性时) 我对Console的疑惑 如何使得MDI子窗口打开时保持最大化? 请介绍一个能学Socket 5 代理编程的网站。 有谁知道MPEG4-V2的"MP42"和"M4S2"两格流格式之间的区别? 各位大哥有问题请教
CGraphDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, _T ("c:\\backgrnd.bmp"), IMAGE_BITMAP,
0, 0, LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);
m_bitmaptest->Attach(hBitmap);
if(hBitmap==NULL)
MessageBox("error");
BITMAP bm1;
m_bitmaptest->GetObject(sizeof(BITMAP),&bm1);
CDC dcImage;
if (!dcImage.CreateCompatibleDC(pDC))
return ;
CBitmap* pOldBitmap = dcImage.SelectObject(m_bitmaptest);
CRect rect_t1;
GetClientRect(&rect_t1);
for(int wide_x=0;wide_x<rect_t1.right;wide_x+=bm1.bmWidth)
for(int wide_y=0;wide_y<rect_t1.bottom;wide_y+=bm1.bmHeight)
{
pDC->BitBlt( wide_x, wide_y, bm1.bmWidth, bm1.bmHeight, &dcImage, 0, 0, SRCCOPY );
}
dcImage.SelectObject(pOldBitmap);
DeleteObject(m_bitmaptest->Detach());
则:
const char* lpszName = "c:\\test.bmp";
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL,
lpszName,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);
CBitmap bmp;
bmp.Attach(hBitmap);
BITMAP bm;
bmp.GetBitmap(&bm);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp = memDC.SelectObject(&bmp);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp);
---------------------------------------
void CTestListDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
HBITMAP hBitmap; hBitmap=(HBITMAP)LoadImage(
::AfxGetInstanceHandle(),"res\\background.bmp",
IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
ASSERT( hBitmap);
HBITMAP hOldBitmap;
CDC MemDC;
CRect rect;
CDC *pDC=this->GetDC();
MemDC.CreateCompatibleDC(pDC);
GetClientRect(rect);
hOldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(hOldBitmap); // Do not call CDialog::OnPaint() for painting messages
}
CBrush brush;
CRect rect; GetClientRect(&rect);
bmp.LoadBitmap(IDR_MYBITMAP);//加载位图资源
brush.CreatePatternBrush(&bmp);
pDC->FillRect(rect,&brush);