随笔分类 - mfc
摘要:本程序下载地址: 要使文本在richedit控件上进行放大缩小,可以通过设置字体的大小,从而来达到缩放文本的目的。下面是一个例子:通过调整滚动条,从而控制richedit文本缩放。程序运行结果如下:首先在对话框的InitInstance函数中初始化richedit, 对话框才能显示出来AfxInitRichEdit();之后处理滚动条响应函数,从而来调整字体大小,实现缩放效果。//滚动条响应函数void CRichEditDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { // TODO: Add yo...
阅读全文
摘要:本程序下载地址: 上一篇讲述了tiff格式图片拆分成多张图片, 这篇博客讲述如何把多张任意格式的图片合成为一张图片。 图像合成仍然需要借助Cximage图像库,合成函数为Mixfrom, 函数原型为:void MixFrom(CxImage & imagesrc, long lXOffset, long lYOffset); 其中imagesrc表示原图,lXOffset,lYOffset表示原图需要被合成到目标图像的哪个位置。 例如: //合成图片 ImageDes.MixFrom(ImageSrc1, 0, 0); ImageDes.MixFrom(ImageSrc...
阅读全文
摘要:本程序下载地址: tiff格式的图片可以由多张图片合成, 也可以拆分为多张图片。不管是合成或者拆分,都借助了第三方开源库Cximage,对于这个图像库的使用,我们没有必要去一行一行的去看它的代码实现,我们只需要使用它提供出来的接口就可以了。下面先展示tiff图片的拆分,之后的博客再展示tiff格式图片的合成。 程序运行结果,点击Tiff分割按钮,将“D:\\src.tiff” 图片拆分为0.tiff, 1.tiff, 2.tiff三张图片。 图像拆分主要使用到Cximage类中的GetNumFrames,SetFrame成员函数,分别用来获取图像帧的个数,设置一帧。long Ge...
阅读全文
摘要:本程序下载地址: 在Windows下进行摄像头拍照功能开发,可以借助开源的摄像头项目或者一系列的demo。 本程序实现一个简单的拍照功能, 需要使用Cximage库,CCameraAPI库,这些都是开源的,我们可以直接使用它提供出来的接口就可以了。一、初始化摄像头过程 之前得再CTakephotoDlg类中创建一个私有的CCameraAPI 指针,并在CTakephotoDlg构造函数中置为空。class CTakephotoDlg : public CDialog{// Constructionpublic: CTakephotoDlg(CWnd* pParent = NUL...
阅读全文
摘要:本程序下载地址: 类似于windows的复制、剪切、粘贴操作、我们也可以使用剪切板来实现这样的功能。 下面通过一个例子来演示:点击“复制” 按钮,可以把"D:\temp"文件夹放到剪切板, 右键选择粘贴,可以把该文件夹放到硬盘目录下。点击 “粘贴” 按钮,可以把"D:\temp"这个路径名显示到文本框中。 程序运行界面如下:复制按钮响应过程: 先建立一个自定义剪切板,用来存放复制或者剪切操作标识符号,判断是哪一种操作; 然后建立一个文件夹剪切板,头部存放一个DROPFILES结构大小内容,之后的空间用来存放文件夹列表 1 void CMyDlg::OnB
阅读全文
摘要:本程序下载地址: PDF是我们极其常用的文件格式,但对如何生成PDF,个人一直觉得很神秘,其实利用一些公开的PDF库,我们就可以直接生成PDF文件,而不用关注PDF文件的内部细节。我知道的PDF库有如CARIO和HARU。 HARU是一款免费的,跨平台的,开源的生成PDF的库。支持嵌入PNG、JPEG图片,支持CJK字体编码。用C语言编写,因此可以在C/C++中调用。HARU也提供了Ruby,Delphhi,和C#的捆绑(binding)。项目主页见http://libharu.sourceforge.net/index.html 对于HARU这个开源的PDF库,我们没必要深究具体代...
阅读全文
摘要:在使用VC开发项目过程中,界面是项目中的一个子模块。虽然界面并不那么重要,把握住核心功能就可以了,但界面美观与否直接关系到用户的体验, 因此我们也应该关注界面的处理。 我们可以在OnEraseBkgnd处理函数中,利用GDI绘图与双缓冲技术来设置背景。 在下面的这个程序中,在OnEraseBkgnd处理函数中直接设置对话框的显示背景,下图是运行结果。 通过创建一个和屏幕相关联的内存DC,并把位图选入内存DC中,然后在内存DC上进行绘图,绘图结束后把内存DC中的数据拷贝到屏幕DC,这样就可以在对话框上显示出设置好的背景。BOOL CMyDlg::OnEraseBkgnd(CDC *pD...
阅读全文
摘要:本程序下载地址: FTP(File Transfer Protocol)协议主要用来在网络上进行文件传输。FTP通讯除了有一个默认的端口21外,还有其他端口,同城两个端口同时进行数据传输。一个是默认的端口(通常为21),主要进行控制连接,即进行命令协议及服务器端响应码的传输。另一个非标准端口主要进行数据,上传下载文件等。 实现FTP协议,有两种方式,实用WinInet API和使用基本Winsock。对于一般应用,用WinInet效率要高,而且简单。也可以用Winsock来编写,这样更加灵活,但是复杂度高且需要对协议非常熟悉。 FTP是MFC的WinInet支持的三个Internet功能...
阅读全文
摘要:本程序下载地址: 通常设置对话框以及对话框上的各种控件的位置,可以直接在资源对话框那里进行手动来调整。 但这样做往往导致调整不精确,不能够很好的进行界面布局,对齐方式也不是很好。 同时对话框上的各控件资源可能会在放大、缩小、隐藏对话框的时候,控件资源隐藏了部分,或者全部都隐藏了。 对这种问题的解决方式就是在WM_SIZE消息处理函数中,通过编写代码的方式对各个控件进行调整。 用来调整对话框以及各个控件位置的函数就是:MoveWindow, 该函数原型如下:void MoveWindow(int x, int y, int nWidth, int nHeight, BOOL bRepai...
阅读全文
摘要:一、实现过程 1. 使用宏定义消息ID,例如:#define WM_OCRRESULT (WM_USER+101) 其中WM_USER为系统消息和用户自定义消息的分界线,小于WM_USER的消息被系统所占用,如:WM_LBUTTONDOWN消息,大于WM_USER的消息为用户自定义消息; 2. 在类声明AFX_MSG块中声明消息响应函数的原型,例如:afx_msg void OnOcrResult(WPARAM wParam, LPARAM lParam); 函数可以有返回值,也可以无返回值; 函数原型可以有参数,也可以无参数,如果无参数,经常导致在debug下正常运行,r...
阅读全文
摘要:有些时候在对话框窗口中点击某个按钮,需要点击好几次才能进行响应。这是因为当前按钮所属的对话框没有获得焦点,因此该按钮不灵敏。例如:下面的视频录制按钮,需要点击好几次才有反应。解决方法:在该按钮控件所属的对话框资源中,设置对话框类型为:“overlapped”,就可以解决问题了。
阅读全文
摘要:【引言】 拖放操作在电脑中很常用,例如我们经常复制文件就可以按住ctrl键不放,然后再拖到另外一个窗口中,或者,可以把一个WORD文档直接拖动到WORD窗口即可打开,以前我使用过VB,里面直接有OleDragDrop事件,进行相应处理即可。那么如何在VC++中通过编程实现该功能呢,这就是本文要介绍的。 下面我来具体实现ListCtrl接受拖动文件的方法, 功能: “把磁盘目录下的文档或者文件夹拖动到ListCtrl中的时候,会把文件夹或者文档相对应的路径插入到ListCtrl中”【实现】 具体做法如下:新建一个mfc对话框工程,取名为ListCtrlDrag; 用ClassWizard类向导新
阅读全文
摘要:CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中经常看到这样的情况:它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用。下图是这个程序运行的结果:下面让我们来从头做一个新的工程文件,来慢慢掌握它的功能吧。建立一个单文档的工程文件,将其命名为RectTracke。单击finish完成工程的建立;先编译一下,第一次生成obj文件吧,在它生成的过程中,我们继续往下讲解;第一步:在CRectTrackeDoc类中生成一个公有的数据成员:m_RectTracker;之所以设成公有.
阅读全文