好久没有写技术文章了,这次是因为接了学校的一个活,没有办法,逼迫我继续学习vc++,现在不得已又硬着头皮去学习了,虽然自己知道这个东西很难,但是相信自己一定回胜利,而且,自己还有这么多朋友帮助,相信自己一定回学回的。
这次老师让我们回去了准备把以前的一个招生的系统的给更改以下,主要是添加两个功能:
1、打印和打印预缆功能
2、数码照相功能
对于第一个功能用mfc中的一些现成的就容易多了,而且查一些资料,然后自己看了,觉得就是对一些参数设置的东西,只不过需要更仔细一点了。
昨天看了以下相关的内容,过程好象是: OnFilePrint()->CView::OnPreparePrinting()->CView::OnBeginPrinting()->CDC::OnStartDoc()->CDC::OnStartPage()->CView::OnPrint()->OnStopPage()->CDC::OnStopDoc->CView::OnEndPrint(),
其中在OnStopPage中,如果需要打印的文章是多页的,它回自动返回到OnStartPage中,进行新的页面的打印,一直到所有的需要打印的文章都被打印完毕,这样就可以完成打印的功能。不过在消息中,下拉菜单中,是通过ON_FILE_PRINT来启用打印功能的,在这里还可以添加一些自己的用途和函数,实现用户自定义的一些功能。
而对于打印预览的功能好象是设置一个参数来实现的,改参数我记得不是很准了,看起来也很简单。
嘿嘿,说了这么多可能已经说迷糊了,还是看看别人的吧!
来源:源码天空
地址:http://www.codesky.net/article/list.asp?id=3232
如果你曾试过在基于C的SDK程序中编码以产生打印输出,你会喜欢MFC打印支持。
它虽不是一个彻底的解决办法,但它确实大大超过了SDK编码。由于打印支持是由
CView派生的,文档/视图结构有必要关注烦琐的程序内务。
一 设备无关性
设备需要一个描述表用作绘画的逻辑画布。正如显示有一个显示设备描述表一样
,打印机也要有一个打印设备描述表。当使用图形函数时,MFC使用同一代码在显
示设备描述表上和打印机设备描述表上绘画。这种两重性是通过CView::OnDraw()
方法来实现的。传入CView::OnDraw()的设备描述表指针可以来自表示两个不同设
备的任一地方,这种安排为MFC的设备无关打印及打印预览提供了多种手段。
打印循环CView::OnFilePrint()
MFC使用8种主要方法作为其“打印引挚”,打印过程的每一步包含了对一种CView
方法的调用,见下表
CView打印方法
方法 说明
OnFilePrint() 运行打印循环的主打印方法
OnPreparePrinting() 调用DoPreparePrinting()以显示Print对话框
DoPrepareprinting() 显示Print对话框
OnBeginPrinting() 分配用于在打印机DC上绘画的GDI资源的位置
OnPrepareDC() 在OnPrint()前由MFC调用。如同映像方式,该方法应位于设置DC属性处
OnPrint() 用打印机DC调用OnDraw()
OnDraw() 把文档数据再现于打印或打印预览方式的打印机DC
OnEndPrinting() 当打印结束后由MFC调用,使用该方法释放任被特殊分配的特定打印机的GDI资源
为使得MFC能响应打印命令,必须定义一个消息映像项,它使预定义的MFC值
ID_FILE_PRINT与控制打印过程的CView::OnFilePrint()方法相关联。该方法调用
其他CView帮助方法来使大量的打印过程自动化。可以直接用代码调用
CView::OnFilePrint().或者,MFC调用它以响应具有ON_FILE_PRINT值的任何命令
消息(如菜单上的打印命令)。
因为OnFilePrint()是保护类成员,该项必须驻留在视图类的消息映像中,如下述:
BEGIN_MESSAGE_MAP(CMyView,CView)
...
//Required for printing
ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint)
END_MESSAGE_MAP()
准备打印
为了对MFC应用程序的打印及打印预览提供支持,仅有一个方法你必须重新设计:
CView::OnPreparePrintinf(),该虚拟方法在打印或预览文档前由MFC调用,其原
型如下:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
pInfo参数是指向包含当前打印作业信息的CPrintInfo对象的指针。
注意:如果打印作业被用户在结果打印对话框中取消,则
CView::OnPreparePrinting()方法调用CView::DoPreparePrinting()方法并返回零值。
CPrintInfo类结构
------------------------------------------
strut CPrintInfo //printing information structure
{
CPrintInfo();
~CPrintInfo();
CPrintDialog* m_pPD; //pointer to print dialog
BOOL m_bPreview; //TRUE if in preview mode
BOOL m_bDirect; //TRUE if bypassing Print Dialog
BOOL m_bContinuePrinting; //set to FALSE to end printing
UINT m_nCurPage; //Current pages
UINT m_nNumPreviewPages;//Desired number of preview pages
CString m_strPageDesc; //Format string for page number display
LPVOID m_lpUserData; //pointer to user created struct
CRect m_rectDraw; //rectangle defining usable page area
void SetMinPage(UINT nMinPage);
void SetMaxPage(UINT nMaxPage);
UINT GetMinPage() const;
UINT GetMaxPage() const;
UINT GetFromPage() const;
UINT GetTopPage() const;
}
CPrintInfo类数据成员
数据成员 说明
m_pPD 指向作为Print对话框的CPrint Dialog对象的指针
m_bDirect 指示文档是否正在直接打印的标志,它旁路Print对话框
m_bPreview 指示文档是否正在预览的标志
m_bContinuePrinting 指示MFC是否应该保持在打印循环内的标志
m_nCurPage 当前正在打印的页数
m_nNumPreviewPages 确定多少页应该显示在打印预览窗口:1或2
m_lpUserData 指向应用程序定义结构的指针
m_rectDraw 定义打印机DC上的当前可用页区域的矩形框
m_strPageDesc 含有页号显示信息的格式字符串
CPrintInfo类方法
方法 说明
SetMinPage() 指定文档的第一个页数(通常为1)
SetMaxPage() 指定文档的最末页码
GetMinPage() 获取文档的第1页码
GetMaxPage() 获取文档的最末页码
GetFromPage() 获取待打印的第1页码
GetToPage() 获取待打印的最末页码
Print对话框
CView::OnPreparePrinting()方法的默认实现如下所示:
BOOL CDocView2View::OnPreparePrinting(CPrintInfo *pInfo)
{
//default preparation
return DoPreparePrinting(PInfo);
}
此默认处理仅调用CView::DoPreparePrinting()方法,后者自动处理调用,而不考虑Pring对话框。
该对话框从获得指向CPrintInfo对象的指针(PInfo)的
CView::DoPreparePrinting()方法中被调用。CView::DoPreparePrinting()方法
具有以下原型:
BOOL DoPreparePrinting(CPrintInfo* pInfo);
MFC使用由用户在Print框输入的值来填充各种CPrintInfo类数据成员,然后,
Print对话框作为CPrintInfo对象成员(pInfo->m_pPD),创建打印设备描述表作
为其hDC成员,方法如下:
if(pInfo->m_pPD->m_pd.hDC==NULL)
{
//call CreatePrinterDC if DC was not created by above
if(pInfo->m_pPD->CreatePrinterDC()==NULL)
return FALSE;
}
提示:在调用CView::DoPreparePrinting()之前,设置CPrintInfo类成员以控制
Print对话框上的显示值。你指定的值的出现在相应的对话框控件中。
如果m_bPreview成员为FALSE,则仅显示Print对话框;在打印预览过程中该对话
框不出现。可以用改变m_bPreview成员值的办法控制对话框的出现,旁路实际打
印作业的Print对话框。打印设置描述表被创建及在CView::DoPreparePrinting()
中的CPrintInfo数据被初始化之后,其调用方法CView::OnPreparePrinting()即
退出。MFC的打印例程的下一站是CView::OnBeginPrinting()方法。
开始打印作业
CView::OnBeginPrinting()方法的首要任务是使合法的打印DC对你的应用程序是
可用的。重新设计该方法以提供基于打印机DC特性的初始化。该方法的原型表示
如下:
virtual void OnBeginPrinting(CDC* pDC,CPrintInfo* pInfo);
打印或打印预览作业开始时,MFC调用该方法,后者在默认的CView实现中不做什
么工作。通过重新设计OnBeginPrint()的途径,你可分配在打印过程中可能需要
的任何GDI资源。如果你分配OnBeginPrint()中的GDI对象,例如,选定几把刷子
进入打印DC,可从优先的CView::OnPrint()方法内部来选,打印实际在其内部进
行(通过CView::OnDraw).
从OnBeginPrint()返回后,OnFilePrint()方法开始主打印循环,在此循环内,文
档的每一页都初始化并(以长度)被打印。
准备打印设备描述表
在设备描述表(即在OnDraw()方法中)上使用任何图形方法之前,调用
OnPrepareDC()方法以使应用程序调整DC的特性。该方法的原型表述如下:
virtual void OnPrepareDC(CDC* pDC,CPrintInfo* pInfo=NULL);
该方法通常被重新设计以设置新的映像方式或DC的某些其他特性。
打印作业
调用OnPrepareDC()之后,MFC调用CView::OnPrint()方法来打印或预览每一个文档页:
virtual void OnPrint(CDC* pDC,CPrintInfo* pInfo);
OnPrint()使用CPrintInfo结构的m_nCurPage成员来确定打印的当前页,然后
OnPrint()调用OnDraw()来绘制打印机DC上的页。
文档的每一页调用一次OnPrint()方法。如果有多页文档需重新设计此涵函数以实
现页打印逻辑。这需要通过操作视窗原点仅绘制OnDraw()的当前页,从而对打印
循环的每次迭代视图会移动一页,它也可使你仅打印褶边如页眉及页脚。
这里有一个最小的已重新设计的OnPrint()方法,它最后调用具有打印DC作为参数
的OnDraw()方法:
void CSomeView::OnPrint(CDC *pDC, CPrintInfo *pInfo)
{
OnDraw(pDC);
}
如果文档超过一页,打印循环的下一次迭代从OnPrint()返回后开始。
清除
文档的全部页码打印完后,打印循环结束(或打印预览结束),MFC调用可以重新
设计的CView::OnEndPrinting()方法来释放分配在OnBeginPrinting()中的任何
GDI资源。该方法的原型如下所示:
virtual void OnEndPrinting(CDC* pDC,CPrintInfo* pInfo);
注意:如果打印机图像不同于显示图像,且需要附加打印机特定的GDI资源时,通
常才使用分配和释放OnBeginPrinting()方法中的GDI资源。
而对于第二个问题,我现在只是有一个初步的影响,知道大概的步骤,但是详细的细节还没有试过,查了以下msdn,发现如果仅仅想实现一个简单的功能,只需要两步就可以完成,先连接视频设备,然后再建立一个捕捉窗口对视频设备的内容进行操作,使用了两个函数,一个是capCreateCaptureWindow()和capDriverConnect()函数来实现,现在我知道这些的大概,但是还没有认真的看过相关的细节,等我看了再来写吧!
嘿嘿!希望在我回去以前能把这个东西看完,因为我还有一个更大的东西需要做啊!
分享到:
相关推荐
### 基于VC++MFC程序设计——简易画图板 #### 概述 本文档将详细介绍如何利用VC++中的MFC(Microsoft Foundation Classes)框架来开发一款简易的画图板应用程序。该画图板的主要功能包括但不限于图形的绘制、线型...
在VC++编程环境中,开发具有高级界面特效的应用程序可以极大地提升用户体验和软件的吸引力。"VC++高级界面特效——3"可能是一个系列教程或资源集合,专注于介绍如何在MFC (Microsoft Foundation Classes) 或者WinAPI...
VC++通讯录管理系统——课程设计报告
【标题】:“VC++简单应用程序——适合初级VC使用者” 【描述】中提到的这个程序主要是为初学者设计的,旨在帮助那些刚开始接触VC++(Visual C++)的人理解和掌握基本的编程技能。通过这样的简单应用,学习者可以...
"VC++高级界面特效(2)"可能涉及的是在第一部分介绍的基础上,更深入地探讨了如何利用MFC(Microsoft Foundation Classes)库和其他技术来实现各种复杂的视觉效果。在这个主题下,我们将探讨一些关键的知识点,包括...
实例028——基本鼠标操作——判断鼠标消息的代码会更具体地展示如何在实际项目中实现这些功能,它可能包括创建一个简单的窗口,注册消息处理函数,并对不同鼠标消息作出相应的反应。通过分析和运行这个示例,你将能...
在VC++编程环境中,开发基于对话框的应用程序时,我们经常需要实现打印和打印预览功能,以便用户能够将程序中的数据或结果显示在纸上。本文将深入探讨如何在VC++中实现这一目标。 首先,我们需要了解打印和打印预览...
接下来,我们需要实现打印预览。`Application`对象提供了`ActiveDocument`属性,它指向当前活动的文档。然后,可以调用`ActiveDocument`的`PrintPreview`方法进入打印预览模式。用户可以在预览窗口中查看即将打印的...
QR码,全称为Quick Response Code,是一种二维条形码,由日本Denso Wave公司于1994年发明,旨在提高数据读取速度和存储容量。在当今信息化社会,QR码广泛应用于各种场景,如网址链接、名片交换、产品追溯等。本篇将...
扫雷游戏的实现涉及到多个计算机科学和技术领域,包括图形用户界面(GUI)设计、事件驱动编程、随机数生成以及算法应用等。下面将详细阐述这些知识点。 1. **图形用户界面(GUI)设计**: - 使用VC++的MFC...
该程序,我是网上下来的,但是,调试了好久都没有结果,在网上又找不到其他资源比对,所以放在这里,大家一起看看,如果有结果的,要多多指教啊,期待
2. **类定义**:定义ActiveX控件的接口,通常包含COM接口和事件接口,用以暴露控件的功能和接收外部调用。 3. **消息处理**:实现控件的消息映射和处理函数,比如WM_PAINT消息用于绘制时钟界面,WM_TIMER消息用于...
尽管现在有更新的开发环境如Visual Studio,但VC++6.0仍然是理解和学习MFC的不错选择,因为它的基础知识和原理在现代C++编程中仍然适用。通过不断练习和深入学习,相信你能在C++和MFC的世界里游刃有余。
在这篇文章中,我们将讨论VC++数据库编程的基本概念和ADODB中文手册的使用方法。 首先,让我们讨论VC++数据库编程的基本概念。VC++数据库编程是指使用VC++语言对数据库进行编程操作,实现数据的存储、检索和处理。...
这个课程设计项目不仅锻炼了学生的编程技能,还强化了他们在软件工程中的需求分析、设计和实现能力,是理论学习与实践操作相结合的重要实践环节。通过这样的课程设计,学生能更好地理解和掌握VC++编程语言,为将来...
在VC++环境中实现播放音频和视频是一项涉及到多媒体处理和多线程编程的技术。这个项目,名为"MMPlayer",显然是一种简易的媒体播放器,它能够处理音频和视频文件,提供类似于主流媒体播放器的功能。 首先,让我们...
VC++是Microsoft开发的一款集成开发环境,支持C++语言,具有丰富的库资源和强大的性能,特别适合进行图像处理和模式识别的算法实现。 1. **基本概念** - **图像模式识别**:是指通过计算机分析图像,识别出其中的...
总结起来,这个DEMO展示了如何利用VC++和MFC构建一个功能完善的图片打印应用,涉及到的关键技术包括MFC的视图和文档架构、打印预览机制、直接打印流程、以及Windows API和GDI图形绘制。对于学习和理解Windows程序的...
在IT行业中,打印机编程是一项重要的技能,特别是在企业级应用中,如财务系统、零售系统等,需要...这是一个涉及系统底层操作的复杂过程,但通过学习和实践,开发者可以掌握这项技术,为应用程序添加强大的打印功能。