MFC中常用类,宏,函数介绍

来源:互联网 发布:sqlplus执行sql脚本 编辑:程序博客网 时间:2024/06/04 18:11

MFC中常用类,宏,函数介绍

常用类

CRect:用来表示矩形的类,拥有四个成员变量:top left bottom right。分别表是左上角和右下角的坐标。可以通过以下的方法构造:

CRect( int l, int t, int r, int b ); 指明四个坐标

CRect( const RECT& srcRect ); RECT结构构造

CRect( LPCRECT lpSrcRect ); RECT结构构造

CRect( POINT point, SIZE size ); 有左上角坐标和尺寸构造

CRect( POINT topLeft, POINT bottomRight ); 有两点坐标构造

下面介绍几个成员函数:

int Width( ) const; 得到宽度
int Height( ) const;
得到高度

CSize Size( ) const;
得到尺寸

CPoint& TopLeft( );
得到左上角坐标

CPoint& BottomRight( );
得到右下角坐标

CPoint CenterPoint( ) const;
得当中心坐标

此外矩形可以和点(CPoint)相加进行位移,和另一个矩形相加得到操作后的矩形。

CPoint:用来表示一个点的坐标,有两个成员变量:x y。 可以和另一个点相加。

CString:用来表示可变长度的字符串。使用CString可不指明内存大小,CString会根据需要自行分配。下面介绍几个成员函数:

GetLength 得到字符串长度
GetAt
得到指定位置处的字符

operator +
相当于
strcat
void Format( LPCTSTR lpszFormat, ... );
相当于
sprintf
Find
查找指定字符,字符串

Compare
比较

CompareNoCase
不区分大小写比较

MakeUpper
改为小写

MakeLower
改为大写

CStringArray:用来表示可变长度的字符串数组。数组中每一个元素为CString对象的实例。下面介绍几个成员函数:

Add 增加CString
RemoveAt
删除指定位置CString对象

RemoveAll
删除数组中所有CString对象

GetAt
得到指定位置的CString对象

SetAt
修改指定位置的CString对象

InsertAt
在某一位置插入CString对象

常用宏

RGB

TRACE

ASSERT

VERIFY


常用函数

CWindApp* AfxGetApp();

HINSTANCE AfxGetInstanceHandle( );

HINSTANCE AfxGetResourceHandle( );

int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );用于弹出一个消息框

 

 

 

 

一个有趣的c程序     

 #include

main(int _){

    char*x="*b#**000**I#*******2*0***#-.****5.*-#-.****54.#*******2**6#****00**0.#";

    while(_=*x/4)

    {

       _-=8;

       printf("/n%*s"+!!_,_+_,"_/_/_/"+*x++%4*2);

    }                     

}

 

首先来看看main函数参数,这个参数的名称比较奇怪”_”,我们看着有些不习惯,但它确实是合法的变量名称。另外,本来我们常见的main函数一般都不带参数,如果有参数是因为程序希望处理命令行格式下运行这个程序所需要的参数,一般是这样的:main(int argc, char **argv),第一个参数argc表示参数表中参数的个数,argc是一个char型二维数组,保存着参数字符串。举个例子,如果我们在命令行下输入命令:dir –s c:/

此时,argc的值为3(包括命令本身),argv[0]指向字符串:dirarg[1] 指向字符串:-sarg[2]指向字符串c:/。那么既然main函数的参数通常要不没有,要不就是两个,而这个程序只有一个,这样做是否合法呢?答案是肯定的!我在《关于C语言中的变量》中提到过,函数中的参数是保存在堆栈中的,所以这就涉及到一个谁来平衡堆栈的问题,是调用者还是被调用者。在使用VC6编译器的时候,如果函数没有特别的声明,默认是调用者清理堆栈。换句话说,运行时库(runtime)调用main函数的时候,只传递一个参数给main函数,这一点它自己是知道的,当main函数调用结束以后,它在平衡堆栈的时候,只清除掉一个函数,因此不会出现任何问题。

 

我们接着往下看,下面定义了一个char型指针变量x,指向一个字符串。接下来是while语句,while(_=(*x)/4),但表达式_=(*x)/4的值不为0的时候就执行while的循环体,然而表达式_=(*x)/4是一个赋值语句,它的值又是多少呢?在这种情况下,通常赋值号右面的表达式的值就是整个表达式的值。第一次执行这个语句的时候,x指向字符’*’,对应的值为42,以此类推,当x=0时,也就是字符串结束的时候,循环结束。

 

接下来在原来的程序中是:_-=8,printf("/n%*s"+!!_,_+_,"_/_/_/"+*x++%4*2);这里的逗号作用有些类似分号,但是逗号两侧组成的是一条语句,而分号则是两条语句。

我们仔细看printf这条语句,它的格式字符串为:”/n%*s”,其中%*s很少见,很多人不知道这是什么格式,不过我们可以在MSDN中找到这样的描述:

