“m_nCmdShow=SW_SHOWMAXIMIZED”使应用程序启动时最大化窗口显示。字符串资源“IDR_BMPSCATYPE”声明了与应用程序关联的文件类型,将其修改为“\nBMP\nBMP\nBMP(*.bmp)\n.bmp\nBMP.Document\nBMP Document”,说明当前关联文件是后缀名为.bmp的位图。
5.2 在文档类CBmpScaleDoc载入位图
首先在CBmpScaleDoc类声明两个共有变量用于表示位图实例及缩放比例:
CMyBitmap m_Bmp; //位图实例
double m_scale; //位图缩放比例
通过ClassWizard(快捷键:Ctrl+w)重写CBmpScaleDoc的虚函数OnOpenDocument,具体代码如下:
BOOL CBmpScaleDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName)) return FALSE;
bool ret=m_Bmp.LoadImg((char *)lpszPathName); //根据文件名读入位图
m_scale=1.0; //按100%比例显示
if (ret==true) m_Bmp.Zoom(m_scale); //根据缩放比例,显示位图
return TRUE;
}
5.3为视图类CBmpScaleView添加位图显示代码
先在CBmpScaleView中声明以下变量:
bool m_gdi_draw; // 位图显示是用缩放函数还是直接用StretchDIBits函数,true表示用缩放函数
CString m_title, m_strImgsize; // m_title为文档的标题,strImgsize用来存放图像大小及当前显示比例的字符串
同时在CBmpScaleView的构造函数将m_gdi_draw赋值为true,即默认显示方式为使用缩放函数。然后,改写OnInitialUpdate函数:
void CBmpScaleView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CBmpScaleDoc* pDoc = (CBmpScaleDoc *)GetDocument(); //获取文档类指针
int w = pDoc->m_Bmp.m_Width*pDoc->m_scale; //计算位图显示宽度
int h = pDoc->m_Bmp.m_Height*pDoc->m_scale; //计算位图显示高度
CSize sizeTotal(w, h);
SetScrollSizes(MM_TEXT, sizeTotal); //设置滚动范围
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_title=pDoc->GetTitle(); //获取并保存文档标题
}
|