#include "ReadPIC.h"
#include "resource.h"
#include <afxdlgs.h>
// #define IDC_HSCROLLBAR 1024
// #define IDC_VSCROLLBAR 1025
CMyApp theApp;
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}
CMainWindow::CMainWindow()
{
//注册窗口类
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,::LoadCursor(NULL,IDC_ARROW),
(HBRUSH)(COLOR_3DFACE),::LoadIcon(theApp.m_hInstance,(LPCTSTR)IDI_ICON));
//修改类名
WNDCLASSA wndclass;
if (::GetClassInfo(AfxGetInstanceHandle(),lpszClassName,&wndclass))
{
wndclass.lpszClassName = "MyReadPIC";
lpszClassName = wndclass.lpszClassName;
}
//重新注册窗口类
AfxRegisterClass(&wndclass);
//创建窗口
CreateEx(0,lpszClassName,"图片浏览器",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL);
}
void CMainWindow::PostNcDestroy()
{ delete this; }
//消息映射表
BEGIN_MESSAGE_MAP(CMainWindow,CWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_DESTROY()
ON_COMMAND(ID_MENU_OPENFILE,OnOpenFile)
ON_COMMAND(ID_MENU_EXIT,OnExit)
ON_COMMAND(ID_MENU_TOPMOST,OnTopMost)
ON_COMMAND(ID_PREVIOUS,OnBtnPrevious)
ON_COMMAND(ID_NEXT,OnBtnNext)
ON_COMMAND(ID_ZOOM_IN,OnBtnZoomIn)
ON_COMMAND(ID_ZOOM_OUT,OnBtnZoomOut)
ON_COMMAND(ID_SHOW_FROM_WND,OnBtnShowFromWnd)
ON_COMMAND(ID_SHOW_ORIG,OnBtnShowOrig)
ON_WM_SIZE()
END_MESSAGE_MAP()
//窗口初始化
BOOL CMainWindow::OnCreate(LPCREATESTRUCT)
{
m_hMenu = ::LoadMenu(theApp.m_hInstance,(LPCTSTR)IDR_MENU);
::SetMenu(m_hWnd,m_hMenu);
m_bTopMost=FALSE;
m_pView = NULL;
m_bShowFromWnd = TRUE;
m_strCurrFileName.Empty();
m_ToolBar.CreateEx(this,TBSTYLE_FLAT|TBSTYLE_TRANSPARENT|TBSTYLE_LIST,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM/*| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC*/
); //创建工具栏
m_ToolBar.LoadToolBar(IDR_TOOLBAR1);//加载工具栏
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND,FALSE);
//控件条定位
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
//创建PICView
CCreateContext pContext;
CWnd* pFrameWnd = this;
pContext.m_pCurrentDoc = new CDocument;
pContext.m_pNewViewClass = RUNTIME_CLASS(CPICView);
m_pView =(CPICView *) ((CFrameWnd*)pFrameWnd)->CreateView(&pContext);
ASSERT(m_pView);
m_pView->m_nMapMode = MM_TEXT;
m_pView->ShowWindow(SW_NORMAL);
//调整m_pView大小
CRect rectWindow,rttb;
GetClientRect(rectWindow);
m_ToolBar.GetWindowRect(rttb);
rectWindow.bottom -= (rttb.bottom - rttb.top);
m_pView->MoveWindow(rectWindow);
delete pContext.m_pCurrentDoc;
//初始化完成
m_bInit = FALSE;
CenterWindow();
return TRUE;
}
void CMainWindow::OnDestroy()
{
CWnd::OnDestroy();
}
void CMainWindow::OnPaint()
{
if (m_bInit) return;
CRect rectWindow,rttb;
GetClientRect(rectWindow);
m_ToolBar.GetWindowRect(rttb);
rectWindow.bottom -= (rttb.bottom - rttb.top);
m_pView->MoveWindow(rectWindow);
CWnd::OnPaint();
}
void CMainWindow::OnExit()
{ ::PostMessage(m_hWnd,WM_CLOSE,0,0);/*exit(0);*/ }
void CMainWindow::OnTopMost()
{
if(m_bTopMost)
{
::CheckMenuItem(::GetMenu(m_hWnd),ID_MENU_TOPMOST,MF_UNCHECKED);
::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,
SWP_NOMOVE|SWP_NOREDRAW|SWP_NOSIZE);
m_bTopMost=FALSE;
}
else
{
::CheckMenuItem(m_hMenu,ID_MENU_TOPMOST,MF_CHECKED);
::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,
SWP_NOMOVE|SWP_NOREDRAW|SWP_NOSIZE);
m_bTopMost=TRUE;
}
}
void CMainWindow::OnOpenFile()
{
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"所有文件(*.*)|*.*|JPEG图片(*.jpg)|*.jpg|bmp位图(*.bmp)|*.bmp|");
if(dlg.DoModal()!=IDOK)
return;
m_pView->LoadPicture(dlg.GetFileName(),m_bShowFromWnd);
m_strCurrFileName = dlg.GetPathName();
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND,!m_bShowFromWnd);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG,m_bShowFromWnd);
char str[300];
sprintf(str,"%s 图片浏览器",dlg.GetPathName());
SetWindowText(str);
}
//大小改变,调整窗体大小
void CMainWindow::OnSize(UINT nType, int cx, int cy)
{
if (m_bInit) return;
CRect rectWindow,rttb;
GetClientRect(rectWindow);
m_ToolBar.GetWindowRect(rttb);
rectWindow.bottom -= (rttb.bottom - rttb.top);
m_pView->MoveWindow(rectWindow);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
CWnd::OnSize(nType, cx, cy);
}
//工具栏
//上一个
void CMainWindow::OnBtnPrevious()
{
ShowNextPicture(FALSE);
}
//下一个
void CMainWindow::OnBtnNext()
{
ShowNextPicture(TRUE);
}
//放大
void CMainWindow::OnBtnZoomIn()
{
if(m_pView->ChangPicSize(TRUE))
{
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND);
}
}
//缩小
void CMainWindow::OnBtnZoomOut()
{
if (m_pView->ChangPicSize(FALSE))
{
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND);
}
}
//根据窗口大小最佳显示
void CMainWindow::OnBtnShowFromWnd()
{
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND,FALSE);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG);
m_pView->SetShowMode(m_bShowFromWnd = TRUE);
}
//显示图片实际大小
void CMainWindow::OnBtnShowOrig()
{
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG,FALSE);
m_pView->SetShowMode(m_bShowFromWnd = FALSE);
}
//寻找下一个文件
//参数bNext指定是往上寻找还是往下寻找
CString CMainWindow::FindNextFile(BOOL bNext)
{
CFileFind ff;
CString strDir;
CString strFirstFile,strCurrFile,strPrevFile,strRetnFile;
BOOL bFind = FALSE;
strDir = m_strCurrFileName.Left(m_strCurrFileName.ReverseFind('\\')+1);
strDir += "*.*";
int n = 0;
BOOL bRet = ff.FindFile(strDir);
while(bRet)
{
bRet = ff.FindNextFile();
if (ff.IsDirectory() || ff.IsDots()) continue;//目录 跳过
strCurrFile = ff.GetFilePath(); //获取文件名
n++;
if (strFirstFile.IsEmpty()) strFirstFile = strCurrFile;
if (m_strCurrFileName == strCurrFile) //找到
{
bFind = TRUE; //标志 找到了
if (bNext) //参数 指示寻找下一个
{
if (!bRet) //如果当前文件是最后一个,则返回第一个文件
{//如果当前文件是最后一个,则返回第一个文件
strRetnFile = strFirstFile;
break;
}
}
else
{//寻找前一个
if (!strPrevFile.IsEmpty()) //当前文件不是第一个文件
{
strRetnFile = strPrevFile;
break;
}
}
continue;
}
if (bFind == TRUE && bNext) //已经找到了,而且是要求找出下一个文件,那么当前文件就是要找的
{
strRetnFile = strCurrFile;
break;
}
strPrevFile = strCurrFile;
}
//如果已经找到了,但是strRetnFile为空,则说明这属于两种情况
//1 要求找出前一个,但是当前文件是第一个,则要找的是文件夹中的最后一个文件
//2 要求找出后一个,但是当前文件是最后一个,则要找的是文件夹中的第一个文件
if (bFind == TRUE && strRetnFile.IsEmpty())
{
if (!bNext)
{//第一种情况
strRetnFile = strCurrFile;
}
else
{//第二种情况
strRetnFile = strFirstFile;
}
}
ff.Close();
return strRetnFile;
}
//显示下一张图片
void CMainWindow::ShowNextPicture(BOOL bNext)
{
CString strNextFile,strCurrFile;
strCurrFile = m_strCurrFileName;
if (strCurrFile.IsEmpty()) return;
do
{
strNextFile = FindNextFile(bNext);
m_strCurrFileName = strNextFile;
} while (!m_pView->LoadPicture(strNextFile,m_bShowFromWnd) && //成功显示
strCurrFile!=strNextFile && !strNextFile.IsEmpty());
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_FROM_WND,!m_bShowFromWnd);
m_ToolBar.GetToolBarCtrl().EnableButton(ID_SHOW_ORIG,m_bShowFromWnd);
char str[300];
sprintf(str,"%s 图片浏览器",strNextFile);
SetWindowText(str);
}
- 1
- 2
- 3
- 4
前往页