19,468
社区成员
发帖
与我相关
我的任务
分享
CFileDialog openfile(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,L"bmp,jpg|*.bmp;*.jpg| All Support File|*.bmp;*.jpg;*.png|");
if(openfile.DoModal()==IDOK)
{
strpath=openfile.GetPathName();
Bitmap *image=Bitmap::FromFile(strpath);
Bitmap bmp(image->GetWidth(),image->GetHeight());
membmp=new Bitmap(image->GetWidth(),image->GetHeight());
memgraph=Graphics::FromImage(membmp);
TextureBrush brush(image);
memgraph->FillRectangle(&brush,0,0,image->GetWidth(),image->GetHeight());
}
if(!strpath.IsEmpty())
{
CDC *pDC=GetDC();
Graphics graph(pDC->GetSafeHdc());
CRect winrect;
GetClientRect(winrect);
graph.DrawImage(membmp,0,0,winrect.Width(),winrect.Height());
ReleaseDC(pDC);
}
void CXXXXXDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CDC memDC; // 缓存DC
CDC selDC; // 选入图片的DC
HBITMAP hBmp;
HBITMAP hOldBMP;
memDC.CreateCompatibleDC(&dc);
selDC.CreateCompatibleDC(&dc);
hBmpMem = CreateCompatibleBitmap(dc.m_hDC, m_nCx, m_nCy);
// 画背景到缓存DC
memDC.FillSolidRect(0, 0, m_nCx, m_nCy, RGB(0, 0, 0));
// 画图片到缓存DC
hBmpMem = LoadBitmap(NULL, MAKEINTRESOURCE(ID_BMP1));
hOldBMP = memDC.SelectObject(hBmpMem);
memDC.BitBlt(0, 0, m_nCx, m_nCy, &selDC, 0, 0, SRCCOPY);
// 从缓存画到窗口DC
dc.BitBlt(0, 0, m_nCx, m_nCy, &memDC, 0, 0, SRCCOPY);
// 清除GDI对象
}
ON_WM_ERASEBKGND()
BOOL CXXXXXDlg::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CRightView::OnDraw(CDC *pDC)
{
GetClientRect(&m_rectClient);
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(pDC,m_rectClient.Width(),m_rectClient.Height());
CBitmap* pOldBitmap;
pOldBitmap = dc.SelectObject(&bitmap);
//CBrush br(RGB(255,255,255));
//dc.FillRect(m_rectClient, &br);
CBrush br(OUTRGB);
CBrush* pOldBrush = dc.SelectObject(&br);
dc.Rectangle(0,0,m_rectClient.Width(),m_rectClient.Height());
dc.SetBkMode(TRANSPARENT);
//
// sort of plane model
//
for(int i = 0; i < GetDocument()->m_arrayPlane.GetSize(); i++)
{
int yPos = i*PLANESPACE+10 - GetDocument()->m_nRScrollPos;
if(GetDocument()->IsBoundary(i))
{
dc.MoveTo(m_rectClient.left,yPos+22);
dc.LineTo(m_rectClient.right,yPos+22);
}
CString strNO = GetDocument()->m_arrayPlane[i].m_strPlaneNO;
dc.TextOut(5,yPos,strNO.Right(2));
}
pDC->BitBlt(m_rectClient.left,
m_rectClient.top,
m_rectClient.Width(),
m_rectClient.Height(),
&dc,
0,
0,
SRCCOPY);
dc.SelectObject(pOldBitmap);
}