MFC学习笔记二

void CEx1013GetBmpInfoDlg::DrawDlg() { CDC *pDC = GetWindowDC(); int nTitleHeight = GetSystemMetrics(SM_CYCAPTION); CRect wndRC; GetWindowRect(wndRC); wndRC.OffsetRect(wndRC.Width(),wndRC.Height()); //1绘制对话框的左边框 int nBorder = GetSystemMetrics(SM_CXFIXEDFRAME); if (GetStyle() & WS_THICKFRAME) { nBorder+=GetSystemMetrics(SM_CXBORDER); } CBitmap bmp; bmp.LoadBitmap(IDB_BITMAP1); int nBmpWidth, nBmpHeight; GetBmpInfo(bmp,nBmpWidth,nBmpHeight); CDC memDC; memDC.CreateCompatibleDC(pDC); memDC.SelectObject(&bmp); pDC->StretchBlt(0,nTitleHeight,nBorder,wndRC.Height()-nTitleHeight,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); //2绘制对话框的左标题栏 bmp.LoadBitmap(IDB_BITMAP2); GetBmpInfo(bmp,nBmpWidth,nBmpHeight); int nLeftTitleCX = nBmpWidth; memDC.SelectObject(&bmp); pDC->StretchBlt(0,0,nBmpWidth,nTitleHeight+nBorder,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); //3绘制对话框的右标题栏 bmp.LoadBitmap(IDB_BITMAP3); GetBmpInfo(bmp,nBmpWidth,nBmpHeight); memDC.SelectObject(&bmp); pDC->StretchBlt(wndRC.Width()-nBmpWidth,0,nBmpWidth,nTitleHeight+nBorder,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); //4绘制对话框的中间标题栏 bmp.LoadBitmap(IDB_BITMAP4); int nRightTitleCX = nBmpWidth; GetBmpInfo(bmp,nBmpWidth,nBmpHeight); memDC.SelectObject(&bmp); int nMidWidth = wndRC.Width()-nRightTitleCX- nLeftTitleCX; pDC->StretchBlt(nLeftTitleCX,0,nMidWidth,nTitleHeight+nBorder,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); //5绘制对话框的右边框 bmp.LoadBitmap(IDB_BITMAP5); GetBmpInfo(bmp,nBmpWidth,nBmpHeight); memDC.SelectObject(&bmp); pDC->StretchBlt(wndRC.Width()-nBorder,nTitleHeight,nBorder,wndRC.Height()-nTitleHeight,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); //6绘制对话框的右边框 bmp.LoadBitmap(IDB_BITMAP6); GetBmpInfo(bmp,nBmpWidth,nBmpHeight); memDC.SelectObject(&bmp); pDC->StretchBlt(0,wndRC.Height()-nBorder,wndRC.Width(),nBorder,&memDC, 0,0,nBmpWidth,nBmpHeight,SRCCOPY); bmp.DeleteObject(); } 

 

void CEx1014OutBmpDataDlg::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 //OnOK(); CFileDialog flDlg(TRUE, "bmp", "", OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "位图文件|*.bmp||"); if (flDlg.DoModal()==IDOK) { CString szFile = flDlg.GetPathName(); m_FileName.SetWindowText(szFile); CFile file; file.Open(szFile,CFile::modeReadWrite); DWORD dwLen = file.GetLength(); file.Seek(14,CFile::begin); if (m_pBmpData!=NULL) { delete[]m_pBmpData; m_pBmpData = NULL; } m_pBmpData = new BYTE[dwLen-14]; file.Read(m_pBmpData,dwLen-14); file.Close(); OnPaint(); } } void CEx1014OutBmpDataDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { if (m_pBmpData!=NULL) { BYTE* pHeader = m_pBmpData; BITMAPINFO BitInfo; memset(&BitInfo,0,sizeof(BITMAPINFO)); memcpy(&BitInfo,pHeader,sizeof(BITMAPINFO)); int nWidth = BitInfo.bmiHeader.biWidth; int nHeight = BitInfo.bmiHeader.biHeight; pHeader +=40; StretchDIBits(GetDC()->m_hDC,10,50,nWidth,nHeight,0,0,nWidth,nHeight, pHeader,&BitInfo,DIB_RGB_COLORS,SRCCOPY); } CDialog::OnPaint(); } }  

你可能感兴趣的:(MFC学习笔记二)