2012.11.15

1.鼠标是否在对话框内的判断

一个对话框有一个区域,也就是一个rect,若鼠标的坐标在这个rect内,则判断鼠标在对话框内,否则不在。在我们游戏里面,这个rect是根据对话框的背景图生成,所以如果控件在背景图之外了,点击这个控件可能会没反应,因为系统判断你的鼠标根本不在这个对话框内,所以点击消息也不会发送这个对话框的相应函数中。这个时候的办法一般是,重载对话框类的OnHitTest(Point ptMouse)函数,在里面使用对话框的真正区域大小,而不是由背景图算得的区域大小,这样就可以正确地判断鼠标是否在对话框内了。


2.虚表指针

对于单继承体系,虚表指针出现在第一个含有虚函数的类的数据段里面,它的子类对象在初始化时,会把自己类型相应的虚表地址填到这个指针字段里面,而这个类在初始化时,是不会填这个字段的。


3.变长结构体

struct S
{
    int i;
    int a[0];
};
sizeof(S)等于4,即sizeof(int),S一般用在堆上,因为它的意义就是大小不定:

S* p = (S*)new char[sizeof(S) + length*sizeof(int)];

其中length为变长部分的长度。

使用则是这样

p->a[2] = 2;

S的对象中并没有存储a的字段,a的值等于S对象在内存中占的最后一个字节的下一字节。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值