}
}
UpdateAllViews(NULL);
点击菜单“组建——组建”,再次组建整个程序,排除组建过程中出现的错误。
***此时运行程序,图像数据可以读入,但是无法显示图像。
第五节 实现图像显示
1. 定义显示控制变量
在DIPJQView.h文件中添加两个显示控制变量。 public: CDIPJQDoc* GetDocument(); int m_ShowMode; int m_ShowScale;
在DIPJQView.cpp文件中定义两个显示模式枚举常量,在构造函数中给显示控制参数赋初值。
enum {SHOWMODE_SCALE, SHOWMODE_FIT}; CDIPJQView::CDIPJQView() { // TODO: add construction code here m_ShowMode = SHOWMODE_FIT; m_ShowScale = 100; }
2. 图像显示代码
在CDIPJQView类的OnDraw()函数中添加图像显示代码。
void CDIPJQView::OnDraw(CDC* pDC) { CDIPJQDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CRect rect; if( m_ShowMode == SHOWMODE_FIT ) { GetClientRect(&rect); m_ShowScale = pDoc->m_pCurImage->FitBlt(pDC->m_hDC,0,0,rect.Width(), rect.Height(),0,0,pDoc->m_pCurImage->m_Width, pDoc->m_pCurImage->m_Height); } else { CSize size; size = GetTotalSize(); GetClientRect(&rect); int x0=0,y0=0; if( rect.Width()>size.cx ) x0 = (rect.Width()-size.cx)/2; if( rect.Height()>size.cy )
y0 = (rect.Height()-size.cy)/2; if( m_ShowScale==100 ) pDoc->m_pCurImage->BitBlt(pDC->m_hDC,x0,y0,pDoc->m_pCurImage->m_Width, pDoc->m_pCurImage->m_Height,0,0); else pDoc->m_pCurImage->StretchBlt(pDC->m_hDC,x0,y0,size.cx,size.cy, 0,0,pDoc->m_pCurImage->m_Width,pDoc->m_pCurImage->m_Height); } }
3. 图像区域设置代码
在CDIPJQView类的OnInitialUpdate()函数中添加视图滚动区域设置代码。
void CDIPJQView::OnInitialUpdate() { CScrollView::OnInitialUpdate(); CDIPJQDoc* pDoc = GetDocument(); CSize sizeTotal; // TODO: calculate the total size of this view if( pDoc->m_pCurImage->IsValid() ) { if( m_ShowMode==SHOWMODE_FIT ) { CRect rect; this->GetClientRect(&rect); sizeTotal.cx = rect.Width(); sizeTotal.cy = rect.Height(); } else { sizeTotal.cx = (int)(pDoc->m_pCurImage->m_Width*m_ShowScale/100.0+0.5); sizeTotal.cy = (int)(pDoc->m_pCurImage->m_Height*m_ShowScale/100.0+0.5); } // ((CMainFrame*)AfxGetApp()->m_pMainWnd)->ShowScale(m_ShowScale); } else { sizeTotal.cx = sizeTotal.cy = 100; }
}
SetScrollSizes(MM_TEXT, sizeTotal);
4. 修整程序菜单
切换到“ResourceView”选项页,展开“DIPJQ resources”,展开“Menu”,双击“IDR_MAINFRAME”,对菜单进行编辑。在各顶层菜单下保留如下菜单项,其余删除。
文件:打开,保存,另存为,最近文件,退出 编辑:撤消 查看:工具栏,状态栏 帮助:关于
5. 添加显示操作菜单
点击顶层菜单“查看”,双击下部空白菜单项,打开“菜单项目 属性”对话框,在ID下拉列表框中输入“ID_SHOW_ENLARGE”,在标明编辑框中输入“放大”,在提示编辑框中输入“放大显示图象\\n放大”。关闭对话框,将该菜单项拖至最上部。
继续依次建立如下三个菜单项:
ID ID_SHOW_REDUCE ID_SHOW_ORIGINAL ID_SHOW_FIT 标明 缩小 原始尺寸 适合窗口 提示 缩小显示图象\\n缩小 按原始尺寸显示图象\\n原始尺寸 使图象完整显示在窗口中\\n适合窗口
点击顶层菜单“查看”,双击下部空白菜单项,在“菜单项目 属性”对话框中,选中“分隔符”,关闭对话框,将分隔符拖至“工具栏”菜单项之上,“适合窗口”之下。
6. 编辑工具栏
切换到“ResourceView”选项页,展开“DIPJQ resources”,展开“Toolbar”,双击“IDR_MAINFRAME”,对工具栏进行编辑。
保留打开、保存、关于三个按钮,删除其它按钮。
添加“撤消”按钮:点中最后的空白按钮,绘制撤消图形,双击该按钮,将ID设为“ID_EDIT_UNDO”,将按钮拖至保存按钮之后。
再依次添加如下四个按钮:
放大——ID_SHOW_ENLARGE 缩小——ID_SHOW_REDUCE
原始尺寸——ID_SHOW_ORIGINAL 适合屏幕——ID_SHOW_FIT 工具栏中个按钮的形状如下: