摘要:MFC 分割窗体(Splitter Windows)<reference MSDN Microsoft Foundation Class Library and Templates TNO 029>文档描述MFC中的CSplitterWnd类,该类用来支持窗体的分割和管理分割后每一个子窗格(pane)的大小1 分割窗体风格(Splitter Styles)CSplitterWnd类支持2种不同风格的分割窗口1.1 静态分割(static splitter)分割的窗格(pane)在分割窗体(splitter window;)创建时创建,而且顺序,数量不会变化,分割控制条(Splitt
阅读全文
04 2013 档案
摘要:MFC中对话框的数据交换(DDX)和数据校验(DDV)<reference MFC TNO 26>DDX : dialog data exchangeDDV : dialog data validation文档描述MFC中的DDX DDV机制,如何使用DDX_和DDV_ 函数和定制自己的DDX_ ,DDV_函数;Dialog Data Exchange概要:对话框的数据交换不依赖于任何宏来实现,全部依赖于C++代码实现,唯一特别之处在于每一个对话框如果想处理自己的数据交互必须重载一个虚函数void CMyDialog::DoDataExchage(CDataExchage* pDX
阅读全文
摘要:MFC相关技术说明:<可参阅MSDN MFC TNO 3>Mapping of Windows Handles to ObjectsMFC对象与Win32 SDK句柄的映射关系说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WIN32句柄对象的概念区分开来,以下讨论就是MFC C++对象如何封装关联句柄相关函数与技术:1 FromHandle()FromHandle(HANDLE handle);//MFC 类成员的静态方法用于创建一个与句柄关联临时有效的MFC对象ie:CWnd *pWnd = C
阅读全文
摘要:MFC相关技术说明:<可参阅MSDN MFC TNO 5>MFC 中通过通过不同于SDK的switch的方法来处理WINDOWS消息,由消息映射表(Message Map)和虚函数多态来处理指定的窗体消息1 声明一个消息映射表(Message Map)在能处理消息的类中中添加宏DECLARE_MESSAGE_MAP()注 深入浅出MFC中有更详尽系统的概述 这里只介绍几个宏定义这个宏实现了3个功能:1 私有数据成员声明 AFX_MESSAGEMAP_ENTRY _messageEntries;数组2 保护数据成员声明 AFX_MESSAGE_MAP _messageMap指向_me
阅读全文
摘要:MFC 定制控件(Customize Control) 及 MFC CWnd和WIN32 HWND关联方法<参考资料 MSDN MFC TNO 15>文档将概述MFC中定制自定义控件的3种方法:拥有者绘制控件(Owner Drawing Control and Menu) 自绘制控件(self drawing control and menu) 和子集化(subclass)1 使用MFC方法定制控件必备的几个基本概念:控制定制风格的控件的几个标准Windows消息:WM_MEASUREITEMWM_COMPAREITEMWM_DELETEITEMWM_DRAWITEM消息的详细说明
阅读全文
摘要:为了避免同一个文件被include多次,C/C++中有两种方式,一种是#ifndef方式,一种是#pragma once方式。在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 声明、定义语句 #endif 方式二: #pragma once ... ... // 声明、定义语句 #ifndef的方式受C/C++语言标准支持。它不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件(...
阅读全文
摘要:tsvn 带有一个命令行程序 subwcrev.exe. 可以对一个指定文件进行一些宏替换, 比如: 将 $WCREV$ 替换成当前版本号. 这个是最有用的. 详细帮助见http://tortoisesvn.net/docs/nightly/TortoiseSVN_zh_CN/tsvn-subwcrev-keywords.html 以 vc6 为例, 文件的版本信息保存在 rc 文件. 编译成 res 文件, 然后和其他 obj 一起 link. 现在的思路就是. 编辑 rc 文件, 将版本号比如 2.2.4.0 改成 2.2.4.$WCREV$, 在每次 link 之前, 先用 subwc.
阅读全文
摘要:为了使软件版本号的最后一位,即修订号与由svn管理的代码库修订号保持一致并自动更新,可以利用VS2005的生成事件和 svn 中的 subwcrev 程序实现,步骤如下:工具/原料Visual Studio 2005 SVN 客户端( TortoiseSVN 或其他 ) 步骤/方法编写一个模板文件,比如取名为 version_template.h,内容如下#ifndef _VERSION_H_#define _VERSION_H_#define VER_MAJOR 1#define VER_MINOR 0#define VER_REVISION $WCREV$#endif //!_VERSIO
阅读全文
摘要:临界区(Critical Section) 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行访问。如果有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并一直持续到进入临界区的线程离开。临界区在被释放后,其他线程可以继续抢占,并以此达到用原子方式操作共享资源的目的。 临界区包含两个操作原语: EnterCriticalSection() 进入临界区 LeaveCriticalSection() 离开临界区 EnterCriticalSection()语句执行后代码将进入临界区以后无论发生什么,必须确保与之匹配的..
阅读全文
摘要:Visual C++开发工具与调试技巧整理 自己总是用VC平台来开发东西,但是有时候总是出这样那样的问题,呵呵,总是需要上网查资料来解决,在这里把自己用到上网查的一些技巧摘录如下,希望对大家有用,省去大家再去搜索的烦恼。1.如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info选Program Database。在Link标签中选中Generate debug info复选框。注
阅读全文
摘要:实现文件读写操作的几种方法下面为实现文件读取数据的代码://以下为用C语言读取文件FILE *pfile=fopen("2.txt","r"); char *pbuf; fseek(pfile,0,SEEK_END); long len=ftell(pfile); pbuf=new char[len+1]; pbuf[len]=0; rewind(pfile); fread(pbuf,1,len,pfile); MessageBox(pbuf); fclose(pfile); //以下为用C++语言读取文件 char ch[100]; memset(ch
阅读全文
摘要:在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。对于以C起步,C#作为“母语”的我刚开始跟着导师学习C++对这方面还是感到很模糊。虽然我可以以C的知识面对C++的语法规范,用C#的思想领悟C++中类的使用。但是C#中定义和实现是都在一个文件中(其实都是在类里面),而使用C的时候也只是编程的刚刚起步,所写的程序也只要一个文件就够了。因此对于C++的Package理解以及.h文件和.cpp文件的总是心存纠结。幸好导师有详细的PPT让我了解,一次对于Package的认识就明.
阅读全文
摘要:一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link)就行了。比如,在文件a.cpp中定义 了一个全局函数“void a() {}”,而在.
阅读全文
摘要:我在学习中经常遇到要重写DrawItem()的情况,但又有一个WM_DRAWITEM消息,它们是什么样的关系呢。如果我们要重写一个CButton取名为CMyButton,我们可以重写CMyButton的DrawItem()函数来实现我们的需求,但CMyButton::DrawItem()是在什么时候调用呢?它是在它的宿主类的OnDrawItem()中被调用,OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )正是对WM_DRAWiTEM的相应函数。宿主类可以根据nIDCtl来判定是哪个子控件。其实我们可以在OnDrawItem函.
阅读全文
摘要:一、定义一个CImageList m_ImageList;二、初始化加载图片列表:m_ImageList.Create(18, 18, ILC_COLORDDB | ILC_MASK, 0, 1);CBitmap camer;CBitmap camerg;camer.LoadBitmap(IDB_Video);camerg.LoadBitmap(IDB_VideoGroup);m_ImageList.Add(&camerg,RGB(192, 192, 192));m_ImageList.Add(&camer, RGB(192, 192, 192));m_TreeList.Set
阅读全文
摘要:MFC类库提供了CWnd::OnCtlColor函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载WM_CTLCOLOR消息的响应函数.此函数的原型:afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor); 参数nCtlColor用于指定控件的类型,可以是: .CTLCOLOR_BTN 按钮控件 .CTLCOLOR_DLG 对话框 .CTLCOLOR_EDIT 编辑框 .CTLCOLOR_LISTBOX 列表控件 .CTLCOLOR_MSGBOX 消息控件 .CTLCOLOR_SCROLLBAR 滚动条控件 .C.
阅读全文
摘要:1.static_cast在编译时期强制转换,dynamic_cast在运行时期转换(较安全) 2.static_cast是c语言的强制转换代替品;dynamic_cast会运行时检查该转换是否类型安全,只在多态类型时合法,即该类至少具有一个虚拟方法。其中static_cast是相当于C的强制类型转换,用起来可能有一点危险。dynamic_cast在转换前会检查指针(或引用)所指向对象的实际类型是否与转换的目的类型兼容,如果兼容转换才会发生,才能得到派生类的指针(或引用),否则:如果执行的是指针类型的转换引用,会得到空指针;如果执行的是用引用类型的转换,会抛出异常。3.dynamic_ca..
阅读全文
摘要:1、前言相信不少麻油都已经积累了属于自己的代码库了,不知道是否有过这样的经历:A:听说你上次写了个通用XXX类库啊,我正好要用到,麻烦把dll发我一下。B:好的,你等一下,我发给你。。。。。。十分钟后A:喂,你这个类是怎么用的啊,有没有帮助文档啊。B:汗,没来得及做,我来和你说吧。。。一个好用的类库,如果能配上一个好的说明文档(最好还带搜索功能),无疑是为自己和他人提供了莫大的方便,有什么想要的功能,去文档里一查,一目了然。我最近就碰到了这个问题,甚至更为严重的是,有很多很久之前写的代码,里面实现了哪些功能,细节我已经不是很清楚了,还需要去翻看代码,非常难管理和查找。2、准备那么开始今天的内.
阅读全文
摘要:Quote:Sandcastle, created by Microsoft, is a tool used for creating MSDN-style documentation from .NET assemblies and their associated XML comments files. The current version is the May 2008 release. It is command line based and has no GUI front-end, project management features, or an automated bui.
阅读全文
摘要:一款比较好用的 VS 插件,能够快速生成注释。 这是 Pro 版本,与标准版本相比,支持对类、文件批量生成注释并且可以生成 CHM 帮助文件。具体差异请转到: http://submain.com/products/ghostdoc.aspx 原版程序: http://pan.baidu.com/share/link?shareid=308749&uk=263646破解补丁: http://pan.baidu.com/share/link?shareid=308750&uk=263646 使用方法,先安装原版程序,安装完成后使用破解补丁替换安装目录和 VS 扩展程序中的同名文件
阅读全文
摘要:一、简介 GhostDoc是Visual Studio的一个免费插件,可以为开发人员自动生成XML格式的注释文档。 二、下载 需要的朋友可以去这里下载,填个Email地址就可以下了:GhostDoc下载地址 三、安装 下载安装完成后,可以在Visual Studio的工具菜单下找到GhostDoc的身影。 在第一次使用时,会要求设置快捷键,默认的是Ctrl+Shift+S,如果这和你设置的快捷键有所冲突的话,可以在选择的下拉列表里另外选择一个。 GhostDoc使用的优点自然是可以快速生成注释,提高开发效率,但是缺点也不少,首先她生成的注释都是英文,难免有时看的会不顺眼,而...
阅读全文
摘要:本文源码与文档下载本章目标:完成本章学习后,您将能够:Ø 了解什么是ActiveX控件 Ø 掌握如何编写基于MFC的ActiveX控件 Ø 掌握如何测试ActiveX控件 Ø 掌握如何测试ActiveX控件 Ø 了解ActiveX控件如何注册 重点:ActiveX控件的实现、测试及注册。本章将介绍ActiveX控件的应用与工作原理。我们可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。那么,该容器就相当于客户程序,它使用ActiveX提供的服务。注:本文改编自孙鑫教程,在此基础上
阅读全文
摘要:SQL触发器实例1定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。 常见的触发器有三种:分别应用于Insert , Update , Delete 事件。 我为什么要使用触发器?比如,这么两个表: Create
阅读全文
摘要:方法一:1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId)
阅读全文
摘要:基础知识 C标准函数集锦 标准C I/O函数 sizeof 用法 正确使用内存 有关c++ string类 堆和栈的区别[再转] C++中的异常(exception) API总结和断点函数 字符集和编码知识 高位优先与低位优先 do...while(0)的妙用 理解虚基类、虚函数与纯虚函数的概念 C之修炼 C代码优化方案 C++代码优化方法总结 VC:CString用法整理(转载) VC的若干实用小技巧 (如何干净的删除一个类) 指针 C++部分操作符 C++中const用法总结 VC定时器SetTimer函数 Shell中关于文件路径操作的API函数 调用DLL VC小...
阅读全文
摘要:定义英文:Binary files包含在ASCII及扩展 ASCII字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本)文件,图形文件及文字处理程序等计算机程序都属于二进制文件。这些文件含有特殊的格式及计算机代码。ASCII 则是可以用任何文字处理程序阅读的简单文本文件。广义的二进制文件即指文件,由文件在外部设备的存放形式为二进制而得名。狭义的二进制文件即除文本文件以外的文件。文本文件是一种由很多行字符构成的计算机文件。文本文件存在于计算机系统中,通常在文本文件最后一行放置文件结束标志。文本文件的编码基于字符定长,译码相对要容易一些;二进制文件编码
阅读全文
摘要:今天仔细研究了一下关于TCP/UDP接收和发送数据的具体实现和下层接收数据的缓冲区,原理UDP从数据缓冲区中接收数据的方式和TCP从缓冲区中读取数据的方式是不同的,UDP接收缓冲区中也会依次保存接收到的数据,如果缓冲区满了则再接收的数据就会丢失,UDP接收数据和发送数据的次数应该是相同的,UDP不管你每次接收的数据的多少,只要你接收了一次数据那么就相当于接收了发送端某次发送的数据,而不管你接收的多少,本次的数据都将清空,注意:这里说的是本次的数据。再具体点比如:发送端连续两次发送了3个字节的数据包,接收端也必须接收两次才能完成数据的接收,而不是一次接收6个字节就能得到6个字节的数据包,不管你接
阅读全文
摘要:线程同步是一个很困扰大家的一个问题,在线程中有时需要必须的同步机制来控制程序的运行,但什么时候需要加同步机制,什么地方又不需要这些没必要的同步机制呢?在不需要同步的地方加上了同步机制只会降低程序的效率,所以不必要的地方就一定不要加上同步的代码。 我们首先要明白,线程在切换之间都做了些什么事情,首先我们要知道,在系统中全局变量是在全局空间分配的,而局部变量是在系统堆栈中分配的,大家注意了,这两点概念很重要的。操作系统会为我们的每一个线程保护寄存器和堆栈现场,也就是说在线程切换的时候操作系统会为我们的线程恢复原来的寄存器和堆栈现场的(懂些汇编可能更容易理解一些)。所以大家一定要明确,虽然多个线程执
阅读全文
摘要:etTimer函数用于创建一个计时器,KillTimer函数用于销毁一个计时器。计时器属于系统资源,使用完应及时销毁。 SetTimer的函数原型如下:UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ; 其中 hWnd是和timer关联的窗口句柄,此窗口必须为调用SetTimer的线程所有;如果hWnd为NULL,没有窗口和timer相关联并且nIDEvent参数被忽略 nIDEvent是timer的标识,为非零值;如果hWnd为NULL则被忽略;如果hWn...
阅读全文
摘要:对于多线程编程,很多人概念不清,写代码的时候要么是处处加锁,影响性能不说,还容易莫名其妙的死锁,还有人对多线程敬而远之。所以学习多线程编程最重要的不是学习API,而是理解什么才是多线程安全的代码从例子说起#include<windows.h>#include<process.h>longglobal1=0;volatilelongglobal2=0;classMyClass{public:MyClass():m(0){++m;}intfun(intv){returnm+v;//-----------9}voidset(intv){m=v;//-------------1
阅读全文
摘要:引言 众所周知,在调试、跟踪和执行应用程序的过程中,程序的日志能为这些工作提供大量有价值的运行信息。因此,程序的日志对应用程序的运行、维护至关重要。 在如何记录程序日志方面,通常有三种选择: 1、采用Log4CXX等公共开源日志组件:这类日志组件的特点是跨平台且功能比较强大,例如可以把日志发往另一台服务器或记录到数据库中等;另外,可配置性较高,可以通过配置文件或程序代码对日志进行很多个性化设置。但从另外一个角度看,由于这些优点往往也导致了在使用方面的缺点。首先,对于一般应用程序来说,它们并不需要太多的功能,通常只需要把日志记录到文件或反馈到应用程序,功能太多反正让用户使用起来觉得繁琐还得...
阅读全文
摘要:liblogger待选为 glog、log4cplus、log4cpp、log4cxx目前准备使用glog,使用方便,性能也不错,待进一步试验,如果有不能满足的功能就转用 log4cplus,功能很全面,不过稍复杂些。其它两个都是三年前就没更新,没好感,暂不准备使用。1.log4cplus最新版本:1.1.0 2012-03-11下载地址:http://sourceforge.net/projects/log4cplus/files/log4cplus-stable/1.1.0功能全面,使用稍复杂。代码示例:#include <log4cplus/layout.h>#include
阅读全文
摘要:1.C++里有区别true是bool型的;TRUE是int型的,VC里这个是ms自己定义的;C++规定不允许只通过返回类型不同区别两个函数================================================你写错了吧……原函数声明是virtual BOOL InitInstance( );你函数声明是bool,麻烦把它写成BOOLbool跟BOOL是不一样的2.而”DWORD"和“HWND"分别指什么?DWORD类型表示“双字”,也就是四字节大小的整型值,在windef.h中,DWORD的定义如下:typedef unsigned long DW
阅读全文
摘要:1、int WriteToLog(char* str){ FILE* log; log = fopen("D:\\testlog.txt", "a+"); if (log == NULL){ //OutputDebugString("Log file open failed."); return -1; } fprintf(log, "%s\n", str); fclose(log); return 0;}2、带时间的实现voidWriteLog(char*szLog){SYSTEMTIMEst;GetLocalT
阅读全文