c++ 小记

1.     FreeLibrary 会释放dll中所申请的所有空间,当然是在使用双指针的情况下,使用双指针可以实现在dll或者函数中           申请空间。

2. cdc于hdc间的转化:    cdc到hdc :
hdc   =   cdc.GetSafeHdc();

cdc.m_hDC

hdc到cdc :
cdc.Attach(hdc);

cdc.FromHandle(hdc)

dc.FromHandle(hDC)产生一个dc,但是是临时的,mfc不保证系统在什么时候删除dc. 
dc.Attach(hDC)是永久的,直到这个dc的生命正常结束。

3. 关于memDC.CreateCompatibleDC(&cdc):

memDC.CreateCompatibleDC(&cdc);
bmp.CreateCompatibleBitmap(&cdc,rect.right, rect.bottom);
memDC.SelectObject(&bmp);  

......//画图操作  

//这样得到的位图的像素位数是由cdc决定的,不管你怎么画图,用多少位画图。

CBitmap *bmpCurr = memDC.GetCurrentBitmap();

//下面这样得到的像素位数一直是24位,这个是固定的。

memDC.GetPixel(int i,int j);

另外用HDC hdc = ::GetDC(0);可以得到屏幕的dc。


4. _T

_T("")是一个宏,定义于tchar.h下。他的作用是让你的程序支持Unicode编码,_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。L是表示字符串资源为Unicode的。比如:

  wchar_t Str[] = L"Hello World!";
  这个就是双子节存储字符了。

_T是一个适配的宏~,当#ifdef _UNICODE的时候,_T就是L。没有#ifdef _UNICODE的时候,_T就是ANSI的。处理LPTSTR或者LPCTSTR 的时候 ,不要用strlen ,而是要用_tcslen,否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。 T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定。
5.delete出错

int *a=new int[10];

......

delete []a;

----------------------------------------------------------

当后面delete []a;出现错误的情况大致有:

1.数组的首地址a被你有意无意更改了,如:a++之类的;

2.变量的作用域问题,如:你是在一个函数体中new的,却在另一个函数体中delete,这时的a变量已经失效了,这时delete会出现a为不认识的标识符的错误;

3.先前已经delete过一次了,不可以delete两次;

4.内存访问越界,VC分配内存,除了分配你需要的内存空间外还会分配一些管理单元,就在你分配空间的上界和下界,比如内存边界标志(0xFDFDFDFD),如果是数组在上界会记录数组元素的个数,你要是修改了这些管理信息,delete的时候就会报错。


6.操作符重装

并不是所有的操作符都能被重载。除了. ,.* ,:: ,? : ,sizeof,typeid这几个运算符不能被重载,其他运算符都能被重载


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值