簡單圖片檢視器小程式原始碼實現

總是加班的狗發表於2017-06-20

建立對話方塊工程,編輯對話方塊:


建立訊息響應,寫入程式碼:

void CInvalidateDlg::OnBnClickedButton2()////顯示 
{ 
// TODO: 在此新增控制元件通知處理程式程式碼 
nType=1; 
Invalidate(); 
} 
 
 
void CInvalidateDlg::OnBnClickedButton3()////縮小 
{ 
// TODO: 在此新增控制元件通知處理程式程式碼 
nType=2; 
Invalidate(); 
} 
 
 
void CInvalidateDlg::OnBnClickedButton4()///放大 
{ 
// TODO: 在此新增控制元件通知處理程式程式碼 
nType=3; 
Invalidate(); 
} 
 
 
void CInvalidateDlg::OnBnClickedButton1()////選擇按鈕 
{ 
// TODO: 在此新增控制元件通知處理程式程式碼 
CFileDialog fileDlg(TRUE); 
fileDlg.m_ofn.lpstrFilter = L"點陣圖檔案(*.bmp)\0*.bmp\0所有檔案(*.*)\0*.*\0\0"; 
if (fileDlg.DoModal() == IDOK) 
{ 
szfile=fileDlg.GetPathName(); 
m_PicPath.SetWindowTextW(szfile); 
if (m_pBmp != NULL) 
{ 
delete m_pBmp; 
//Invalidate(); 
m_pBmp = NULL; 
} 
m_pBmp = Bitmap::FromFile(szfile.AllocSysString()); 
Color bkClr(0, 0, 255); 
m_pBmp->GetHBITMAP(bkClr, &hBmp); 
nWidth=m_pBmp->GetWidth(); 
nHeight = m_pBmp->GetHeight(); 
szfile.ReleaseBuffer(); 
} 
} 
void CInvalidateDlg::OnPaint() 
{ 
if (IsIconic()) 
{ 
CPaintDC dc(this); // 用於繪製的裝置上下文 
 
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); 
 
// 使圖示在工作區矩形中居中 
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; 
 
// 繪製圖示 
dc.DrawIcon(x, y, m_hIcon); 
} 
else 
{ 
PAINTSTRUCT ps; 
CDC *pDC=BeginPaint(&ps); 
CDC memDC; 
if(nType==1) 
{ 
m_pBmp = Bitmap::FromFile(szfile.AllocSysString()); 
Color bkClr(0, 0, 255); 
//CDC *pDC=GetDC(); 
//CDC memDC; 
m_pBmp->GetHBITMAP(bkClr, &hBmp); 
memDC.CreateCompatibleDC(pDC); 
memDC.SelectObject(hBmp); 
pDC->BitBlt(100,100,nWidth,nHeight,&memDC,0,0,SRCCOPY); 
} 
if(nType==2) 
{ 
m_pBmp = Bitmap::FromFile(szfile.AllocSysString()); 
Color bkClr(0, 0, 255); 
//CDC *pDC=GetDC(); 
//CDC memDC; 
m_pBmp->GetHBITMAP(bkClr, &hBmp); 
memDC.CreateCompatibleDC(pDC); 
memDC.SelectObject(hBmp); 
pDC->StretchBlt(100,100,nWidth/2,nHeight/2,&memDC,0,0,nWidth,nHeight,SRCCOPY); 
} 
if(nType==3) 
{ 
m_pBmp = Bitmap::FromFile(szfile.AllocSysString()); 
Color bkClr(0, 0, 255); 
//CDC *pDC=GetDC(); 
//CDC memDC; 
m_pBmp->GetHBITMAP(bkClr, &hBmp); 
memDC.CreateCompatibleDC(pDC); 
memDC.SelectObject(hBmp); 
pDC->StretchBlt(100,100,nWidth+50,nHeight+50,&memDC,0,0,nWidth,nHeight,SRCCOPY); 
} 
EndPaint(&ps); 
CDialogEx::OnPaint(); 
} 
}
標頭檔案部分:
Bitmap *m_pBmp;//定義點陣圖物件,派生於Image類 
HBITMAP hBmp; 
INT nWidth; 
INT nHeight; 
INT nType; 
CString szfile;
注意哦!這是個GDI+專案,需要引入必要的GDI+程式碼。請到之前的文章找GDI+程式碼


相關文章