对于像我这样刚接触MFC不久的人来说,MFC中的数据类型的确让人很头痛,需要不时地去查找MSDN,找的多了,就记下来了一部分,于是贴出来,加强记忆!
数据类型 | 意义 |
BOOL | Boolean值(TRUE or FALSE) |
BSTR | 32-bit字符指针 |
BYTE | 8-bit整数,无正负号 |
COLORREF | 32-bit数值,代表一个颜色值 |
DWORD | 32-bit整数,无正负号 |
LONG | 32-bit整数,有正负号 |
LPARAM | 32-bit数值,作为窗口函数或callback函数的一个参数 |
LPCSTR | 32-bit指针,指向一个常数字符串 |
LPSTR | 32-bit指针,指向一个字符串 |
LPCTSTR | 32-bit指针,指向一个常数字符串。此字符串可移植到Unicode |
LPTSTR | 32-bit指针,指向一个字符串。此字符串可移植到Unicode |
LPVOID | 32-bit指针,指向一个未指定类型的数据 |
LPRESULT | 32-bit数值,作为窗口函数或callback函数的返回值 |
UINT | Win16中,16-bit无正负号,Win32中,32-bit无正负号 |
WNDPROC | 32-bit |
WORD | 16-bit整数,无正负号 |
WPARAM | 窗口函数的一个参数,Win16中16bits,Win32中32bits |
MFC独特的数据类型
数据类型 | 意义 |
POSITION | 一个数值,代表collection对象(例如数组或链表)中的元素位置,常使用于MFC collection classes |
LPCRECT | 32-bit指针,指向一个不变的RECT结构 |
posted @
2006-05-11 09:00 炙热的太阳 阅读(1980) |
评论 (4) |
编辑 收藏
Google又有新创意了(Google的每一款新产品都给我带来一些惊喜!),他的名字叫google网页设计工具(Google Page Create),当然这仍然是google工程师利用它们的20%时间开发的,它给人的感觉就像是google做的一个blog。反正大家自己去看看吧!
google黑白报上的内容:
我们的目标是设计出我们的朋友和家人都喜欢而且易用的产品,经过数月的努力,我们很高兴 Google Page Creator(Google 网页设计工具)正式加入 Google 实验室了。Google 实验室一向是 Google 科技试验的园地,里面有我们觉得激动人心、但可能还没完全成熟的产品。希望早期使用者给我们的产品提意见,帮助我们不断完善改进。
链接地址:Google Page Creator(Google 网页设计工具)。
posted @
2006-05-09 08:53 炙热的太阳 阅读(591) |
评论 (0) |
编辑 收藏
约瑟夫(josephus)环是这样的:假设有n个小孩坐成一个环,假如从第一个小孩开始数,如果数到m个小孩,则该小该离开,问最后留下的小孩是第几个小孩?例如:总共有6个小孩,围成一圈,从第一个小孩开始,每次数2个小孩,则游戏情况如下:
小孩序号:1,2,3,4,5,6
离开小孩序号:2,4,6,3,1
最后获胜小孩序号:5
这样的问题,我可以先考虑输入的内容有哪些?输出内容有哪些?
要求用户输入的内容有:
1、是小孩的个数,也就是n的值;
2、是离开小孩的间隔是多少?也就是m的值。
3、所有小孩的序号要求存在数组或者链表中,所以需要定义一个指针,这里我们用数组来存放小孩的序号。
而要求输出的内容是:
1、离开小孩的序号;
2、最后留下小孩的序号;
所以,根据上面分析输入输出参数,我们考虑离开小孩的序号可以直接输出,这样可以使函数的复杂性。那么函数定义如下:
//输入参数:
//Childs为指向一个整形指针,指向保存小孩数组的首地址;
//n为小孩的个数;
//m为数小孩的个数;
int Josephus(int *Child,int n,int m)
{
int i=-1,j=0,k=1;
//开始数小孩,只到留下一个小孩
while(1)
{
//数m个小孩
for(j=0;j<m;)
{
i=(i+1)%n; //取下标加1的模,当i的值在0到n-1之间循环
if(Child[i]!=-1) //小孩在环中则数数有效;
j++;
}
if(k==n) //如果k==n则表示,此时数组中只留下一个小孩,
break; //序号为Child[i]中的值,跳出循环;
cout<<Child[i]<<","; //输出离开小孩的序号;
Child[i]=-1; //离开的小孩用-1作标记
k=k+1;
}
cout<<endl;
return(Child[i]); //返回最获胜小孩的序号
}
完整的程序,在VC6中调试通过。
//-----------------------------------------------------------
#include<iostream.h>
int Josephus(int *Child,int n,int m);
void main()
{
int *allChild,j,k,l;
cin>>j>>k;
if((allChild= new int[j])!=NULL)
{
for(l=0;l<j;l++)
{
cout<<l+1<<",";
allChild[l]=l+1;
}
cout<<endl;
cout<<Josephus(allChild,j,k);
}
}
int Josephus(int *Child,int n,int m)
{
int i=-1,j=0,k=1;
while(1)
{
for(j=0;j<m;)
{
i=(i+1)%n;
if(Child[i]!=-1)
j++;
}
if(k==n)
break;
cout<<Child[i]<<",";
Child[i]=-1;
k=k+1;
}
cout<<endl;
return(Child[i]);
}
posted @
2006-04-29 09:30 炙热的太阳 阅读(550) |
评论 (0) |
编辑 收藏
今天跟单位的人出去到郊外玩了一天,紧张了几个星期的心情总算有一点放松,呵呵,过几天项目就要验收了,所以最近一直都在赶工作。玩了一天有点体会,那就是以后一定要加强体育锻炼,不能把身体搞垮了。
posted @
2006-04-09 20:36 炙热的太阳 阅读(256) |
评论 (0) |
编辑 收藏
毕业半年多了,写程序有半年了,今天突然间有点迷茫??我是不是要继续做程序?我是不是做程序的材料?一连串的问题向我逼来,搞得我一下午没有工作,于是乎上论坛,看大家讨论,思考问题........
莫非这就是人们所说的浮躁,我想可能是吧!人不免在某一件事上做久了,就会产生厌倦感,或者是一时间没有了方向,又或者是没有思想依靠,等等,如此之类。
咳!想发一下感慨,可是怎么也想不起来要怎么写,大学四年,文笔是彻底荒废了,现在想拾起来,可又吐不出什么东西来,有时间写上一大堆东西,回头再一看,自己都想反胃,于是随即删掉,到最后,还是没有写出一点像样的文章来。我比较喜欢林锐(大学十年的作者)的文风,风趣,洒脱又有内涵,我也一直想写他那样的文章来,好歹也算是给自己肯定一下。
算了,又忘词了,上面的已经是把肠子里的东西搅腾了好几遍,不想再折腾自己,就这样自己吧!继续学习C++,继续韩语学习,继续努力!
posted @
2006-03-22 20:08 炙热的太阳 阅读(235) |
评论 (0) |
编辑 收藏
摘要: 当SP端和ISMG端建立Connect连接后,我们就要开始发送短信了,而Submit操作的目的是SP在与ISMG建立应用层连接后向ISMG提交短信。ISMG以Submit_Resp消息响应。下面还是要看它的消息定义:字段名字节数属性描述Msg_Id8Unsigned Integer信息标识。Pk_total1Unsigned Integer相同Msg_Id的信息总条数,从1开始。Pk_number...
阅读全文
posted @
2006-03-20 20:43 炙热的太阳 阅读(1842) |
评论 (0) |
编辑 收藏
前一阵子,我一直想再学一门外语,但害怕学一门新的外语太难,所以就一直没有起步。在一次饭局上我听一个同事说,韩语很简单,一个星期基本上可以入门,很简单的一门语言,而且又是从中文演变过去的,对中国人来说是比较简单。加上最近中国盛行韩风,因此决定学习韩语。于是乎上书店买入门教程,上网上找资料,一个星期下来,嘿!发现韩语还真的挺简单的,挺适合我这种懒散的人学习。可惜,我没有下载朝鲜语插件,不然的我也用韩语写一篇blog!
posted @
2006-03-17 08:24 炙热的太阳 阅读(676) |
评论 (10) |
编辑 收藏
CMPP协议的全称是中国移动通信互联网短信网关接口协议,它是联想亚信公司根据SMMP协议为中国移动量身定做的,是符合中国国情的一个短信协议,闲话不多说了,说说CMPP的主要功能吧。(1)短信发送(short message mobile originate)MO,就是手机给SP发短信;(2)短信接受(short message mobile terminated)MT,这个就是SP给手机发的短信了,通常我们手机上收到的不良短信就是SP给我们的MT。CMPP协议的通信基础是TCP/IP为底层通信承载的,连接方式是长连接方式。SP与ISMG之间,SMSC和ISMG之间的交互过程中均采用异步方式,即任一个网元在收到请求消息后应立即回应。
下面看看它的消息定义:CMPP中的消息分为消息头和消息体。消息头定义如下
字段名 |
字节数 |
类型 |
描述 |
Total_Length |
4 |
Unsigned Integer |
消息总长度(含消息头及消息体) |
Command_Id |
4 |
Unsigned Integer |
命令或响应类型 |
Sequence_Id |
4 |
Unsigned Integer |
消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同) |
那么下面就是SP连接到ISMG上了,看它的Bind连接消息定义
字段名 |
字节数 |
属性 |
描述 |
Source_Addr |
6 |
Octet String |
源地址,此处为SP_Id,即SP的企业代码。 |
AuthenticatorSource |
16 |
Octet String |
用于鉴别源地址。其值通过单向MD5 hash计算得出,表示如下:
AuthenticatorSource =
MD5(Source_Addr+9 字节的0 +shared secret+timestamp)
Shared secret 由中国移动与源地址实体事先商定,timestamp格式为:MMDDHHMMSS,即月日时分秒,10位。 |
Version |
1 |
Unsigned Integer |
双方协商的版本号(高位4bit表示主版本号,低位4bit表示次版本号),对于3.0的版本,高4bit为3,低4位为0 |
Timestamp |
4 |
Unsigned Integer |
时间戳的明文,由客户端产生,格式为MMDDHHMMSS,即月日时分秒,10位数字的整型,右对齐 。 |
根据上的定义我们可以写出的代码,如下,在VC环境下编写的
/*
*函数功能:建立和CMPP网关的直接通路
*输入条件:SP用户名const char *UserName,SP密码const char *PWD
*/
void Ccmpp_API::CmppConnect(const char *UserName, const char *PWD)
{
char netbuf[100];
CMPP_CONNECT *bufer;
bufer=(CMPP_CONNECT*)netbuf;
memset(bufer, 0, 100);
bufer->nTotalLength = htonl(39);//CMPP_CONNECT消息总长度
bufer->nCommandId = htonl(CMPP_CONNECT_tag);//消息标志
//自动产生SeqId号
if (sequenceid == 123456789i32)
{
sequenceid = 1;
}else{
sequenceid++;
}
bufer->nSeqId = htonl(sequenceid);
int MD5Len;
MD5_CTX md5;//MD5源字串
CTime TimeData = CTime::GetCurrentTime();
CString timestamp = TimeData.Format("%m%d%H%M%S");
unsigned char md5source[29];
int Len1 = strlen(UserName);
int Len2 = strlen(PWD);
MD5Len = Len1 + 9 +Len2 + timestamp.GetLength();
memset(md5source, 0, MD5Len);
memcpy(bufer->sSourceAddr, UserName, Len1);
memcpy(md5source, UserName, Len1);
for (int j = 0; j<Len2; j++)
{
md5source[j + Len1 + 9] = PWD[j];
}
for (int i=0;i<timestamp.GetLength();i++)
{
md5source[i + Len2 + Len1 + 9]=timestamp[i];
}
//进行md5加密转换
md5.MD5Update(md5source, MD5Len);
md5.MD5Final(md5source);
memcpy(bufer->sAuthSource, md5source, 29);
bufer->cVersion = 0x30;
bufer->nTimeStamp = htonl(atoi(timestamp));
CmppSocket.Send(bufer, 39, 0);//把消息打包发送
return;
}
今天就到这,下次再写,欢迎交流!
posted @
2006-03-15 07:58 炙热的太阳 阅读(9472) |
评论 (8) |
编辑 收藏