C++指针探讨(三)成员函数指针
C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的位置极其重要,也许可以偏激一点的来说:没有指针的C程序不是真正的C程序。
然而C++的指针却常常给我一种束手束脚的感觉。C++比C语言有更严格的静态类型,更加强调类型安全,强 ...
在C++ Builder中编写发送图象文件程序
ICQ能够实现点到点的数据传送,但如果想把一个多媒体图像文件送给另一方,是比较难的。但可以利用C++Builder 5.0 的控件来编写一个用于发送图像的应用程序。
打开C++Builder 5.0 ,新建一个工程,在Form1中添加NMStrm,NMStrmServ,OpenPictureDialog控件,再添;加Button控件3个,Label控件1个,Edit控件 2 个,StatusBar控 ...
在C++ Builder中使用OpenGL编程的优化框架
姑且不谈论OpenGL的名贵背景和光明前途,单凭其实用性和有效性就足以使其成为我们图形输出编程的首选。但是在实际工程应用中程序员没必要仔细地深究OpenGL的运作机制,也往往不需要掌握各种高级的效果制作,真正需要的是最简捷地利用这个得力的工具实现输出数据的可视化,如波形、谱图、立体统计图表等的显示。有鉴于此,本 ...
BCB6/Delphi7下完美调用CHM帮助
本文主要讲解如何在C++Builder6.0及之前的版本中使用Microsoft的新型帮助:"CHM格式帮助文件",对于如何制作CHM格式帮助,以及如何获取帮助文件制作工具,本文只会一笔带过,给出官方链接或推荐其它这方面好的教程,就不再赘述。
CHM格式帮助文件制作工具
需要Microsoft的html help workshop来制作CHM格式的帮助,可以到Mic ...
怎样在C++ Builder中创建使用DLL
动态链接库(DLL)是Windows编程常遇到的编程方法,下面我就介绍一下在BCB (C++ Builder下简称BCB) 中如何创建使用DLL和一些技巧。
一、创建:
使用BCB File|NEW建立一个新的DLL工程,并保存好文件BCB,生成一个DLL的程序框架。
1.DllEntryPoint函数为一个入口方法,如果使用者在DLL被系统初始化或者注销时被调用,用来写入对 ...
图片反色的一段程序
void S_RevColor(Graphics::TBitmap *Bmp)//图片反色
{
BYTE *ptr;
for (int y = 0; y Height; y++)
{
ptr =(BYTE *) Bmp->ScanLine[y];
for (int x = 0; x Width*3; x+=3)
{
ptr[x]=BYTE(255-ptr[x]);
ptr[x+1]=BYTE(255-ptr[x+1]);
ptr[x+2]=BYTE(255-ptr[x+2]);
}
}
} ...
C++ Builder创建组件探密
1.创建组件的类声明
class PACKAGE 新类名 : public 祖先类名
{
private:私有数据:
(1)内部私有用
(2)发布属性的真正数据保存
(3)发布事件的数据保存
(1,2,3)私有数据初始化一般在构造函数中,(3)的初始化一般与祖先该事件相连。
通常为方便直接调用祖先方法常加保存祖先类型的变量:typedef 祖先类名 Inherit;
私有方法:仅 ...
C++中随机存取文件的处理
和许多的C++程序一样,有些人更喜欢用原先的C语言方式处理问题,如果你恰好也是这些人中的一员,就应该学习一下这篇文章。
基本的文件操作有
◆fopen——打开文件,指定文件以怎样的方式打开(读/写)以及类型(二进制/文本)
◆fclose——关闭已经打开的文件
◆fread——读取文件
◆fwrite——写文件
◆fseek/fsetpos——将文 ...
C++编译器性能比较
现在市面上,主流的C/C++编译器包括M$的CL、gcc、Intel的icl、PGI的pgcc及Codegear的bcc(原来属于Borland公司)。Windows上使用最多的自然是cl,而在更广阔的平台上,gcc则是C/C++编译器的首选。但要提到能力优化,排名就未必与它们的市场占有率一致了。
今天一时兴起,便做了一个各编译器数值性能的比较。测试的代码是一 ...
在C/C++中如何构造通用的对象链表
一个简化的问题示例
链表的难点在于必须复制链表处理函数来处理不同的对象,即便逻辑是完全相同的。例如两个结构类似的链表:
struct Struct_Object_A
{
int a;
int b;
Struct_Object_A *next;
}OBJECT_A;
typedef struct Struct_Object_B
{
int a;
int b;
int c;
Struct_Object_B *next;
}OBJE ...
Win 95/NT下OpenGL编程原理
----科学计算可视化,计算机动画和虚拟现实是现在计算机图形学的三个热点。而这三个热点的核心都是三维真实感图形的绘制。由于OpenGL(OpenGraphicsLibrary)具有跨平台性、简便、高效、功能完善,目前已经成为了三维图形制作方法中事实上的工业标准。自从WindowsNT3.51在微机平台上支持OpenGL以后,现在微软公司在Windows9 ...
BitBlt()双缓冲解决图象闪烁
显示图形如何避免闪烁,如何提高显示效率是问得比较多的问题。而且多数人认为MFC的绘图函数效率很低,总是想寻求其它的解决方案。
MFC的绘图效率的确不高但也不差,而且它的绘图函数使用非常简单,只要使用方法得当,再加上一些技巧,用MFC可以得到效率很高的绘图程序。
我想就我长期(呵呵当然也只有2年多)使用MFC绘图的 ...
BDE错误码对照表
0x0000 (0) = Successful completion.
0x0021 (33) = System Error
0x0022 (34) = Object of Interest Not Found
0x0023 (35) = Physical Data Corruption
0x0024 (36) = I/O Related Error
0x0025 (37) = Resource or Limit Error
0x0026 (38) = Data Integrity Violation
0x0027 (39) = Invalid Request
0x0028 (40) = Lo ...
C++:从栈和堆来理解C#中的值类型和引用类型
C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的。但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆。
栈(stack)是类似于一个先进后出的抽屉。它的体积是有限的,一般为2M左右。
而堆(heap)则相对来说体积可以很大,这一般跟计算机的虚拟内存设置有关系。
栈中存取对象的 ...
编译指令#pragma详解
With #pragma, C++Builder can define the directives it wants without interfering with other compilers that support #pragma. If the compiler doesn't recognize directive-name, it ignores the #pragma directive without any error or warning message.
C++Builder supports the following #pragma directives:
#p ...
在C++中实现同步锁,类似Synchronize(object){....}
在做C++的项目中发现,由于用惯了c#的lock(){}和java的Synchronize(){},windows自带的临界区,互斥量,内核事件,信号量用起来不太习惯,于是打算自己在vc++中封装一个类似的东东。封装这个我决定采用一个临界区来做,最终的形式如下:
synchronize(object)
{
//....无论此处是否发生异常,object都能被释放掉。 ...
在BCB中使用VCL控件数组2
我的《BCB中使用VCL控件数组》中,提到了用TList来实现时无法释放资源的问题,结果今天就得到了答案,邬彦华等等网友都指教了TList实现的释放方法,定义代码同前文:
for (int i=1;iParent=ScrollBox;//指定父控件
spdBtn->Caption=IntToStr(i);
spdBtn->Width=80;
spdBtn->Height=80;
spdBtn->OnClick=ButtonClick;
spdBtn ...
BCB中派生VCL类及动态地创建控件
以下不完整例子为生成一个TMemo的派生类及动态地创建该VCL控件。
Class TMemoEx : public TMemo
{
.
.
}
extern TMemoEx memoex;
Class TForm1 : Class TForm
{
public:
TMemoEx *MemoEx;
.
.
}
void _fastcall TForm1::FormShow(TObject *Sender)
{
MemoEx=new TMemoEx(this);
MemoEx->Parent=this;
.
.
}
总之,遵循以 ...
C++辨析系列谈
static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性,下面我将从 static 修饰符的产生原因、作用谈起,全面分析static 修饰符的实质。
static 的两大作用:
一、控制存储方式:
static被引入以告知编译器,将变量存储在程序的静态存储区而非栈上空间。
1、引出原因:函数内部定义的变量,在程序执行到它的定 ...
C++ Builder中利用组件传送文件
在Borland C++ Builder中,使用NMStrmServ和NMStrm组件可以很容易地在两台电脑之间传递文件。当然,你也可以使用基于FTPJ协议的文件传输组件NMFTP,但使用NMStrmServ和NMStrm组件更加方便、快捷。
首先,运行Borland C++ Builder,在窗体Form1中加入一个NMStrmServ组件和一个保存对话框组件SaveDialog。
然后在NMStrmServ1 ...