VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板
VCer代码 VCer开源 VCer文章 VCer工具 VCer知道 VCer词典 VCer读书 VCer论坛   站点首页 我要张贴 控制面板

目前位置: VCer资源中心 >>> VCer文章
子级分类: 软件工程 C++/MFC基础 Windows界面 网络与通信 图形图象处理 系统通信 数据库 文件系统 硬件/系统调用 开发工具 组件技术 其它技术
我来转发一篇文章!>>>


VC基础学习:初学者指针指南
 
何为指针?   指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。   开始   如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:   int* pNumberOne;   int* pNumberTwo;   注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。   现在,让我们把这些指针指向一些实际的值吧:   pNumberOne = &some_number;   pNumberTwo = &some_other_number;   “&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。   现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pNum ...
作者:不祥 try_yuyi张贴于2004-07-24 19:09:16.0,共阅读6680次,回复11
终于搞懂了,预编译头文件(precompiled header)
 
预编译头文件今天在改一个很大的程序,慢慢看,慢慢改。突然发现一个.c文件,里面什么也没有, 就几个头文件,我一看,我靠,这不是把简单的问题搞复杂了吗,随手删掉那个c文件。 结果不能编译了,我靠: fatal error C1083: Cannot open precompiled header file: \'Debug/v13_3.pch\': No such file or directory 怎么rebuild all都不行。 上网查了一下,才搞懂了: ----------------总结------ 如果工程很大,头文件很多,而有几个头文件又是经常要用的,那么 1。把这些头文件全部写到一个头文件里面去,比如写到preh.h 2。写一个preh.c,里面只一句话:#include "preh.h" 3。对于preh.c,在project setting里面设置creat precompiled headers,对于其他 .c文件,设置use precompiled header file // 哈哈 我试了一下,效果很明显,不用precompiled header,编译一次我可以去上个厕所,用 precompiled header,编译的时候,我可以站起来伸个懒腰,活动活动就差不多啦 ---------转载的 ...
作者:不祥 pyl2001张贴于2004-03-09 19:32:16.0,共阅读45519次,回复19
白乔原创:VC之美化界面篇
 
本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础: 1. 大致了解MFC框架的基本运作原理; 2. 熟悉Windows消息机制,熟悉MFC的消息映射和反射机制; 3. 熟悉OOP理论和技术; 本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。 1. 美化界面之开题篇 相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面: 图1 瑞星杀毒软件的精美界面 程序的功能如何如何强大是一回事,它的用户界面则是另一回事。千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。 “受之以鱼,不若授之以渔”,本教程并不会向你推荐《瑞星杀毒软件》精美界面的具体实现,而只是向你推荐一些常用的美化方法。 2. 美化界面之基础篇 美化界面需要先熟悉Windows下的绘图操作,并明白Windows的幕后绘图操作,才能有的放矢,知道哪些可以使用,知道哪些可以避免…… 2.1 Windows下的绘图操作 熟悉DOS的读者可能就知道:DOS下面的图形操作很方便,进入图形模式,整个屏幕就是你的了,你希望在哪画个点,那个地方就会出现一个点,红的、或者黄的,随你的便。你也可以花点时间画个按钮,画个你自己的 ...
作者:不祥 bluejoe张贴于2004-03-04 15:11:18.0,共阅读53268次,回复37
编写易于调试的VC代码
 
一 程序的设计   要避免错误,首先要从好的设计开始。对于程序的设计,需考虑到程序的两个特性:   1简单性   大多数常见的错误来源于程序设计中不必要的复杂成分。一个好的设计应该反映问题本身的要求,而不必为了刻意追求“满足将来的需要”而添加不必要的特性。实际上,简单优雅的设计比那些复杂的设计更能迎合未来的需求。   2 耦合性   耦合(decoupling)性用来衡量不同对象之间的依赖程度。松耦合的程序易于理解和实现,易于测试和维护,且这种程序包含错误的可能性小,错误也较容易发现和清除。 二 编程风格   编程风格是个人问题,有很大的随意性。一个好的编程风格不仅让代码易理解,也易于调试。好的编程风格包括:   1 清晰地书写代码   如果没有必要,尽量不要使用语言中的高级特性,因为这些特性不易于理解和调试。使用大多数程序员都能理解的语言成分来书写代码不易犯错且易于理解和维护。   2 编写结构良好的代码   当程序崩溃时所能得到的最基本的调试信息是源代码文件、问题所在行的行号和一个调用栈(call stack)。调用栈是调试程序时最有帮助的部分,它提供错误出现的上下文,也就是带参数的函数调用序列。你书写的代码结构越好,调用栈就能给你越多信息。   3 使用良好的标识符    一个好名字能使你的代码更容易被理解和维护。流行的匈牙利命名法(Hungarian Notation) ...
作者:michael bluejoe张贴于2007-01-23 17:00:05.0,共阅读4302次,回复7
list队列与vector容器的用法
 
list用法 #include <list> using namespace std; struct DEVICEINFO { CString strPath; //路径 CString strDeviceName; //设备名称 }; //声明变量: list<DEVICEINFO> m_listDeviceInfo; //增加元素 DEVICEINFO info; info.strDeviceName = "10.13.5.100_5309"; info.strPath = "D:\\ZD_FILES\\1\\10.13.5.100_5309\\1@10.13.5.100_5309@20080701@105759.zd"; m_listDeviceInfo.push_back(info); info.strDeviceName = "10.13.5.100_5310"; info.strPath = "D:\\ZD_FILES\\1\\10.13.5.100_5310\\1@10.13.5.100_5310@20080701@105759.zd"; m_listDeviceInfo.push_back(info); //判断元素在list中 //例如DeviceName为10.13.5.100_5309 for(list<DEVICEINFO>::iterator it = m ...
作者:彭斯 pengsiqi1985张贴于2010-01-15 10:17:21.0,共阅读228次,回复0
C++源代码游戏编程--WinMain()函数集
 
C++源代码游戏编程--WinMain()函数集 C++源代码游戏编程--WinMain()函数交流 //****************************************************************** //函数:WinMain() //功能:应用程序入口 //****************************************************************** int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; hInst=hInstance; //初始化主窗口 if (!InitWindow( hInstance, nCmdShow)) return FALSE; //初始化DirectDraw环境 if (!InitDDraw()) { MessageBox(hWndMain, "初始化DirectDraw过程中出错!", "Error", MB_OK); FreeObjects(); D ...
作者:不祥 guifang张贴于2004-06-20 11:46:28.0,共阅读8056次,回复5
白乔原创:VC之控件篇
 
本文主要通过大量示例指引读者了解和使用Windows控件以及ActiveX控件。1 前言 1.1 控件之于VC 控件与Visual C++没有直接的关系,控件是Windows操作系统的界面元素,而VC只是一种开发语言。VC可以编写Windows程序,当然也可以编写Windows界面,包括最熟悉的对话框界面。 对话框界面是初学者学习VC的一道门槛,学习复杂的文档/视对于初学者来说是很痛苦的事情。而对话框的优点就在于它的“所见即所得”,设计界面画得有多好看,程序运行界面就有多好看。而如何让你的对话框的界面更丰富一点,那就是控件的事情了。 所以,你,责无旁贷的,要先学好控件的使用;而本次教程,正是指引你如何在VC里实现控件编程。 控件是窗口,是个完成特定功能的小窗口。例如:最熟悉的列表框控件可以让你用来列出你所有女友的名字; 控件放置在对话框里,对话框就成为控件的容器,或曰父窗口;而控件就成为对话框的元素,或曰子窗口。 控件并不总是显示成一个窗口,它可以是隐藏着的,例如:你可以使用定时器控件来控制“神五”的发射,但没必要一定要在发射系统的主界面上土土地画上一只小闹钟。 你用来选择女友名字的列表框是Windows系统标准控件,用来指示大爆竹升天的定时器也是。但Windows系统为你考虑的总会有限,那么就需要一些先行的人(第三方)为你准备一些他们出品的控件,这些符合Windo ...
作者:不祥 bluejoe张贴于2004-04-15 22:59:04.0,共阅读11092次,回复2
白乔原创:VC之控件篇[3]
 
以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。 1 使用ActiveX控件 以上部分操纵的都是Windows标准控件,其实在Windows里,你还会常常接触到ActiveX控件,它来源于第三方,而非Windows操作系统。这样的控件一般来说,功能丰富而且使用方便,从而大大简化了程序员的工作。本章节以我们需要使用到的Flash控件为例细作阐述。 1.1 控件的注册 不同于Windows标准控件,ActiveX控件需要注册才能使用,ActiveX一般以.OCX或者.DLL文件格式发布,可以使用VC附带的工具来注册某个控件,按照以下步骤: 1. 在VC的Tools菜单下启动ActiveX Control Test Container; 2. 在ActiveX Control Test Container里打开菜单File\Register Controls…; 3. 弹出窗口Register Controls显示系统中已注册的所有ActiveX控件,点击左下角的“Register…”按钮; 4. 选择待注册的控件文件,如:“C:\WINNT\system3 ...
作者:不祥 bluejoe张贴于2004-04-15 23:12:22.0,共阅读11568次,回复1
面向对象分析的最新思考
 
面向对象分析,这个是c++的最基本的要求,也许刚学习c++的人都能很轻松的背出它的定义,但是在实际的编程过程中能很好的面向对象分析的是少之又少。我在做第一个项目的时候,在分析的时候就用面向对象的方法进行分析,可是很遗憾,由于我的编程水品的限制,不知不觉中陷入了对细节的纠缠,没能完全的面向对象。因此我很苦恼,后来我给自己总结了下,就不再强求自己面向对象了。这完全是对的,无论是谁都不可能到函数级别还面向对象,只能是随着理解的深入,面向对象的层次更高些罢了。但是要想使用这套混合的、非完美的面向对象分析,必须有一套完美的方法。 这套方法就是: 1.放弃面向对象。当你对某个领域不了解或者对某方面编程不熟悉的时候,就要放弃面向对象的方法,因为这个时候你必 须把精力放在如何解决问题上,首先要解决有无的问题。试想下,假如你对某个对象不了解,但还是一味的追求面向 对象,并把这个对象封装成一个类,这个时候这个类的属性、方法就十分缺少了,它与其它对象的关系就更不明了 了,这时候你写的程序只能是补丁程序,健壮性可想而知了。但是如果你放弃面向对象,使用分而治之的方法,也许 就一切问题都迎刃而解了,当然这里的放弃面向对象是指:我们不能把某个类抽象出来,但是我们能隐隐约约感觉 到,并不是一切混乱的写。 2.封装不熟悉的东西。对于不熟悉的函数、方法,不要拿来就用,要把它封装 ...
作者:流水 liushuiwu张贴于2009-12-08 09:53:39.0,共阅读128次,回复0
学习C/C++的经验谈
 
工作已经有三年半,算上学校里的时间,大约已有7年的C语言和5年的C++使用经验;熟练使用C/C++也有3年以上;现在的我自认为是可以称得上精通C/C++,基本现在市面上广泛被推崇的经典书籍,如:《C++ Primer》、《高级C++编程技术》、《STL原码剖析》、《Effective C++》、《C编程陷阱》、《Thinking in C++》等等,这些书只有《高级C++编程技术》和《C编程陷阱》在早些时候是通篇看完的(也是因为它们都比较薄),其它的现在基本上都已经不能启发我了,这些书虽然内容各不相同,但针对的读者水平是一样的,应该是已经学会编程语言,能够独立编程但尚未精通,在某些方面存在一定问题或欠缺的人; 对于书籍,我现在的追求又回到了纯理论,基本上是远离编程语言和计算机,比如,小波变换和《Algorithm I-IV》; 言归正传,关于很多人疑问的先学什么后学什么的问题,我认为:如果你选择C++作为最终的工具,或者是以C++为主的,那么我强烈建议你先学习C语言; 首先要说明的是,C和C++是两件截然不同的东西,学习C++可以完全没有C的基础,或者说可以完全不用先学C;但是,这样你是永远也不可能成为真正的C++大师的;你最多只能成为一个C++的熟练工人;C和C++有一个共同的奥义:内存管理,而你不学习C,单从对C++的理解 ...
作者:不祥 oases2008张贴于2005-01-01 00:00:00.0,共阅读3562次,回复5
指针和引用的区别
 
指针和引用的区别可以这样理解: 指针是内存中实实在在存在的空间地址,而引用则是编译器成次的东西,和数值是一个东西,编译时引用直接被实际的数值替换掉. 举些例子: 1.char *ch = NULL;//没问题 char &ch1 = NULL;//编译器不会答应 2.char ch2[] = "123"; char ch3[] = "456"; char *ch5 = ch2; char *ch6 = ch3; char ch7[] = "789"; char ch8[] = "123"; char &ch9 = ch7; char &ch0 = ch8; 看下面的区别: ch5 = ch6;//ch3[]没有变化 ch9 = ch0;//ch7的内存泄露了 3.指针引用: 指针引用是什么?就是给某个地址空间起个别名,编译后就是那个指针的内存空间; 4.引用做为形参时 大家知道,某个进程再调用一个函数时会创建一个特殊的线程,也就是把硬盘的某块信息复制到内存的进程空间,然后按照二进制代码执行.但是这块二进制代码已经被电脑写好了,内存已经分配好了呀,所以我们只能改变形参的值了,这就是c++的复制原理,只是复制,只能用,不能被传出,这就是为什么数值传递和指针传递不能被改变的原因.但是引用就不一样了,引用只有在使用时才去找它的"真身",所以就 ...
作者:流水 liushuiwu张贴于2009-09-13 15:34:48.0,共阅读435次,回复1
使得子控件大小随主窗口大小变化的宏
 
作者:不祥 lirongbao000张贴于2006-04-27 05:05:30.0,共阅读6050次,回复7
VC++的链接错误LNK2001
 
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:   unresolved external symbol “symbol”(不确定的外部“符号”)。   如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。 以下是可能产生LNK2001错误的原因: 一.由于编码错误导致的LNK2001。 1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。 2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。 3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。 4.试图从基类的构造函数或析构函数中调用 ...
作者:不祥 Boyben张贴于2004-05-13 14:00:04.0,共阅读10811次,回复2
MFC 控件随窗体大小而变化
 
1.添加OnInitialUpdate() 2.添加控件成员变量 void CFS_DataView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: Add your specialized code here and/or call the base class CRect rect; GetWindowRect( &rect ); if (m_wndlist.GetSafeHwnd()) { m_wndlist.MoveWindow(CRect(0,22,rect.Width(),rect.Height()-20),TRUE); } }
作者:折翼天使 changhai203张贴于2009-07-03 10:14:03.0,共阅读1080次,回复1
SADSA
 
...ADASDASD
作者:艾弗森 r11222张贴于2009-02-23 14:04:22.0,共阅读571次,回复1
制作msi文件时的困扰
 