If the width specification is an asterisk (*), an int argument from the argument list supplies the value. The width argument must precede the value being formatted in the argument list.

意思是说如果宽度用星号(*)来指定,则应该在参数列表中提供一个int型参数作为宽度的值。这样就清楚了,原来这个printf语句是用表达式_+_来控制字符串”%*s”的宽度,也就是替换其中的(*)。

在仔细一看,原来格式字符串还没有完!完整的应该是:"/n%*s"+!!_。这就奇怪了,字符串怎么和!!_相加呢?其实也不奇怪,在这里!!_是对变量_作了两次“非”的操作,结果应该是01。要明确的是,字符串作为参数传递给函数的时候,只是把字符串的首地址传递给了函数,所以字符串"/n%*s"的首地址就是字符’/n’的地址,当这个地址加1的时候,传递给printf函数的格式字符串就变成了"%*s",所以这个+!!_的奥妙就在于控制换行!是不是很有创意?

当然了,下面的代码同样有创意,就是printf语句要打印的字符串参数:"_/_/_/"+*x++%4*2。经过刚才的分析,我们不难理解"_/_/_/"加上后面的表达式的用意了,同样是控制输出字符的个数,是一个”_/”,两个,还是三个。那么关键就是后面这个表达式了:*x++%4*2。其实慢慢的分析也不困难,先执行*x%4*2,然后执行x++。所以,当在执行while语句的时候,x会指向下一个字符!

 

综上所述,这个小程序就是利用一个字符串来控制输出的例子,里面运用了很多技巧,对于初学者需要很好的理解,对今后的编程是很有帮助的!

/////////////////////////////////                                             

我说的简单,其实我提到的每本书至少都够你研究很长时间的,所以希望初学者别着急不骄不躁,相信只要努力过,一定会成为高手的。
在写代码的时候大家要注意养成好的代码习惯和风格还有抽象能力。
下面给出大家在写代码的时候的20字方针:
       函数要小。
       尽量的把函数弄的通用点,代码行少点,一个函数只完成一个简单的功能,一眼就能看出来此函数有没有代码错误,每个函数都是健壮的,那么你的程序就是健壮的。
    代码要少 完成一个功能的时候在逻辑清楚的情况下代码越少越好,千万不要比代码谁写的多啊。
    算法要好 在完成一个功能的时候要考虑效率,目前计算机的内存很大,所以内存已经不是首要考虑的因素了,但是在某些特殊的地方效率还是很重要的。有效率高的算法,就不用效率低的算法,看看本版有一篇精华贴子是关于把一个字符窜两边的空格去掉的帖子(trim),很多人都提出了算法,但是有一个算法是最好的,效率最高,代码最少,是算法要好的最好体现。
    命名要清 命名要清楚,最要用汉语中的谓宾结构如set_buffsize()
文件要多 尽量把一个大的程序安功能分成多个文件,一个文件尽量不要超作1000行,这样就很清楚的知道那个文件代码是健壮的,那个文件有可能有隐患,在代码检查的时候可以有针对性的检查某几个文件。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电热水器烧热水时热水管漏水怎么办 户户通位置锁定模块异常1怎么办 户户通位置锁定模块异常3怎么办 逆战安全系统检测客户端异常怎么办 电视户户通位置信息模块异常怎么办 苹果手机wi-fi模块坏了怎么办 xp本地连接受限制或无连接怎么办 公司没帮二级建造师延续注册怎么办 考造价师考过了年限不够怎么办? 上海众非称重不显示数字怎么办 宝骏630防火墙隔热棉掉了怎么办 冷车启动水温报警灯亮了怎么办 租铺位面积比合同面积小怎么办 农村村民建房领居不肯签名怎么办 车祸死者家属不来协商赔偿怎么办 26岁想回去当老师了怎么办 面包车排量小空调带不凉快怎么办 科三包过不给退钱人跑了怎么办 护师职称考试成绩单丢了怎么办 河南二级建造师报名地址填错怎么办 山东以前的企业没有消防备案怎么办 重庆渝北初级审核时间过了怎么办 初级职称复核毕业证弄丢了怎么办 杭州公租房选房后变更单位的怎么办 契税交了贷款办不下来怎么办 天津公租房住满5年后怎么办 大江里钓鱼水流太急立不住漂怎么办 房子定金交了不想要了怎么办 房子付了首付不想要了怎么办 三国大时代4王越死了任务怎么办 红米2卡顿反应慢怎么办 国税和地税合并新进的公务员怎么办 买车合格证不给我们要怎么办 初级会计报名信息表填写错误怎么办 跨国快递需要收件人自行清关怎么办 腋下有异味怎么办邀约成都真愛 腋下有异味怎么办犀利成都真愛 腋下有异味怎么办有信成都真愛 成都车牌网上选号次数用完了怎么办 在志愿服务中遇到突发状况怎么办 商铺没有房产证不能办理消防怎么办