- 博客(38)
- 资源 (3)
- 收藏
- 关注
转载 MFC命名规则
MFC命名规则 Windows类型样本变量MFC类样本变量HWNDhWnd;CWnd*pWnd;HDLGhDlg;CDialog*pDlg;HDChDC;CDC*pDC
2009-06-06 23:32:00
1224
原创 C语言当中位段的使用
位段以位为单位定义结构体(或共用体)中成员所占存储空间的长度。含有位段的结构体类型称为位段结构。 位段结构也是一种结构体类型,只不过其中含有以位为单位定义存储长度的整数类型位段成员。采用位段结构既节省存储空间,又可方便操作。位段结构中位段的定义格式为: unsigned :例如:struct bytedata{ unsigned a:2; /*位段a,
2009-05-20 10:33:00
405
原创 利用宏扩展提高代码的可读性
上周看了一下ffmpeg,在ffmpeg.c->main()->avcodec_register_all()中看到这样一些代码:REGISTER_DECODER (AASC, aasc);REGISTER_DECODER (AMV, amv);REGISTER_ENCDEC (ASV1, asv1);REGISTER_ENCDEC (ASV2, asv2);REGISTER_DECODER
2009-05-13 17:34:00
593
转载 讲讲volatile的作用
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic var
2009-05-11 14:31:00
473
原创 动态内存分配
前段调试遇到内存不够的情况,所以今天学习了一下动态内存分配的知识。 动态存储分配函数(stdlib.h)typedef unsigned int size_t;void *calloc(size_t num, size_t size);分配num个大小为size字节的空间,分配成功返回首地址,不成功返回0void free(void * ptr);释放ptr指向的存储空间(ptr只能是mall
2009-05-01 20:53:00
941
原创 OnSysCommand 函数
OnSysCommand 函数 OnSysCommand()这个函数主要是截获控制命令的,msdn上的解释如下:The framework calls this member function when the user selects a command from the Control menu, or when the user selects the
2009-04-26 12:08:00
652
转载 C中的预编译宏定义
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理.C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在有的C编译器中, 这些过程统统由一
2009-04-08 19:36:00
759
转载 OutputDebugString()
坚定的 Win32 开发人员可能对 OutputDebugString() API 函数比较熟悉,它可以使你的程序和调试器进行交谈。它要比创建日志文件容易,而且所有“真正的”调试器都能使用它。应用程序和调试器交谈的机制相当简单,而本文将揭示整件事情是如何工作的。本文首先是由以下事件促使的,我们观察到 OutputDebugString() 在管理员和非管理员用户试图一起工作或游戏时并不总是能可
2009-04-07 21:31:00
11227
6
原创 VC中TRACE
VC中TRACETRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。使用非常简单,格式如下:TRACE("DDDDDDDDDDD");TRACE("wewe%d",333);同样还存在TRACE0,TRACE1,TRA
2009-04-03 19:15:00
656
2
原创 动态链接库 dll
链接库分为静态链接库和动态链接库,而动态链接库在使用时,又进一步分为装载时链接和运行时链接。装载时链接是指该动态链接库是在程序装入时进行加载链接的,而运行时链接是指该动态链接库是在程序运行时执行LoadLibrary(或LoadLibraryEx,下同)函数动态加载的。因此,由于动态链接库有这两种链接方式,所以在编写使用DLL的程序时,就有了两种可选方案。 可能有人会问
2009-03-31 22:02:00
2002
原创 动态连接库 .dll
本文一、二两部分适用于对DLL的基本制作方法已经了解,或手头有关于DLL制作方法的书籍的读者.对于初次接触DLL制作的读者,建议您先按三中的步骤建立一个自己的DLL并在另一个应用程序中成功的调用它之后再阅读一、二. ---- DLL可以分为两个不同的类别:用C/C++(不用对象)编写的基于API的传统DLL和基于MFC对象的DLL. 一.两种类型的比较: ---- 1. 基于M
2009-03-29 14:51:00
545
转载 VC++图象处理编程(二)
BMP图像显示的特效操作在上面的学习基础上,我们可以进一步深化,学习并掌握图像特效显示技术。有了这种技术,可以用来在今后的项目开发中美化我们的软件界面,提高软件的视觉效果。在如今的商业软件中,几乎每一幅图像的显示都采用了图像特效显示,例如读者比较熟悉的Windows的屏幕保护程序就采用了各种各样的图像特效显示,使人感到眼花缭乱和耳目一新。专业图像处理软件更是提供了丰富的显示方式供用户使用,可以
2009-03-21 14:30:00
960
3
转载 VC++图象处理编程(一)
基本概念前言数字图像处理技术与理论是计算机应用的一个重要领域,许多工程应用都涉及到图像处理,一直有一个强烈的愿望,想系统的写一个关于数字图像处理的讲座,由于工作学习很忙,时至今日才得以实现。 “图”是物体透射光或反射光的分布,“像”是人的视觉系统对图的接收在大脑中形成的印象或认识。图像是两者的结合。人类获取外界信息是靠听觉、视觉、触觉、嗅觉、味觉等,但绝大部分(约80%左右)来自视觉
2009-03-21 14:29:00
2192
2
原创 MFC中SetWorldTransform函数中XFORM结构体的使用
SetGraphicsMode 函数功能:该函数为指定的设备环境设置图形模式。 函数原型:int SetGraphicsMode(HDC hdc, int iMode); 参数: hdc:指向设备环境的句柄。 iMode:指定图形模式,该参数可为下列值之一: GM_COMPAIBLE:设置与16位Windows相兼容的图形模式,这是缺省的模式。如果指定此值,应用程序只能通过调用设置
2009-03-21 14:18:00
4088
2
转载 剖析MFC六大关键技术 六
把对句柄的操作转换成对CWnd对象是很重要的一件事,因为AfxWndProc只是一个全局函数,当然不知怎么样去处理各种windows窗口消息,所以它聪明地把处理权交给windows窗口所关联的MFC窗口对象。现大,大家几乎可以想象得到AfxCallWndProc要做的事情,不错,它当中有一句:pWnd->WindowProc(nMsg,wParam,lParam);
2009-03-18 19:43:00
806
原创 MFC六大关键技术之 五 消息映射与命令传递
题外话:刚开始学视窗程序设计的时候,我就打印了一本Windows消息详解,里面列举了各种已定义消息的意义和作用,共10多页,在编程的时候翻翻,有时觉得很受用。我发觉很多编程的朋友,虽然每天都面对消息,却很少关注它。C++程序员有一个通病,很想写“自己”的程序,即每一行代码都想自己写出来。如果用了一些库,总希望能完全理解库里的类或函数是怎么一回事,否则就“不踏实”。对于消息,许多朋友只关心常用的几个
2009-03-18 19:41:00
503
原创 剖析MFC六大关键技术 三 动态创建
动态创建就是运行时创建指定类的对象,在MFC中大量使用。如框架窗口对象、视对象,还有文档对象都需要由文档模板类对象来动态的创建。我觉得这是每个MFC的学习者很希望理解的问题。初次接触MFC的时候,很容易有这样的迷惘。MFC的几大类不用我们设计也就罢了,但最疑惑的是不用我们实例化对象。本来最直观的理解就是,我们需要框架的时候,亲手写上CFrameWnd myFrame;需要视的时候,亲自打上CVie
2009-03-18 19:39:00
375
原创 剖析MFC六大关键技术 四 永久保存(串行化)
先用一句话来说明永久保存的重要:弄懂它以后,你就越来越像个程序员了! 如果我们的程序不需要永久保存,那几乎可以肯定是一个小玩儿。那怕我们的记事本、画图等小程序,也需要保存才有真正的意义。 对于MFC的很多地方我不甚满意,总觉得它喜欢拿一组低能而神秘的宏来故弄玄虚,但对于它的连续存储(serialize)机制,却是我十分钟爱的地方。在此,可让大家感受到面向对象的幸福。 MFC的连续存储(serial
2009-03-18 19:39:00
702
原创 剖析MFC六大关键技术 二 运行时类型识别(RTTI)
运行时类型识别(RTTI)即是程序执行过程中知道某个对象属于某个类,我们平时用C++编程接触的RTTI一般是编译器的RTTI,即是在新版本的VC++编译器里面选用“使能RTTI”,然后载入typeinfo.h文件,就可以使用一个叫typeid()的运算子,它的地位与在C++编程中的sizeof()运算子类似的地方(包含一个头文件,然后就有一个熟悉好用的函数)。typdid()关键的地方是可以接受两
2009-03-18 19:36:00
355
原创 剖析MFC六大关键技术 一
MFC的六大关键技术包括:MFC程序的初始化过程。运行时类型识别(RTTI)。动态创建。永久保存。消息映射。消息传递。MFC程序的初始化过程1、设计一个简单完整MFC程序,产生一个窗口。当然这不能让AppWizard自动为我们生成。我们可以在Win32 Application工程下面那样写:#include class MyApp : public CWinApp{public
2009-03-18 19:35:00
339
原创 Visual C++窗体设计技巧集
如何制作透明窗体 使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK。不过此函数在w2k的user32.dll里有实现,所以如果你不希望下载巨大的sdk的话,可以直接使用GetProcAddress获取该函数的指针。 SetLayeredWindowAttributes的函
2009-03-12 20:35:00
423
原创 全屏的两种方法
下面只是全屏的两种方法:(实际可能还有很多方法噢) 1)用SetWindowPlacement(...) 2)用SetWindowPos(...) 这里对这两种方法均举例给出.一、比如若想在程序运行时候就要是屏的,可试着写下的代码,(在CMainFrame::OnCreate()中)……CRect winRect,clientRect;Get
2009-03-12 20:00:00
2139
原创 VC中动态添加控件
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。 一、创建动态控件:为了对照,我们先来看一下静态控件的创建。放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。静态控件不需要调用
2009-03-11 21:20:00
360
原创 上拉电阻
上拉电阻:1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。2、OC门电路必须加上拉电阻,才能使用。3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。4、在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供
2009-03-11 18:21:00
329
原创 #ifndef与#pragma once
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif 方式二:
2009-03-09 13:03:00
340
原创 一步一步学STL标准模板库
list 的使用在使用list必须包括头文件#include ,1)、如何定义一个list对象#include int main (void){ list cList; //声明了list模板类 的一个实例}2)、使用list的成员函数push_back和push_front插入一个元素到list中cList. push_back(‘a’); //把一个对象放到一
2009-02-24 22:01:00
287
原创 CRC校验原理
CRC校验原理 1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。3、CRC码集选择
2009-02-22 21:43:00
1251
原创 批处理文件编写
批处理文件编写 批处理批处理文件是以.bat或者.cmd为扩展名的文件,其中可以包含各种命令。批处理有的时候是非常有用的,具体我就不举例子了。马上进入正题,下面我们看看批处理文件的一些知识。Application Error:一般程序返回0表示没有发生问题。否则返回1或者其他数字来表示有错误发生。批处理基本指令:Call:主要工作是从一个批处理文件调用其他的批处理文件,可以传递参数给另外的批
2009-02-21 01:10:00
895
原创 VC导出导入数据到Excel中(实例)
//在Excel 2000环境下首先利用Visual C++ 6.0,建立一个MFC基于对话框的工程项目,共享DLL,Win32平台。工程名称ExcelTest。在主对话框中加入一个按钮, ID IDC_EXCELTEST Caption Test Excel 双击该按钮,增加成员函数void CExcelTestDlg::OnExceltest()。 在BOOL CExcelTestApp:
2009-02-20 21:04:00
465
原创 标准c++中主要有四种强制转换类型运算符:
标准c++中主要有四种强制转换类型运算符: const_cast,reinterpret_cast,static_cast,dynamic_cast等等。 1)static_cast(a) 将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。 表达式static_cast(a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行
2009-02-17 15:58:00
325
原创 CArchive类实现数据的缓冲区读写
MFC 提供CArchive类实现数据的缓冲区读写,同时定义了类对象的存储与读取方案。 以下对CArchvie 的内部实现作分析。 一.概述 CArchive使用了缓冲区,即一段内存空间作为临时数据存储地,对CArchive的读写都先依次排列到此缓冲区,当缓冲区满或用户要求时,将此段整理后的数据读写到指定的存储煤质。 当建立CArchive对象时,应指定其模式是用于缓冲区读,还是用于缓冲
2009-02-17 14:27:00
1257
原创 使用::std::vector作为管理动态数组的优先选择
使用::std::vector摘要: 本文介绍了C++标准库中的容器类vector,分析了它的优点,并且建议在应用程序中使用它作为动态数组的优先选择,而不是MFC的CArray在一些使用 MFC 的程序中,经常看到许多程序使用 CArray的设计问题,造成使用它的代码的复杂化,增加了维护难度。因此建议使用 ::std::vector。另外,也看到一些程序在用 malloc/reall
2009-02-17 09:45:00
323
原创 MFC里常用宏的含义
AND_CATCHAND_CATCH AND_CATCH(exception_class,exception _object_point_name) 说明:定义一个代码块,它用于获取废除当前TRY块中的附加异常类型。使用CATCH宏以获得一个异常类型,然后使用AND_CATCH宏获得随后的异常处理代码可以访问异常对象(若合适的话)已得到关于异常的特别原因的更多消息。在AND_
2009-02-16 21:54:00
317
原创 MFC中对话框的数据交换(DDX)和数据校验(DDV)
MFC中对话框的数据交换(DDX)和数据校验(DDV)DDX : dialog data exchangeDDV : dialog data validation文档描述MFC中的DDX DDV机制,如何使用DDX_和DDV_ 函数和定制自己的DDX_ ,DDV_函数;Dialog Data Exchange概要:对话框的数据交换不依赖于任何宏来实现,全部依赖于C++代码实现,唯一特别之处在于
2009-02-16 21:25:00
1154
原创 active X控件注册
使用ActiveX控件可快速实现小型的组件重用、代码共享,从而提高编程效率,开发成本。但是ActiveX控件对于最终用户并不能直接使用,因为ActiveX控件必须先在Windows中注册。注册ActiveX控件一般来说有六种途径,它们有各自的优点,运用范围也不同。 Regsvr32.exe注册 Regsvr32.exe位于Windows目录的system子目录下。点击Windows的“
2009-02-16 19:04:00
2493
原创 INI文件编程
在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应用如下: 一.将信息写入.INI文件中. 1.所用的WINAPI函数原型为: BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCT
2009-02-16 17:17:00
319
原创 sql server ---存储过程
问题 当sql server启动时,我很想运行一个存储过程。有没有一种方法可以在每次SQL Server服务启动时都会自动执行这个存储过程呢? 专家解答 sql Server提供了系统存储过程sp_procoption,这个存储过程可以用于当SQL Server服务启动时指派一个或者多个存储过程自动执行。这是一个很不错的选择,它可以用于多种多样的用途。比如,你可能在你的数据库
2009-02-16 16:33:00
321
原创 #ifdef _DEBUG
#ifdef _DEBUG virtual void AssertValid() const; //assert(断言)valid(有效的,正确的)virtual void Dump(CDumpContext& dc) const; //存储上下文#endif这两个函数是调试用的,第一个函数检查可用性,即是否有效 第二个函数如果未更改的话,最终调用的是Cwnd::Dump(); 输出窗口类名,标题
2009-02-16 16:27:00
353
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人