用C++进行简单的文件I/O操作
摘要:序论我曾发表过文件输入输出的文章,现在觉得有必要再写一点。文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。ASCII 输出为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代<fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<f
阅读全文
posted @
2011-03-31 01:25
°ι 、曲 终
阅读(324)
推荐(0)
内存映射修改大文件
摘要:概述本文介绍利用内存映射文件修改大文件:在大文件内存前加入一段数据,若要使用内存映射文件,必须执行下列操作步骤:创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件;创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件;让系统将文件映射对象的全部或一部分映射到你的进程地址空间中;当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除:告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像;关闭文件映射内核对象;关闭文件内核对象;下面将用一个实例详细介绍这些操作步骤,(本实例的目的就是将一个文件A其内容前面加入一些内容存入文件B,我想大家在程序开发当中
阅读全文
posted @
2011-03-31 01:25
°ι 、曲 终
阅读(336)
推荐(0)
自动查找并删除VC生成的临时文件
摘要:关键字临时文件 通配符 递归 查找文件 文件夹选择对话框 INI文件正文VC产生的临时文件有时真的很烦人!当你编译一个程序,突然系统弹出一个对话框:“D盘已经没有足够的空间,请问需要进行磁盘清理吗 ”,而它只能清掉了Nkb的东东,你有什么理由不自己写一个专门清理VC垃圾的小工具呢?隔一段时间运行一次,彻底清除指定类型的垃圾文件:干干净净,中国人,奇强!很明显,这个程序的核心代码肯定是一个有通配符的功能的递归查找文件的函数。我的想法是先查找给定目录下的所有符合条件的文件,再递归查找下级文件夹 下所有符合条件的文件。为了保证其封闭性,我用了一个 CStringList& 变量来保存搜索结果
阅读全文
posted @
2011-03-31 01:24
°ι 、曲 终
阅读(413)
推荐(0)
如何使用 <fstream> 类进行文件的 I/O 处理
摘要:概述大多数 C++ 程序员都熟悉不止一个文件 I/O 库。首先是传统的 Unix 风格的库,它由一些低级函数如 read() 和 open()组成。其次是 ANSI C 的 <stdio.h> 库,它包含 fopen() 和 fread()等函数。其它的还有一些具备所有权的库或框架,比如 MFC,它有很多自己的文件处理类。这些库一般都很难跨平台使用。更糟的是,上述提到的 C 库由于其程序接口的原因,在很大程度上强制程序员进行某些处理,而且缺乏类型安全支持。标准 C++ 提供提供了一个增强的、面向对象的、具有国际化意识的 <fstream> 库。这个库包含一系列派生于标准
阅读全文
posted @
2011-03-31 01:24
°ι 、曲 终
阅读(397)
推荐(0)
如何定制对话框中的回车键
摘要:基于对话框的程序中,每次按下回车键时,程序都退出。去掉按钮的 BS_DEFPUSHBUTTON 属性并重写OnOK函数也没用。那么如何定制回车键的行为呢?这个问题很easy,但是要说明白,却要费点时间。这个问题在Windows的开发中由来已久,对于初学者来说,这是个恼人的问题,幸运的是,人们找到了多种解决这个问题的方案。本文将告诉你定制回车键行为的方法。如果你想要disable回车键,最简单的方法是重载OnOK函数,这固然是个不坏的主意,但如果你重载OnOK,让它什么事情也不干,那麽当用户用鼠标 按下回车键想真正做些什么的时候怎么办呢?你可以改变回车键的ID,如:ID_MY_OK,并写一个调用
阅读全文
posted @
2011-03-31 01:23
°ι 、曲 终
阅读(262)
推荐(0)
VC6中使用CHtmlView在对话框控制中显示HTML文件
摘要:在Visual Studio 6.0中出现了一个新类CHtmlView,利用这个类,我们可以实现在对话框的控制中显示HTML文件。 要想使用CHtmlView类,对它的定义和实现就必须有全面深入的理解。我们不妨拿CHtmlView和CListView做一个比较,通过比较这两个 类,我们会发现一些有趣的差别。首先,MFC中CListView有一个对应的CListCtrl类,而CHtmlView却没有一个CHtmlCtrl 类与之对应;其次,CListView的使用依赖于MFC的文档/视结构,而CHtmlView的实现是基于COM的。通过IWebBrowser2接口 来实现,而且IWebBrows
阅读全文
posted @
2011-03-31 01:21
°ι 、曲 终
阅读(496)
推荐(0)
如何在基于对话框的程序中动态设置鼠标指针
摘要:本文旨在示范在对话框的按钮上(或其它控制上)使用单独的鼠标指针。Windows编程中有两种方法改变指针:一种是当应用的主窗口类注册时,为 WNDCLASS结构提供一个全程光标指针(HCURSOR),另外一种方法是在程序中处理WM_SETCURSOR消息来设置鼠标光标。标准的MFC应 用程序使用第一种方法自动在主窗口注册时将光标指针设置为一个箭头。如果要改变光标指针,则可以通过在主窗口或子窗口中重载消息WM_SETCURSOR 的处理函数来重新设置鼠标指针。// handle WM_SETCURSOR in button class BOOL CMyButton::OnSetCursor(CWn
阅读全文
posted @
2011-03-31 01:21
°ι 、曲 终
阅读(455)
推荐(0)
如何按非客户区移动窗体
摘要:我曾看到一介绍如何按非客户区移动窗体,既重载WM_NCHITTEST,返回HTCAPTION。但我认为有一点不妥就是没有了鼠标右键功能。这里我介绍一种方法,即可已在客户区移动窗体又可以实现鼠标右键功能。新建一工程DLG。采用默认设置。添加消息处理函数:void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,pointy)); CDialog::OnLButtonDown(nFlags, point);}添加右键功能。已实现
阅读全文
posted @
2011-03-31 01:19
°ι 、曲 终
阅读(222)
推荐(0)
在对话框程序中插入DialogBar
摘要:在基于MainFrm程序中加入DialogBar很方便,大家都知道,DialogBar有着工具条无法比拟的优越性,它可以任意放置控件,轻松实现如WPS OFFICE的导航功能。但是在基于Dialog的程序怎么实现这种导航功能呢?本文拟针对这个问题提出解决的办法,将困扰本人很久的问题的解决方法和大家一同分享。大家都知道,CDialogBar不能在Dialog程序中产生的原因是Dialog中没有MainFrm,所以我就从CMiniFrameWnd产生了自己的一个类CMyMiniFrm。BOOL CMyMiniFrm::OnCmdMsg(UINT nID, int nCode, void* pExt
阅读全文
posted @
2011-03-31 01:18
°ι 、曲 终
阅读(407)
推荐(0)
如何在对话框程序中使用动画控件
摘要:很多人都想在程序中实现 avi 控制。本文将一步一步教你如何在一个基于对话框的程序中添加 avi 动画控制(CAnimateCtrl)。其实只要知道了方法,整个过程很简单。图一是本文例子程序运行画面,这个程序用到了表示文件拷贝的avi动画。下面就来看看具体实现方法。在对话框资源编辑器中打开对话框,添加一个动画控件(Animate)。 然后进入类向导“Class Wizard”为刚才添加的这个控件定义一个变量,假设变量名为:CAnimate m_avi。注意变量的种类(Category)选择“Control”。这个定义会自动添加在.h文件中。接下来,我们要将.avi文件引入工程。方法是在工程的资
阅读全文
posted @
2011-03-31 01:17
°ι 、曲 终
阅读(317)
推荐(0)
如何给基于对话框的应用加启动画面
摘要:很多基于对话框的程序都有一个启动画面,那么如何为自己的对话框程序也加一个这样的画面呢?本文将一步一步教你实现每一个细节。其实VC++开发环境中有 一个现成的 Splash Screen 组件,用这个组件很容易实现基于框架类(也就是CMainFrame)的程序的启动画面,那么如果是对话框程序,没有框架类怎么办呢?所以这个组件功能不 是想象的那么强。要实现基于对话框应用程序的启动画面必须另辟蹊径。本文将定制一个C++类:CSplashWnd,用这个类可以增强原来的 Splash Screen 组件功能。它不但可以在用于具有CMainFrame的程序,同时也可以用于基于对话框应用的程序。 CSpla
阅读全文
posted @
2011-03-31 01:16
°ι 、曲 终
阅读(236)
推荐(0)
定制个性化的对话框窗口类
摘要:相信很多人在VC下开发程序的时候大多都会采用基于对话框的开发吧,我也不例外,大多数的小型测试程序没有必要开发基于文档/视图的结构来测试,只要使用一些基本的对话框程序就可以达到这个目的 。但是在开发基于对话框的程序时,要使用到一些 Spy++ 的功能检测的时候,就会出现一些问题。什么问题呢?当我使用 Spy++ 去检测一个对话框的窗口类 时,并想得到一个对话框的窗口类,以便我在使用钩子的时候可以指定一个对话框进行 hook,但是结果出乎我意料之外 ,对话框的窗口类不是我在注册时所指定的对话框窗口类名。其类名是 "#32770(Dialog)",这是一个MFC自动为基于对话框的
阅读全文
posted @
2011-03-31 01:15
°ι 、曲 终
阅读(427)
推荐(0)
如何隐藏显示在任务栏中的对话框程序
摘要:最近有个朋友做了一个基于对话框的小程序,大家知道,一般具有用户界面的 Windows 程序运行起来后,通常都会在任务栏里体现出来。我的这个朋友不想让她做的对话框程序运行的时候显示在任务栏里。问我如何隐藏?我参考了 MSDN 后告诉她说使用 WS_EX_TOOLWINDOW 扩展窗口式样。她按照我说的方法试了一下,结果没有成功。后来我琢磨了半天,发现这件事情并不像文档中说的那么简单。MSDN 里对 WS_EX_APPWINDOW 的描述是这样的: 用 WS_EX_TOOLWINDOW 可以创建一个工具窗口,被作为浮动工具栏使用。工具窗口的标 题栏比常规标题栏短,并且使用的窗口字体更小。工具窗口不
阅读全文
posted @
2011-03-31 01:12
°ι 、曲 终
阅读(558)
推荐(0)
如何在其他程序的窗口上创建按钮并使之能响应
摘要:实现方法采用将动态连接库注入到其他进程中的方法来实现。为了便于选择窗口,我借用了另一个程序"2000下显示带*号"来选择窗口。如果要在98下实现你可用钩子同样实现。程序运行界面如下图:将动态连接库注入其他进程的代码如下:BOOL WINAPI RT_CTRL_BTN(LPCSTR lpszLibFile, HWND hWnd, DWORD dwID, LPRECT pRtBtn, LPCTSTR szCaptionBtn){ try { DWORD dwProcessID; GetWindowThreadProcessId(hWnd, &dwProcessID);
阅读全文
posted @
2011-03-31 01:11
°ι 、曲 终
阅读(372)
推荐(0)
类似flashget的浮动窗口的实现
摘要:简介象flashget、迅雷、BT等都有浮动窗口,能详细地显示下载的详细信息,该类型的窗口有一下几个特点:窗口无标题栏,窗口的大小跟位图一样 大。前端显示。在客户区内按下鼠标左键可以随意拖动窗口的位置。可以改变窗口的透明度。双击可以将主窗口激活,并显示。下面就该类型窗口 的各个功能实现予以说明。代码的详细说明窗口无标题栏,窗口的大小跟位图一样大。建立一个对话框资源,设置为POPUP类型,并取消Title Bar属性。在上面插入一个图片控件,设置为导入的位图。 //得到位图 CBitmap m_Bitmap; HBITMAP hBitmap = m_Logo.GetBitmap(); ASSER
阅读全文
posted @
2011-03-31 01:10
°ι 、曲 终
阅读(225)
推荐(0)
MFC中基于对话框程序快捷键的实现
摘要:FC中基于SDI和MDI的程序,默认情况下有快捷键资源,直接建立快捷键与消息的映射,就能实现程序的快捷键,而基于对话框的程序默认情况下没有快捷键资源,鉴于网友问到这个问题,下面我就分别用两种方法来实现。一是在PreTranslateMessage函数中,判断键盘的按键消息,比如快捷键是Ctrl + Q,我们就检测按键消息的Ctrl键和Q是否同时按下就可以了。//用PreTranslateMessage的方法,判断Ctrl+Q是否按下,按下就执行快捷键对应的操作if(pMsg->message == WM_KEYDOWN && pMsg->wParam == '
阅读全文
posted @
2011-03-31 01:07
°ι 、曲 终
阅读(486)
推荐(0)
让窗口轻而易举变漂亮
摘要:前段时间一直在想怎么样能让窗口变得更漂亮一点,更加吸引人呢?在网上也看到了不少高手们的做法,但对于我这种不喜欢太复杂的人来说,我不是很喜欢那 样写代码,GetSystemMetrics函数来得到各个边框的长度或宽度。。。。没几下,我的头就晕了,在查了许多资料以及实验后,我终于找到了一种 比较简单的美化窗口的方法,现在就拿出来献丑一下,觉得不好的就请跳过去吧。大家请看下面这张图:其实这张图已经很直观的表达了窗口内部的布局,有了这张图你觉得美化窗口还难吗?想怎么好看就可以怎么好看….<注:这张图是从网上搜索得来,十分感谢此作者,为我们提供了方便,在这里我只是拿这张图做一下参考>//取得
阅读全文
posted @
2011-03-31 01:05
°ι 、曲 终
阅读(399)
推荐(0)
VC获取当前鼠标图片
摘要:对于warning C4005: 'WINVER' : macro redefinition的处理 在Windows.h中有如下定义: #ifndef WINVER #define WINVER 0x0400 #endif 如果你把#define WINVER 0x500置于#include <windows.h>之前,就不会出现警告. 需要包含的文件:#include "Winuser.h"HCURSOR GetCur(){ CURSORINFO hCur;// HCURSOR hCur; ZeroMemory(&hCur,sizeof
阅读全文
posted @
2011-03-26 22:13
°ι 、曲 终
阅读(1008)
推荐(0)
多线程编程之四——线程的同步
摘要:八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成的,具有一定的不确定性,因此就有可能出现两个线程同时对磁盘驱动器进行操作,从而出现操作错误;又例如,对于银行系统的计算机来说,可能使用一个线程来更新其用户数据库,而用另外一个线程来读取数据库以响应储户的需要,极有可能读数据库的线程读取的是未完全更新的数据库,因为可能在读的时候只有一部分数据被更新过。 使隶属于同一进程的各线程协调一致地工作称为线程的同步。MFC提供了多种同步对象,下面我们只介绍最常用的四种:临界区(CC
阅读全文
posted @
2011-03-22 00:25
°ι 、曲 终
阅读(231)
推荐(0)
多线程编程之二——MFC中的多线程开发
摘要:五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用于创建工作者线程
阅读全文
posted @
2011-03-22 00:24
°ι 、曲 终
阅读(200)
推荐(0)