📄 imageviewerdlg.cpp
字号:
if (m_hBitmap)
{
CDC m_MemDC;
m_MemDC.CreateCompatibleDC(&dc);
m_MemDC.SelectObject(m_hBitmap);
if (!m_bFullScreen)
{
buffDC.FillSolidRect(&m_DefaultRect,RGB(0,0,0));
}
else
{
buffDC.FillSolidRect(0,0,320,240,RGB(0,0,0));
}
buffDC.StretchBlt(m_DstStartX,m_DstStartY,m_DstWidth,m_DstHeight,&m_MemDC,m_SrcStartX,m_SrcStartY,m_SrcWidth,m_SrcHeight,SRCCOPY);
buffDC.SetBkMode(TRANSPARENT);
buffDC.SetTextColor(RGB(255,0,0));
buffDC.DrawText(GetFileName(m_SourceFile),CRect(86,213,237,231),DT_CENTER|DT_VCENTER);
m_MemDC.DeleteDC();
}
dc.BitBlt(0,0,320,240,&buffDC,0,0,SRCCOPY);
buffDC.DeleteDC(); //删除顺序切勿颠倒!!!
bgBmp.DeleteObject();
}
else
{
dc.BitBlt(0,0,320,240,&m_BgDC,0,0,SRCCOPY);
}
// Do not call CDialog::OnPaint() for painting messages
}
BOOL CImageViewerDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
}
void CImageViewerDlg::OnButtonAutoplay()
{
// TODO: Add your control notification handler code here
m_bAutoPlay = !m_bAutoPlay;
if (m_bAutoPlay)
{
m_butAutoPlay.LoadBitmaps(IDB_IMAGE_PLAYD,IDB_IMAGE_PLAYD,IDB_IMAGE_PLAYDIS);
}
else
{
m_butAutoPlay.LoadBitmaps(IDB_IMAGE_PLAY,IDB_IMAGE_PLAY,IDB_IMAGE_PLAYDIS);
}
m_butAutoPlay.Invalidate();
//
if (m_bAutoPlay)
{
SetTimer(1,m_DelayTime,NULL);
}
else
{
KillTimer(1);
}
}
void CImageViewerDlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
EndDialog(IDOK);
}
void CImageViewerDlg::OnButtonFullscreen()
{
// TODO: Add your control notification handler code here
if (!m_bFullScreen)
{
m_bFullScreen = TRUE;
ShowControl(FALSE);
m_Zoom = 0;
m_butZoomIn.EnableWindow(FALSE);
m_butZoomOut.EnableWindow(TRUE);
Invalidate();
}
}
void CImageViewerDlg::OnButtonBack()
{
// TODO: Add your control notification handler code here
if (g_Playlist.m_CurrentFile >0)
{
m_butNext.EnableWindow(TRUE);
if (g_Playlist.m_CurrentFile == 1)
{ m_butBack.EnableWindow(FALSE);
}
m_SourceFile = g_Playlist.GetNextWorkFileName(TRUE,FALSE);
LoadImage(m_SourceFile);
InvalidateRect(CRect(86,213,237,231));
}
}
void CImageViewerDlg::OnButtonNext()
{
// TODO: Add your control notification handler code here
if (g_Playlist.m_CurrentFile < g_Playlist.m_TotalFiles-1)
{
m_butBack.EnableWindow(TRUE);
if (g_Playlist.m_CurrentFile == g_Playlist.m_TotalFiles-2)
{ m_butNext.EnableWindow(FALSE);
}
m_SourceFile = g_Playlist.GetNextWorkFileName(FALSE,FALSE);
LoadImage(m_SourceFile);
InvalidateRect(CRect(86,213,237,231));
}
}
void CImageViewerDlg::OnButtonOpen()
{
// TODO: Add your control notification handler code here
COpenFileDlg fileDlg;
fileDlg.LoadBitmap(IDB_FILEVIEW_WND,IDB_ICON_IMAGEDIR,IDB_ICON_IMAGEDIRD,
IDB_ICON_IMAGE,IDB_ICON_IMAGED);
fileDlg.SetFileType( L".bmp.jpg.");
fileDlg.SetPosition(m_InitInf.FileviewPosition);
fileDlg.SetSourceFile(m_InitInf.SourceFile);
if (fileDlg.DoModal() == IDOK)
{
m_InitInf.FileviewPosition=fileDlg.GetPosition();
m_InitInf.SourceFile=fileDlg.GetSourceFile();
m_SourceFile = fileDlg.GetSourceFile();
g_Playlist.m_FileList.RemoveAll();
g_Playlist.m_TotalFiles = fileDlg.m_FileList.GetSize();
g_Playlist.m_CurrentFile = fileDlg.m_FileNO;
g_Playlist.m_FileList.Append(fileDlg.m_FileList);
g_Playlist.m_FilePath = m_SourceFile.Left(m_SourceFile.ReverseFind(L'\\')+1);
g_Playlist.InitSeed(g_Playlist.m_TotalFiles);
if (g_Playlist.m_TotalFiles > 1)
{
m_butNext.EnableWindow(TRUE);
m_butBack.EnableWindow(TRUE);
m_butAutoPlay.EnableWindow(TRUE);
m_FileNumber = g_Playlist.m_TotalFiles;
}
else
{
m_butNext.EnableWindow(FALSE);
m_butBack.EnableWindow(FALSE);
m_butAutoPlay.EnableWindow(FALSE);
m_FileNumber = 1;
}
//
if (!m_SourceFile.IsEmpty())
{
m_butFullScreen.EnableWindow(TRUE);
if (m_FileNumber > 1)
{
m_butBack.EnableWindow(TRUE);
m_butNext.EnableWindow(TRUE);
}
else
{
m_butBack.EnableWindow(FALSE);
m_butNext.EnableWindow(FALSE);
}
}
else
{
m_butAutoPlay.EnableWindow(FALSE);
m_butFullScreen.EnableWindow(FALSE);
m_butBack.EnableWindow(FALSE);
m_butNext.EnableWindow(FALSE);
}
LoadImage(m_SourceFile);
}
}
void CImageViewerDlg::OnButtonZoomin()
{
// TODO: Add your control notification handler code here
if (m_hBitmap)
{
m_butZoomOut.EnableWindow(TRUE);
if (m_Zoom > 0)
{
if (--m_Zoom==0)
{ m_butZoomIn.EnableWindow(FALSE);
}
InvalidateRect(m_DefaultRect);
}
}
}
void CImageViewerDlg::OnButtonZoomout()
{
// TODO: Add your control notification handler code here
if (m_hBitmap)
{
m_butZoomIn.EnableWindow(TRUE);
if (m_Zoom < MAX_ZOOM)
{
if (++m_Zoom==MAX_ZOOM)
{ m_butZoomOut.EnableWindow(FALSE);
}
InvalidateRect(m_DefaultRect);
}
}
}
bool CImageViewerDlg::LoadImage(CString strFileName)
{
m_Zoom=0;
m_butZoomIn.EnableWindow(FALSE);
m_butZoomOut.EnableWindow(FALSE);
CClientDC dc(this);
switch(GetImageType(strFileName))
{
case IMG_BMP:
// 装载Bitmap格式的图片
//m_hBitmap = SHLoadDIBitmap(strFileName);
if (m_hBitmap)
{
DeleteObject(m_hBitmap);
m_hBitmap = NULL;
m_DIBSection.DeleteObject();
}
m_DIBSection.Load(strFileName);
m_hBitmap = m_DIBSection.GetSafeHandle();
if (!m_hBitmap)
{
return FALSE;
}else
{
// 获取图片宽和高
m_ImageSize = CSize(m_DIBSection.GetWidth(),m_DIBSection.GetHeight());
}
break;
case IMG_JPG:
if (m_hBitmap)
{
DeleteObject(m_hBitmap);
m_hBitmap = NULL;
}
LoadImageJPG(strFileName);
if(!m_hBitmap)
{
return false;
}
break;
case IMG_UNKNOWN:
m_hBitmap = NULL;
//MessageBox(L"该图片格式暂不支持....");
return FALSE;
break;
}
if (m_bFullScreen)
{
Invalidate();
}
else
{
InvalidateRect(m_DefaultRect);
}
m_butZoomOut.EnableWindow(TRUE);
return true;
}
int CImageViewerDlg::GetImageType(CString strFileName)
{
// 判断文件是否是Bitmap位图
CFile file;
CFileException e;
// 打开文件
if (! file.Open(strFileName,CFile::modeRead,&e) )
{ return IMG_UNKNOWN;
}
// 读取文件前两个字节
BYTE bBuffer[2];
file.Read(bBuffer,2);
file.Close();
// 判断前两个字节是不是'BM'
if (bBuffer[0] == 0x42 && bBuffer[1] == 0x4D)
{
return IMG_BMP;
}
else
{
if (bBuffer[0] == 0xFF && bBuffer[1] == 0xD8)
{
return IMG_JPG;
}
}
return IMG_UNKNOWN;
}
//***********************************************
void CImageViewerDlg::ZoomImage(int iZoom)
{
CSize m_InitViewSize; //初始态窗口对应的源图像大小
CSize m_CurrentViewSize; //中间变量,用于计算Src & Dst
int m_ZoomQuotiety; // =2^m_zoom
float k; // 目标/源 比例系
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -