C/C++经典技术
文章平均质量分 62
scq2099yt
欢迎访问我的个人网站: http://www.joyvc.cn。
展开
-
VC代码的编写和调试---编写易于调试的VC代码
一 程序的设计要避免错误,首先要从好的设计开始。对于程序的设计,需考虑到程序的两个特性:1简单性 大多数常见的错误来源于程序设计中不必要的复杂成分。一个好的设计应该反映问题本身的要求,而不必为了刻意追求“满足将来的需要”而添加不必要的特性。实际上,简单优雅的设计比那些复杂的设计更能迎合未来的需求。2 耦合性 耦合(decoupling)性用来衡量不同对象之间的依赖程度。松耦合的程序易于理解和实现,转载 2007-07-09 12:28:00 · 605 阅读 · 0 评论 -
VC6.0编译器技巧
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号键入快捷键“Ctrl+]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。2.查看一个宏(或变量、函数)的宏定义 把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defi转载 2007-07-09 12:24:00 · 565 阅读 · 0 评论 -
利用GetPrivateProfileString读取配置文件(.ini)
配置文件中经常用到ini文件,在VC中其函数分别为: 写入.ini文件:bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);读取.ini文件:DWORD GetPrivateProfileString(LPCTSTR lpAppNa转载 2007-07-10 15:55:00 · 575 阅读 · 0 评论 -
在MFC类中各种类的指针的获取和应用
于MFC下的文档和视图以及框架之间的访问, 这些问题已经是老生常谈了,但我觉得还是都没有详细的说明,特 别是对于英语较差的人,我查看了一些blog,总结了一下!希望对和我一样的人有点帮助! 一: 1: 因为对于SDI程序,主框架窗口就是文档框窗(如果这个也不知道,就要查看一下MFC下的单文档的构成原理了). 下面所说的是关于单文档的.转载 2007-07-09 13:05:00 · 552 阅读 · 0 评论 -
ListControl的使用
列表控件可以看作是功能增强的ListBox,它提供了四种风格,而且可以同时显示一列的多中属性值。MFC中使用CListCtrl类来封装列表控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些列表控件的专用风格: LVS_ICON ,转载 2007-07-12 11:29:00 · 740 阅读 · 0 评论 -
ASCII表
ASCII 非打印控制字符 ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。例如,12 代表换页/新页功能。此命令指示打印机跳到下一页的开头。 ASCII 非打印控制字符表 十进制十六进制字符 十进制十六进制字符000空 1610数据链路转意101头标开始 1转载 2007-08-17 11:57:00 · 969 阅读 · 0 评论 -
DPtoLP和LPtoDP && ScreenToClient和ClientToScreen
设备坐标(Device Coordinate)又称为物理坐标(Physical Coordinate),是指输出设备上的坐标。通常将屏幕上的设备坐标称为屏幕坐标。设备坐标用对象距离窗口左上角的水平距离和垂直距离来指定对象的位置,是以像素为单位来表示的,设备坐标的X轴向右为正,Y轴向下为正,坐标原点位于窗口的左上角。 逻辑坐标(Logical Coordinate)是系统用转载 2007-05-18 15:42:00 · 919 阅读 · 0 评论 -
在MFC中动态创建控件以及事件响应
动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的。 一、创建动态控件: 为了对照,我们先来看一下静态控件的创建。 放置静态控件时必须先建立一个容器,一般是对话框,这时我们在对话框编辑窗口中,从工具窗口中拖出所需控件放在对话框中即可,再适当修改控件ID,设置控件属性,一个静态控件就创建好了,当对话框被显示时,其上的控件也会显示。 静态控转载 2007-08-21 12:12:00 · 2397 阅读 · 2 评论 -
轻松使用DLL
轻松使用DLL 关于DLL, 有位仁兄写了几点(http://www.cppblog.com/johndragon/archive/2007/04/17/22159.html),正好我的做法不谋而合,我一直就是按照这几个原则来进行的。其实DLL用起来是很简单的,而且好处很多。下面举一个简单的例子。(1)首先定义接囗文件,一般有两种做法,一种是采取纯虚类,一种是pimp手法,我倾向于前者。转载 2007-05-29 18:24:00 · 903 阅读 · 0 评论 -
VC调试入门
概述调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。这里我简要的根据自己的经验列出调试中比较常用的技巧,希望对大家有用。本文约定,在选择菜单时,通过/表示分级菜单,例如File/Open表示顶级菜单File的子菜单Open。 设置为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创转载 2007-05-31 18:05:00 · 621 阅读 · 0 评论 -
socket编程几个函数小结
一、WSAStartup函数 int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); 使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本转载 2007-06-04 15:47:00 · 980 阅读 · 0 评论 -
Debug和Release简介
一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下转载 2007-06-05 10:32:00 · 678 阅读 · 0 评论 -
VC.Net定义和使用MFC DLL
DLL指的是动态链接库(Dynamic Link Library),它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件,是一个可共享的库。DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL。 在下面我们将通过一个具体的例子来说转载 2007-09-06 17:20:00 · 785 阅读 · 0 评论 -
VC.Net从DLL传递消息到EXE
在进行DLL开发过程中,尤其在进行底层硬件开发过程中,比如实时接收数据,进程需要和应用程序进行交互,而DLL和应用程序最好的交互就是发消息了,在DLL中定义消息的方式和在应用程序中定义消息的方式非常相似。下面谈谈这两种定义的方法:一、在应用程序自定义消息方法: 一般自定义消息有一定的范围,虽然说自定义消息从WM_USER开始,但是由于我们的工程里面一般还有很多其他的控件,他们转载 2007-09-06 17:22:00 · 1133 阅读 · 1 评论 -
最常见的20种VC++编译错误信息
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") 2、fatal error C1083: Cannot open include fi转载 2007-06-14 10:03:00 · 517 阅读 · 0 评论 -
C语言符号优先级
(*iter).fun(); //.优先级比*要来得高, 所以要()*p++; //*与++同级, 右结合, 所以先++再取内容&a.cc //.的运算等级比&高, 所以会先. ,再取地址c语言的操作符共有15个优先级,如下:Operators Associativity :: () [] -> . left to right! ~ ++ -- + - * (type) sizeof转载 2007-06-18 11:27:00 · 1606 阅读 · 0 评论 -
内存调试技巧
本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决,它们可能严重影响应用程序,并且很少有开发团队对其制定明确的管理计划。但好消息是,它们并不怎么神秘。引言C 和 C++ 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组(请参见参考转载 2007-09-19 15:18:00 · 743 阅读 · 3 评论 -
_variant_t ,_bstr_t 与 CString 类有什么区别
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转换为字符串放入te转载 2007-09-20 14:07:00 · 1137 阅读 · 0 评论 -
sprintf 使用详解
sprintf 是个变参函数,定义如下:int sprintf( char *buffer, const char *format [, argument] ... );除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:格式化字符串上。printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的格式说明符(format s转载 2007-09-20 14:27:00 · 631 阅读 · 0 评论 -
WPARAM与LPARAM的区别
在Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别。因为地址通常是32位的,所以LPARAM被用来传递地址,这个习惯在Win32 API中仍然能够看到。在Win32 API中,WPARAM和LPARAM都是32位,所以没有什么本质的区别。Windows的消息必须参考帮助文件才能知道具体的含义。如果是你定义的消息,愿意怎么使这两个参数都行。但是习惯上,我们愿意使用转载 2007-09-20 15:33:00 · 596 阅读 · 0 评论 -
TCP服务器/客户端
TCP客户端源程序 #include #include #pragma comment(lib, "WS2_32.lib") #define BUF_SIZE 1024 #define SERVER_IP "127.0.0.1" #define SERVER_PORT 5678 int main(int argc, cha原创 2008-03-01 11:11:00 · 712 阅读 · 0 评论 -
UDP服务器/客户端
UDP客户端源程序 #include #include #pragma comment(lib, "WS2_32.lib") #define BUF_SIZE 1024 #define SERVER_IP "127.0.0.1" #define SERVER_PORT 5678 int main(int argc, cha原创 2008-03-01 11:13:00 · 670 阅读 · 0 评论 -
关于error C2871: 'std' : does not exist or is not a namespace处理
当出现错误:error C2871: std : does not exist or is not a namespace,将#include 改为#include 即可,因为#include 是旧的编译方式。 更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn原创 2008-03-05 14:22:00 · 1897 阅读 · 0 评论 -
VC软件开发规范
一、程序风格: 1、严格采用阶梯层次组织程序代码: 各层次缩进的分格采用VC的缺省风格,即每层次缩进为4格,括号位于下一行。要求相匹配的大括号在同一列,对继行则要求再缩进4格。例如: 2、提示信息字符串的位置 在程序中需要给出的提示字符串,为了支持多种语言的开发,除了一些给调试用的临时信息外,其他所有的提示信息必须定义在资源中。 3、对变转载 2008-03-11 16:03:00 · 1033 阅读 · 0 评论 -
vc中把字符串转换成16进制数的函数(如'7F'->0x7F)
/*------------------------------------------------------------ 函数名 : TransData(CString InStr, PUCHAR OutStr) 功 能 : 将字符串转换成十六进制数据 参 数 : CSt转载 2008-03-11 16:20:00 · 815 阅读 · 0 评论 -
将十六进制数据转换成十进制数据
/********************************************************************** 功能:将十六进制数据转换成十进制数据。 原理: n最初为零,(cbHex[i]-0)是真实的数字大小,这样n最初为 输入十六进制数的最左位,然后通过左移不停乘以16冥次方。 假设你输入的16进制数为:450 第一个循环结束转载 2008-03-11 16:21:00 · 762 阅读 · 0 评论 -
WebBrowser控件说明
方法说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项 GoHome 相当于IE的“主页”按钮,连接用户默认的主页 GoSearch 相当于IE的“搜索”按钮,连接用户默认的搜索页面转载 2008-03-11 16:32:00 · 741 阅读 · 0 评论 -
阻塞套接字与非阻塞套接字
每一个TCP套接口有一个发送缓冲区,可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小。当应用进程调用write时,内核从应用进程的缓冲区中拷贝所有数据到套接口的发送缓冲区。如果套接口的发送缓冲区容不下应用程序的所有数据(或是应用进程的缓冲区大于套接口发送缓冲区,或是套接口发送缓冲区还有其他数据),应用进程将被挂起(睡眠)。这里假设套接口是阻塞的,这是通常的缺省设置。内核将不从write系统转载 2008-03-11 16:37:00 · 1030 阅读 · 0 评论 -
如何应用TCP/IP的套接字开发网络通信应用程序
进入九十年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器网络模式,即客户机提出任务请求,通过网络发送给服务器,由服务器做相应处理,执行被请求的任务,然后将结果返回给客户机。例如:银行ATM的前置机和数据处理的主机之间即构成客户机/服务器网络模式;电话银行的前置机和银行数据处理机之间也构成这种网络模式结构等。这样,如何在前置机和数据主机之间进行信息交转载 2008-03-11 16:39:00 · 1476 阅读 · 0 评论 -
利用ClassWizard添加WM_SIZING消息
当我们添加默认情况下VC没有的消息时,比如WM_SIZING消息,需要修改一下ClassWizard的message filter参数,具体步骤如下:view->class Wizard->class info->message filter选window 。添加其他没有的消息与此类似。 更多技术文章请参看施昌权的个人网站: http://www.joyvc.cn原创 2008-03-12 14:51:00 · 747 阅读 · 0 评论 -
用VC++建立Service服务应用程序
为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。 下面就跟着我一步一步地教你怎么去创建一个转载 2008-03-13 12:04:00 · 1129 阅读 · 0 评论 -
关于WebBrowser2控件API函数说明
Navigate:连接到指定的URL。m_ctrIE为浏览器控件变量。比如播放c盘下test.ppt。m_ctrIE.Navigate("C://Test.ppt", NULL, NULL, NULL, NULL);也可以播放c盘下test.ppt的第一页幻灯片。m_ctrIE.Navigate("C://Test.ppt#1", NULL, NULL, NULL, NULL);Ge原创 2008-03-13 18:05:00 · 730 阅读 · 0 评论 -
Socket应用开发
在Socket应用开发中,还有一个话题是讨论的比较多的,那就是数据接收后如何处理的问题。这也是一个令刚接触Socket开发的人很头疼的问题。因为Socket的TCP通讯中有一个“粘包”的现象,既:大多数时候发送端多次发送的小数据包会被连在一起被接收端同时接收到,多个小包被组成一个大包被接收。有时候一个大数据包又会被拆成多个小数据包发送。这样就存在一个将数据包拆分和重新组合的问题。那么如何去处理转载 2008-03-11 16:02:00 · 542 阅读 · 0 评论 -
轻松实现一个操作ini文件的类
作者:lixiaosan(CSDN)前言: 相信很多朋友在编写自己的程序中,都需要把一些数据先期导入到程序中进行初始化。那么这个时候,比较好的做法就是把你所有的数据写入一个ini文件,然后在程序去读ini文件中的数据对行初始化。 一.INI简介 那么什么是ini文件呢?ini文件是Initialization file的缩写,意即初始化文件。(从名字就可以转载 2008-03-11 16:24:00 · 572 阅读 · 0 评论 -
在VC程序中使用调试语句
为了更好地对程序调试,可以使用如下方法:使用断言、使用跟踪语句、使用异常和返回值。一、断言1、基本概念 断言是一种让错误在运行时候自我暴露的简单有效实用的技术。它们帮助你较早较轻易地发现错误,使得整个调试过程效率更高。 断言是布尔调试语句,用来检测在程序正常运行的时候某一个条件的值是否总为真,它能让错误在运行时刻暴露在程序员面前。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。断转载 2008-03-11 16:27:00 · 507 阅读 · 0 评论 -
VC读写XML文件
1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图:在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。编辑框:ID Category Variable Type Variable Name IDC_ID Value CString m_strId IDC_AUTHOR Value CStr转载 2008-03-11 16:41:00 · 1147 阅读 · 0 评论 -
简单的VC 操作XML 文件的的方法
首先建立一个XML文件,我的机器软件configuration如下:Windows xp professional sp2IE 6.0( 无关紧要)VS 2003------------------------------------------------------------------------------------------------------#import转载 2008-03-11 16:43:00 · 1197 阅读 · 1 评论 -
在vc中使用MSXML解析xml文件
// WebClient.cpp : Defines the entry point for the console application.//#include "stdafx.h" #include afx.h> #include windows.h> #pragma comment(lib, "ws2_32.lib")#include "Winsock2.h"#imp转载 2008-03-11 16:51:00 · 860 阅读 · 0 评论 -
VC防止窗口和控件闪烁的方法
1、将Invalidate()替换为InvalidateRect()Invalidate()会导致整个窗口的图象重画,需要的时间比较长,而InvalidateRect()仅仅重画Rect区域内的内容,所以所需时间 会少一些。虫虫以前很懒,经常为一小块区域的重画就调用Invalidate(),不愿意自己去计算需要重画的Rect,但是事实是,如果你确实需要改善 闪烁的情况,计算一个Rect所用的时间比转载 2008-03-13 14:35:00 · 612 阅读 · 0 评论 -
图像平滑滚动效果的VC实现
前言: 在图像的编程中,经常会遇到这样一种情况,在有限的区域中显示了一幅大图,这时要浏览图像的各个部分,这就需要用到图像的滚动。关于它的实现,许多书都有提及,但其中的关键点和难点,即拖动中的刷新和闪烁问题,却讲述的不多,这也是我写本文的目的所在,下面我将详细分析实现方法。 实现效果及实现方法: 在图像区域中按下鼠标左键,可拖动图像在某一有限区域中任意滚动。 方法为 :拖动时计算上转载 2008-03-13 14:43:00 · 650 阅读 · 0 评论