... 1 如何限制非管理员用户安装,我是通过orca工具修改lockPermissions表,似乎可行。 2 在用户模式下安装时,老是弹出error 1935: An error occurred during the installation of assembly ‘“Microsoft.MSXML2,publicKeyToken="6bd6b9abf345378f",version="4.1.0.0",type="win32",processorArchitecture="x86" ”’. Please refer to Help and Support for more information. HRESULT:0x80070005 . 通过log文件发现: MSI (s) (44:70) [14:12:37:181]: Executing op: AssemblyCopy(SourceName=MSXML4.DLL|msxml4.dll,SourceCabKey=msxml4.dll.21206420_6BA8_4CFB_A48C_C72A6BFE80C0,DestName=msxml4.dll,Attributes=512,FileSize=1230336,PerTick=32768,,VerifyMedia=1,,,,,ComponentId={303 ...
作者:amipol amipol张贴于2009-07-23 10:42:41.0,共阅读430次,回复0
VC classview中*,classes树状图下显示0 ...解决方案
 
关闭工程,把.clw,.ncb,.aps,.opt四个文件给删了,再打开工程,一切OK!
作者:折翼天使 changhai203张贴于2009-07-03 10:21:56.0,共阅读448次,回复0
如何真实地模拟火焰效果
 
模拟火焰效果如何真实地模拟火焰效果 作者:周军 游戏制作离不开各种各样的特效,火焰效果更是这些特效当中最常用的一种。在网上有很多的这方面的例子,但似乎都不太理想。下面我主要介绍几种有效的火焰模拟算法。 在讲述火焰算法之前,我想先介绍一个经典的Blur算法,这将为我们后面的文章提供很好的技术基础,因为这是模拟火焰的关键所在。^_^ 对于不同的效果我们要采取不同的模糊(Blur)算法,在这里我只介绍最简单的一种。 其实Blur算法相当简单,并不像很多人想象的那么神秘,只要一句话就可以解释清楚。我们所要做的不过是把屏幕上的每一个点用它周围的四个点的平均值代替即可。即: 好了,下面我们进入主题,Let’ s get in …… FIRE ! ! ! 总的来说,模拟一个火焰效果需要以下这三个步骤:放置热源、火焰上升、减掉衰减因子。 1. 放置热源: 放置热源很好理解,也很好实现,我们只需要在屏幕的适当位置(想升起火焰的地方)放上一些亮点就可以了,比如: for (int i=0; i<320; i++) putpixel (i, 199, rand()%256); 2. 火焰上升: 我们已经有了热源,那么如何使火焰升起来呢?这就要用到我们刚才讲到的Blur了。由于火焰是要向上升的,所以我们不能简单的选择待处理pixel的上、下 、左、右四个 ...
作者:不祥 xler张贴于2004-05-19 20:05:02.0,共阅读3597次,回复1
VC常见数据类型转换详解
 
VC常见数据类型转换详解我们先定义一些常见类型变量借以说明 int i = 100; long l = 2001; float f=300.2; double d=12345.119; char username[]="女侠程佩君"; char temp[200]; char *buf; CString str; _variant_t v1; _bstr_t v2; ////////////////////////////////////////// 一、其它数据类型转换为字符串 短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换 长整型(long) ltoa(l,temp,10); ////////////////////////////////////////// 二、从其它包含字符串的变量中获取指向该字符串的指针 CString变量 str = "2008北京奥运"; buf = (LPSTR)(LPCTSTR)str; BSTR类型的_variant_t变量 v1 = (_bstr_t)"程序员"; buf = _com_util::ConvertBSTRToString( ...
作者:流水 liushuiwu张贴于2008-12-23 04:45:13.0,共阅读1190次,回复1
句柄大讨论(请各抒己见:)
 
在Windows程序设计中,句柄是无法精确定义的术语。随便找一个高手,让他给你讲讲句柄是什么,恐怕他都很难给你一个具体的定义来。 在Windows程序设计中,句柄无所不在,窗口有窗口的句柄HWND,线程和进程也有句柄HANDLE,甚至有人把套接字也称为句柄(我就是这样的)。 句柄在英文中是handle,作为动词讲是处理的意思。简而言之,句柄是处理对象的一个接口,对于程序中所涉及的对象,你可以通过句柄去操作他。你不应该试图去回答句柄是什么,而应该从务虚的角度去理解他,知道他干什么即可。 有人说,因为handle的定义是void *,因此他是一个指针。有些熟悉内核的人说这是一个索引。这些说法都是不准确的。需要注意的是,微软并没有精确定义句柄的含义,也许在某个特殊的操作系统中,他使用了一种内部含义,但是在其他版本中,就不保证这样了。任何对句柄的内在假设都可能导致灾难性的后果。 API是接口,句柄是接口,两者有什么区别?API是一个通用的函数族,他处理所有的对象,而句柄是和某个具体对象相关联的数据结构。只有借助句柄,API才知道处理哪个对象。 有些对象有ID。句柄表示特殊的对象,ID也表示某个对象,为什么要两个东西来表示? 首先,句柄不能唯一表示对象。一个对象可以有多个句柄。例如:假设我们用CreateProcess创建一个进程,该进程的第一个线程的句柄会返回给 ...
作者:阿荣 kgj2008张贴于2007-05-14 10:15:40.0,共阅读3221次,回复6

页次: 1/10页 记录总数198 9 7 [ 1 2 3 4 5 6 7 8 9 10 ] 8 :