📄 scanviewerview.cpp
字号:
while (res)
{
res=fImg.FindNextFile();
if (!strNextImgPath.IsEmpty()) break;
if (!fImg.IsDirectory()&&!fImg.IsDots())
{
//比较扩展名
if (((CScanViewerApp *)AfxGetApp())->IsPhotoFile(fImg.GetFileName()))
{
//AfxMessageBox(fImg.GetFilePath());
strNextImgPath=fImg.GetFilePath();
break;
}
//Sleep(10);
}
}
fImg.Close();//关闭
}
}
pClass.m_strNextImgPath=strNextImgPath;
//AfxMessageBox(pClass.m_strNextImgPath);
///////////////////////////////////////////////////////////////////在限定的目录查找(下一张)图片,如找到任一张都退出循环//////////////////////////////////////////////////////////////////////////
if (!pClass.m_strPhotoFileArray.IsEmpty())
pClass.PostMessage(WM_MYMSG_UPMYVIEW,0,0); //发送消息,标记线程完成图片的查找
if (!strPPArray.IsEmpty()) strPPArray.RemoveAll(); //释放资源
return 0;
}
//idcomcn2007
//10:05 2007-12-8
//下一幅图像
void CScanViewerView::OnNavPapednimg()
{
// TODO: 在此添加命令处理程序代码
if (m_strPhotoFileArray.IsEmpty()||imgShow.IsNull()) return;
int ia=0,iState=0;
for (ia=0;ia<m_strPhotoFileArray.GetCount();ia++) if (GetDocument()->GetPathName()==m_strPhotoFileArray.GetAt(ia)) iState=ia;
if (iState<m_strPhotoFileArray.GetCount()-1)
{
CString strSta;
strSta.Format("%s %d/%d",m_strPhotoFileArray.GetAt(iState+1),iState+2,m_strPhotoFileArray.GetCount());
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
//pStatusBar->SetWindowText(strSta); //在状态栏显示相应路径
pStatusBar->SetPaneText(1,strSta); //在状态栏显示相应路径
AfxGetApp()->OpenDocumentFile(m_strPhotoFileArray.GetAt(iState+1));
}
if ((iState==m_strPhotoFileArray.GetCount()-1)&&!m_strNextImgPath.IsEmpty())
{
//进入下一个目录,如果下一个目录为空则再下一个,直至为空
//AfxMessageBox(m_strNextImgPath);
AfxGetApp()->OpenDocumentFile(m_strNextImgPath);
}
}
//idcomcn2007
//10:05 2007-12-8
//上一幅图像
void CScanViewerView::OnNavPapeupimg()
{
// TODO: 在此添加命令处理程序代码
if (m_strPhotoFileArray.IsEmpty()||imgShow.IsNull()) return;
int ia=0,iState=0;
for (ia=0;ia<m_strPhotoFileArray.GetCount();ia++) if (GetDocument()->GetPathName()==m_strPhotoFileArray.GetAt(ia)) iState=ia;
if (iState>0)
{
CString strSta;
strSta.Format("%s %d/%d",m_strPhotoFileArray.GetAt(iState-1),iState,m_strPhotoFileArray.GetCount());
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
//pStatusBar->SetWindowText(strSta); //在状态栏显示相应路径
pStatusBar->SetPaneText(1,strSta); //在状态栏显示相应路径
AfxGetApp()->OpenDocumentFile(m_strPhotoFileArray.GetAt(iState-1));
}
if ((iState==0)&&!m_strUpwardsImgPath.IsEmpty())
{
//进入下一个目录,如果下一个目录为空则再下一个,直至为空
//AfxMessageBox(m_strNextImgPath);
AfxGetApp()->OpenDocumentFile(m_strUpwardsImgPath);
}
}
//idcomcn2007
//10:05 2007-12-8
//首图像
void CScanViewerView::OnNavHomeimg()
{
// TODO: 在此添加命令处理程序代码
if (m_strPhotoFileArray.IsEmpty()||imgShow.IsNull()) return;
CString strSta;
strSta.Format("%s %d/%d",m_strPhotoFileArray.GetAt(0),1,m_strPhotoFileArray.GetCount());
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
//pStatusBar->SetWindowText(strSta); //在状态栏显示相应路径
pStatusBar->SetPaneText(1,strSta); //在状态栏显示相应路径
AfxGetApp()->OpenDocumentFile(m_strPhotoFileArray.GetAt(0));
}
//idcomcn2007
//10:05 2007-12-8
//末图像
void CScanViewerView::OnNavEndimg()
{
// TODO: 在此添加命令处理程序代码
if (m_strPhotoFileArray.IsEmpty()||imgShow.IsNull()) return;
CString strSta;
strSta.Format("%s %d/%d",m_strPhotoFileArray.GetAt(m_strPhotoFileArray.GetCount()-1),m_strPhotoFileArray.GetCount(),m_strPhotoFileArray.GetCount());
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
//pStatusBar->SetWindowText(strSta); //在状态栏显示相应路径
pStatusBar->SetPaneText(1,strSta); //在状态栏显示相应路径
AfxGetApp()->OpenDocumentFile(m_strPhotoFileArray.GetAt(m_strPhotoFileArray.GetCount()-1));
}
//idcomcn2007
//17:54 2007-12-22
///////////////////////////////////////////////////////////////////更新视口大小菜单//////////////////////////////////////////////////////////////////////////
void CScanViewerView::OnUpdateFullsize(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enViewSize==FULL_SIZE);
}
void CScanViewerView::OnUpdateEqualsize(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enViewSize==EQUAL_SIZE);
}
void CScanViewerView::OnUpdateEqualwidth(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enViewSize==EQUAL_WIDTH);
}
void CScanViewerView::OnUpdateEqualheight(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enViewSize==EQUAL_HEIGHT);
}
///////////////////////////////////////////////////////////////////更新视口大小菜单//////////////////////////////////////////////////////////////////////////
//idcomcn2007
//17:54 2007-12-22
///////////////////////////////////////////////////////////////////更新显示模式//////////////////////////////////////////////////////////////////////////
void CScanViewerView::OnFullsize()
{
// TODO: 在此添加命令处理程序代码
m_enViewSize=FULL_SIZE;
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pStatusBar->SetPaneText(2,"实际大小(数字键/)"); //在状态栏显示相应路径
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnEqualsize()
{
// TODO: 在此添加命令处理程序代码
m_enViewSize=EQUAL_SIZE;
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pStatusBar->SetPaneText(2,"合适大小(数字键*)"); //在状态栏显示相应路径
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnEqualwidth()
{
// TODO: 在此添加命令处理程序代码
m_enViewSize=EQUAL_WIDTH;
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pStatusBar->SetPaneText(2,"合适宽度(Ctrl+→)"); //在状态栏显示相应路径
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnEqualheight()
{
// TODO: 在此添加命令处理程序代码
m_enViewSize=EQUAL_HEIGHT;
CStatusBar * pStatusBar;
pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
pStatusBar->SetPaneText(2,"合适高度(Ctrl+↓)"); //在状态栏显示相应路径
OnInitialUpdate(); //初始化窗口
}
///////////////////////////////////////////////////////////////////更新显示模式//////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////放大和缩小图片//////////////////////////////////////////////////////////////////////////
//idcomcn2007
//21:46 2007-12-25
//放大图片
void CScanViewerView::OnMagnify()
{
// TODO: 在此添加命令处理程序代码
if (!imgShow.IsNull())
{
double dw=0,dh=0,dZoom=1.1;
dw=imgShow.GetWidth()*dZoom;
dh=imgShow.GetHeight()*dZoom;
HBITMAP hBmp=imgShow.Detach();
if (!imgShow.IsNull()) imgShow.Destroy();
imgShow.Create((int)dw,(int)dh,32);
Bitmap* pImgTemp;
pImgTemp=Bitmap::FromHBITMAP(hBmp,NULL);
HDC hDCimg=imgShow.GetDC();
Graphics grpShow(hDCimg);
grpShow.DrawImage(pImgTemp, 0, 0,(INT)dw,(INT)dh);
grpShow.ReleaseHDC(hDCimg); //要记得relese,GDI都需要释放,否则资源会被占用而不接受其他操作
imgShow.ReleaseDC(); //ReleaseDC for each call to GetDC.
delete pImgTemp;
DeleteObject(hBmp);
// TODO: 计算此视图的合计大小
CSize sizeTotal;
sizeTotal.cx=imgShow.GetWidth()+BLANK_LEFT+BLANK_RIGHT;
sizeTotal.cy=imgShow.GetHeight()+BLANK_TOP+BLANK_BOTTOM;
SetScrollSizes(MM_TEXT, sizeTotal,CSize(150,150),CSize(4,4));
AfxGetMainWnd()->Invalidate();
}
}
//idcomcn2007
//21:46 2007-12-25
//缩小图片
void CScanViewerView::OnReduce()
{
// TODO: 在此添加命令处理程序代码
if (!imgShow.IsNull())
{
double dw=0,dh=0,dZoom=1.1;
dw=imgShow.GetWidth()/dZoom;
dh=imgShow.GetHeight()/dZoom;
if (dw<=1) dw=1;
if (dh<=1) dh=1;
HBITMAP hBmp=imgShow.Detach();
if (!imgShow.IsNull()) imgShow.Destroy();
imgShow.Create((int)dw,(int)dh,32);
Bitmap* pImgTemp;
pImgTemp=Bitmap::FromHBITMAP(hBmp,NULL);
HDC hDCimg=imgShow.GetDC();
Graphics grpShow(hDCimg);
grpShow.DrawImage(pImgTemp, 0, 0,(INT)dw,(INT)dh);
grpShow.ReleaseHDC(hDCimg); //要记得relese,GDI都需要释放,否则资源会被占用而不接受其他操作
imgShow.ReleaseDC(); //ReleaseDC for each call to GetDC.
delete pImgTemp;
DeleteObject(hBmp);
// TODO: 计算此视图的合计大小
CSize sizeTotal;
sizeTotal.cx=imgShow.GetWidth()+BLANK_LEFT+BLANK_RIGHT;
sizeTotal.cy=imgShow.GetHeight()+BLANK_TOP+BLANK_BOTTOM;
SetScrollSizes(MM_TEXT, sizeTotal,CSize(150,150),CSize(4,4));
AfxGetMainWnd()->Invalidate();
}
}
///////////////////////////////////////////////////////////////////放大和缩小图片//////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////设置顺时针方向旋转多少度//////////////////////////////////////////////////////////////////////////
void CScanViewerView::OnClockwiseRotate0()
{
// TODO: 在此添加命令处理程序代码
m_enClockwiseRotate=CLOCKWISE_ROTATE_0;
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnClockwiseRotate90()
{
// TODO: 在此添加命令处理程序代码
m_enClockwiseRotate=CLOCKWISE_ROTATE_90;
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnClockwiseRotate180()
{
// TODO: 在此添加命令处理程序代码
m_enClockwiseRotate=CLOCKWISE_ROTATE_180;
OnInitialUpdate(); //初始化窗口
}
void CScanViewerView::OnClockwiseRotate270()
{
// TODO: 在此添加命令处理程序代码
m_enClockwiseRotate=CLOCKWISE_ROTATE_270;
OnInitialUpdate(); //初始化窗口
}
///////////////////////////////////////////////////////////////////设置顺时针方向旋转多少度//////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////更新菜单(设置顺时针方向旋转多少度)//////////////////////////////////////////////////////////////////////////
void CScanViewerView::OnUpdateClockwiseRotate0(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enClockwiseRotate==CLOCKWISE_ROTATE_0);
}
void CScanViewerView::OnUpdateClockwiseRotate90(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enClockwiseRotate==CLOCKWISE_ROTATE_90);
}
void CScanViewerView::OnUpdateClockwiseRotate180(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enClockwiseRotate==CLOCKWISE_ROTATE_180);
}
void CScanViewerView::OnUpdateClockwiseRotate270(CCmdUI *pCmdUI)
{
// TODO: 在此添加命令更新用户界面处理程序代码
pCmdUI->SetCheck(m_enClockwiseRotate==CLOCKWISE_ROTATE_270);
}
///////////////////////////////////////////////////////////////////更新菜单(设置顺时针方向旋转多少度)//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -