
windows
dadalan
这个作者很懒,什么都没留下…
展开
-
用更快捷和更高效的方式创建类
例如我们有一个MyServer的工程,在ClassView中可以看到MyServer classes鼠标右键单击此处,弹出New Class对话框,在Name处添上类名,选择Class typeMFC Class表示从MFC类库派生,可以在Base class中选择父类。Form Class表示从CDialog派生的类,可以在Dialog ID中选择对话框资源IDGeneric Class表示从其原创 2009-08-20 22:18:00 · 563 阅读 · 0 评论 -
ENUM在结构体中占用空间吗(2)
写了上面一篇后,仍然意犹未尽,想测试下函数,虚函数,当然,从书本上我早知道普通函数不占结构体空间,虚函数有个虚函数指针占四个自己的空间。但是我都是从书本上看到的,一直以来没有真正去测试过。 #include #include #include struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, T原创 2009-08-28 16:21:00 · 1680 阅读 · 0 评论 -
union 联合体的测试
一直以来很像tcp一样,做可变长的网络数据包,为此自己写了一些很有意思的测试代码,想了解联合体的朋友,不妨从我这里拷过去自己亲自调试调试。#include #include #include struct Msg_t{ char a; int b; int c;};struct Msg_b{ char a; char b; char c; char d;};struct stU{ in原创 2009-08-28 19:42:00 · 889 阅读 · 0 评论 -
变长数据结构
struct dirent{..............char a[1];}在这里char a[1];长度为1,一般认为作为字符数组只能存放/0,但在这里a[1]声明是放在结构体的最后,属于变长数据结构的使用,能够方便访问结构体后面的地址,如:[Copy to clipboard] [ - ]CODE: struct dirent{ int len; char a[0];};原创 2009-08-28 21:50:00 · 2193 阅读 · 0 评论 -
ENUM在结构体中占用空间吗
今天在调试网络问题时,突然想到了动态数据包,要用到enum来区分不同的数据包。此时想到一个问题"ENUM在结构体中占用空间吗" 于是我写了段代码测试了一下struct Msg{ enum { TAG_SIZE = 3}; enum { TAG_ID = 5, TAG_ID_1, TAG_ID_2, TAG_ID_3}; int a; int b;};void main(){原创 2009-08-28 16:03:00 · 5077 阅读 · 6 评论 -
联合的使用
联合用法举例; struct table { int pp; char tt[20]; }; struct list { char name; char password; }; struct All { int原创 2009-08-28 19:24:00 · 714 阅读 · 0 评论 -
VC如何限制PC机上网
关键字:限制上网 SPI 获取IE代理地址 某些程序需要实现控制计算机上网的功能,譬如允许孩子星期六8:00-20:00可以上网,其他时间不能上网。经过研究,用户态下实现这个功能大致有以下几种方法(以下讨论基于windows各平台): 1、使用windows Hook,监视IE或其他浏览器的地址栏,发现有www或http字样的,则更改这些url,使之不能访问相应的url。这种方法实现可能原创 2009-07-10 00:01:00 · 645 阅读 · 0 评论 -
简单密匙加密解密
加密的原理为:读入src,将src与key进行某种操作,便得到加密后的结果,解密时,需要用相同的key来进行解密.简单点就是result = fn(src, password, operator) src为需要加密的, password为对应密码,operator为相应加密操作(就是result = src password),返回的便是加密的结果.这里将src与password做了操作原创 2009-07-10 00:01:00 · 3071 阅读 · 0 评论 -
VC6.0中OpenGL开发环境配置
首先简单介绍一下OpenGL: OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 OpenGL官方网站(英文) http://www.opengl.org 然后设置编程的一些环境,及其安装必备文件的步骤如下: 第一步:选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,B原创 2009-07-11 15:42:00 · 821 阅读 · 1 评论 -
使用动态库,让系统模块化
SimpleDLLClass.h #define SIMPLEDLL_EXPORT#ifdef SIMPLEDLL_EXPORT#define DLL_EXPORT __declspec(dllexport)#else#define DLL_EXPORT #endif#include #include extern "C" DLL_EXPORT void myPuts(LPS原创 2010-02-21 11:38:00 · 1121 阅读 · 0 评论 -
关于回车换行的问题
如果是Linux,则C语言中的/n就会只有一个换行符,即:"0x0A", 如果是在Windows下,则 /n就是代表:"0x0D0x0A",即回车换行 在ascii码中回车对应0x0D, 换行对应0x0A原创 2010-02-23 12:15:00 · 676 阅读 · 0 评论 -
明智地使用私有继承
明智地使用私有继承条款35说明,C++将公有继承视为 "是一个" 的关系。它是通过这个例子来证实的:假如某个类层次结构中,Student类从Person类公有继承,为了使某个函数成功调用,编译器可以在必要时隐式地将Student转换为Person。这个例子很值得再看一遍,只是现在,公有继承换成了私有继承:class Person { ... };class Student:原创 2009-08-24 18:45:00 · 601 阅读 · 0 评论 -
一个非常有用的调试技巧
其意尽在代码之中 #include void main(){ int a = 6; int b = 0; try { a = a/b; } catch(...) { _asm { int 3 } } }原创 2009-08-24 19:16:00 · 798 阅读 · 0 评论 -
解决两个类互为成员的问题
class CB; class CA { CB * m_pB; }; class CB { CA m_pA; } 关键有两点: 1)其中的一个类需要提前声明(forward declaration); 被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class A定义中只能声明class B的指针(或引原创 2009-08-20 22:22:00 · 1653 阅读 · 0 评论 -
数据代码地址分布
大家可以运行这段代码,我相信足以让你明白 #include #include const int i = 10; //文本常量区 int j = 10; //初始化全局区 int n; // 未初始化全局区 char *p = "test"; // "test"在文本常量区,指针自身在初始化全局区 int main() { char *p1 = "H原创 2009-08-20 17:08:00 · 685 阅读 · 0 评论 -
如何获取随机数
//先调用它 srand( (unsigned)time( NULL ) ); //随机数计时开始 然后调用 GetRand(float MIN, float MAX) { float max; max=RAND_MAX; return (int)(rand()*(MAX-MIN)/max+MIN); } 其原创 2009-08-20 21:47:00 · 712 阅读 · 0 评论 -
标准库函数计算时间
依赖标准库函数,代码不存在操作系统的兼容性问题,以及类似Feb29 或 Y2K 的Bugs 如果想要比较两个日期,可使用difftime(): #include time_t now = time(0); // 获得当前时间time_t yestderday = now-(24*60*60);double diff_in_sec = difftime(now, yesterday);原创 2009-08-20 21:49:00 · 573 阅读 · 0 评论 -
全局对象在“程序开始时”建立一次,在“程序终止时”销毁一次
#include struct Foo{ Foo() { printf("before main()/n"); } ~Foo() { printf("after main()/n"); }};Foo smallFoo;int main(int argc, char* argv[]){ std::cout return 0;}原创 2009-08-20 22:07:00 · 699 阅读 · 0 评论 -
通过指针调用函数?
当你通过一个指针调用函数时,不要以为它是个指针就害怕,你就把它当成是一个不折不扣的函数名即可。例如:#include char buff[10];void (*pf) (char *, const char *);pf = strcpy; // 取strcpy的地址pf(buff, "hi"); // 象使用函数名本身一样使用指针 pf原创 2009-08-20 22:08:00 · 763 阅读 · 0 评论 -
初始化类对象
C++中如何初始化类中的表数据?在C语言中,我能像下面这样初始化结构数组: //struct MYSTRUCT { int x,y,z;};MYSTRUCT table[] = { { 1,2,3 }, { 4,5,6 }, ... // etc};//但是如果MYSTRUCT是个C++类,原创 2009-08-24 15:20:00 · 596 阅读 · 0 评论 -
C++编码中减少内存缺陷的方法和工具
C++语言是桌面系统,尤其是系统软件、大型应用软件的主流开发语言。C++语言以其灵活性著称,同时也更复杂。利用C++编写健壮的代码,更具有挑战性。C++允许动态内存管理, 同时也容易导致更多和内存相关的问题。一般而言, 除了系统设计上的缺陷, 基于C++的软件的缺陷和错误大部分都和内存缺陷(主要包括内存访问错误和内存泄漏两类)相关。 所以,消除代码中的内存相关缺陷,成为程序员编写、调试、维护代码中原创 2009-08-20 21:32:00 · 1064 阅读 · 0 评论 -
虚基类的构造
如果一个类有多个基类,基类的构造函数在继承类的构造函数之前被调用。基类的构造函数以被声明的顺序被调用。下面是一个例子: class Y {...} class X : public Y {...} X one; 构造函数的调用顺序是下面的顺序: Y(); // 基类的构造函数 X(); // 继承类的构造函数 对于多基类的情况,下面是一个例子: class X : publ原创 2009-08-20 22:12:00 · 845 阅读 · 0 评论 -
CSocket 是如何被封装的
CAsyncSocket 看类名就知道,它是一个异步非阻塞Socket封装类,CAsyncSocket::Create()有一个参数指明了你想要处理哪些Socket事件,你关心的事件被指定以后,这个Socket默认就被用作了异步方式。那么CAsyncSocket内部到底是如何将事件交给你的呢? CAsyncSocket的Create()函数,除了创建了一个SOCKET以外,还创建了个CSocket原创 2009-08-21 02:36:00 · 981 阅读 · 0 评论 -
GetWindowRect与GetClientRect 的区别
GetWindowRect 函数功能:该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。 函数原型:BOOL GetWindowRect(HWND hWnd,LPRECTlpRect); 在Visual Studio 2005中,函数原型为void GetWindowRect(LPRECT lpRect) const; 是属于CWnd类的函数. 参数: h原创 2010-02-22 13:21:00 · 5136 阅读 · 3 评论 -
绘制文字
void CTestDlgDlg::OnPaint() { CPaintDC dc(this); SetBkMode (dc, TRANSPARENT); dc.SetTextColor(RGB(0,255,255)); dc.TextOut(30,60,"绘制文字");} 经常出现绘制出文字后会带上系统默认的背景,而影响显示效果,为了避免,原创 2010-02-22 14:49:00 · 708 阅读 · 0 评论 -
模态对话框与非模态的显示
DoModal() --------------------- 模态对话框 // TODO: Add your control notification handler code here CMyDialog *pDialog = NULL; pDialog = new CMyDialog(); if ( NULL != pDialog ) { pDialog->Create原创 2010-02-20 16:36:00 · 686 阅读 · 0 评论 -
vc窗口顶层显示
BOOL BringWindowToTop( HWND hWnd);原创 2010-03-09 20:44:00 · 2040 阅读 · 0 评论 -
C/C++获取当前系统时间
//方案— 优点:仅使用C标准库;缺点:只能精确到秒级<br />#include <time.h> <br />#include <stdio.h> <br />int main( void ) <br />{ <br /> time_t t = time(0); <br /> char tmp[64]; <br /> strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); <br /> put原创 2010-07-28 16:33:00 · 14160 阅读 · 0 评论 -
Tinyxml使用入门
<br />两种在Tinyxml中查找元素的方法,对应两种不同的XML文件格式。 test2.xml文件: view plaincopy to clipboardprint?------------------------------------------------------------------------------------------------------------------------ <?xml version="1.0" encoding="UTF-原创 2010-07-31 01:12:00 · 3106 阅读 · 0 评论 -
遍历文件夹下文件
<br /> #include<iostream>#include<string>#include<io.h>using namespace std;void filesearch(string path,int layer){ struct _finddata_t filefind; string curr=path+"//*.*"; int done=0,i,handle; if((handle=_findfirst(cur原创 2010-07-30 15:48:00 · 1324 阅读 · 0 评论 -
C++ XML解析之TinyXML篇
最近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。以后的文章里会讲解使用Xerces进行C++ XML解析的例子,希望大家一起交流。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是原创 2010-07-30 21:37:00 · 1271 阅读 · 0 评论 -
istringstream, ostringstream, stringstream 实现数据类型转化为 string
<br />#include <iostream>#include <string>#include <sstream>using namespace std;int main(){ int a, b; string Str1, Str2; string Input = "abc 123 bcd 456 sss 999"; //ostringstream 对象用来进行格式化的输出,可以方便的将各种类型转换为string类型原创 2010-08-04 16:48:00 · 2808 阅读 · 0 评论 -
VC6.0编译器参数的设置
<br /><br />VC6.0编译器参数的设置主要通过VC的菜单项Project->Settings->C/C++页来完成。我们可以看到这一页的最下面Project Options中的内容,一般如下:<br /><br />/nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fp"Debug/WritingDlgTest.pch" /Yu"stdafx.h" /Fo"原创 2010-08-04 14:45:00 · 686 阅读 · 0 评论 -
打开文件选择框
<br /> void TestGetOpenFileName(void){ // OPENFILENAME ofn; // 设置此属性 TCHAR szFile[MAX_PATH]; //存放处 // ³õʼ»¯Ñ¡ÔñÎļþ¶Ô»°¿ò¡£ ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = NULL; ofn.lps原创 2010-08-05 17:19:00 · 846 阅读 · 0 评论 -
测试程序的效率
<br />#include <stdio.h>#include <stdlib.h>#include <time.h>void main( void ){ time_t start, finish; long loop; double result, elapsed_time; printf( "Multiplying 2 floating point numbers 10 million times.../n" ); ti原创 2010-08-06 23:03:00 · 2493 阅读 · 0 评论 -
显示加载动态库
<br />cosnt char *szModule = "DB.dll"<br />HANDLE hModule = LoadLibrary(szModule);<br />FUNC fuc = (FUNC)GetProcAddress(hModule,"StatInfoUpdate");原创 2010-08-05 20:14:00 · 733 阅读 · 0 评论 -
Print formatted data to stdout 格式化数据输出与输入
printffunction int printf ( const char * format, ... );Print formatted data to stdoutWrites to the standard output (stdout) a sequence of data formatted as the format argum原创 2010-03-10 22:05:00 · 940 阅读 · 0 评论 -
选择control和value有什么区别
简单点说,Value 就是一个变量 control 就是一个控件。 主要的区别也就是 变量 和 控件之间的区别,虽然他们实质上都是一样的。 可是选择 Value ,MFC 会把控件的内容对应到一个变量上。除非你用其他API取得这个 控件进行操作,否则,就是一个变量而已。主要的用途是 UpdateData。进行数据读些。原创 2010-03-04 22:58:00 · 3236 阅读 · 5 评论 -
sscanf 与 scanf的比较与使用
sscanf() - 从一个字符串中读进与指定格式相符的数据.函数原型:Int sscanf( const char *, const char *, ...);int scanf( const char *, ...);头文件:#include说明:sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。第一个参数原创 2010-02-23 14:42:00 · 878 阅读 · 0 评论 -
C RunTime Lib 简称CRT介绍
CRT 全称:Visual C++ C RunTime Lib 就是C运行时库。注: 以下内容部分引自CSND中相关讨论的帖子,并结合自己的理解整理而成。仅供参考。1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数.2)C 语言是所谓的“小内核”语言,就其语言本身来说很小(不多的关键字,程序流程控制原创 2010-02-23 15:29:00 · 1221 阅读 · 0 评论