m_hWnd

① m_hWnd这个成员变量,最早是定义在类CWnd中,而且是类CWnd的第一个数据成员,

先看一下MSDN的解析:

The handle of the Windows window attached to this CWnd. The m_hWnd data member is a

public variable of type HWND.

由此可知,它是窗口类的一个句柄,凡是从CWnd派生的类都有这个句柄,凡是以CWnd派

生的类定义的对象内部也都有这个句柄,它是类或者对象标识自己的句柄。

凡是窗口都有一个句柄用来标识自己,在CWnd类中将这个句柄作为一个成员变量直接封装

了,所以CWnd类的成员函数都没有句柄这个参数了,比如::ShowWindow(HWND hWnd),在

CWnd类或者派生类中,这个函数就没有参数了,CWnd::ShowWindow(),其实这个函数实

现很简单,就是调用了::ShowWindow(HWND hWnd),因为在类里已经封装好了,所以也不需

要在传递参数了。

② 哪如何获得窗口类的自己的句柄呢?有如下方法:

1、this->m_hWnd;

2、GetSafeHwnd();

3、AfxGetMainWnd()->m_hWnd;

this

① 对于类成员函数而言,并不是一个对象对应一个单独的成员函数体,而是此类的所有对

象共用这个成员函数体,即调用同一个代码段

当对一个对象调用非静态成员函数时,编译程序会自动先将对象的地址赋给成员函数的

this指针,即作为一个隐含参数传递给成员函数;然后每次非静态成员函数存取非静态数据

成员时,由隐含使用this指针,即都会被转化为this->数据成员的方式。

。当程序被编译之后,此成员函数地址即已确

定。而成员函数之所以能把属于此类的各个对象的数据区别开, 就是靠this指针,也就是对

于每一个类的非静态成员函数,都有一个隐含的this指针,该指针指向调用该成员函数的实

例对象。

② 一个对象的this指针并不是对象本身的一部分,不会影响sizeof("对象")的结果;它是一

个隐含于每一个类的成员函数中的特殊指针。它指向正在被该成员函数操作的那个对象。

③ 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;在X

类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对

象是不可修改的(即不能对这种对象的数据成员进行赋值操作);

④ 由于this并不是一个常规变量,所以,不能取得this的地址。

⑤显式引用this指针的地方:

1、在类的非静态成员函数中返回类对象本身的时候,直接使用

return *this;

2、为避免对同一对象进行赋值操作,例如在重载运算符"="时,如:

ClassText& operator = (const ClassText& instance)

{

if(this == &instance) {       return *this;

}

m_nSize = instance.m_nSize;

if(NULL != m_pBuffer) {

delete [] m_pBuffer;

}

m_pBuffer = new char[MAX_PATH];

if(NULL != m_pBuffer ) {

strncpy(m_pBuffer, instance.m_pBuffer, MAX_PATH);

}

return *this;

}

3、当形式参数与成员变量名相同时,如

this->n = n (不能写成n = n),否则无法实现对成员

变量的赋值操作;

当然了,对于静态成员的访问,就不需要通过this进行访问了,只要在函数名字前加上类

名限定符即可,这也就是为什么静态函数无法访问非静态成员了(没有对象指针,如何访问

其成员变量?),静态成员函数自然能访问静态成员变量。因些说:静态成员变量实际上就

是一种有访问限制的全局变量而已。从类的外部访问静态成员变量,前面需要加上类名限定

符。

this指针和m_hWnd的区别的更多相关文章

  1. C++ 中指针与引用的区别

    指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过v ...

  2. c语言 指针与地址的区别

    指针由两部分组成,指针的类型和指针的值(也就是变量的地址). 指针和地址的区别: 地址只是一堆十六进制的字符,对应着内存条的某段内存, 而指针本身有地址,指针的值也是一个地址,指针本身还有类型,这与单 ...

  3. 指针和引用的区别(c/c++)

      http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用 ...

  4. 转贴:C++中指针和引用的区别

    从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有 ...

  5. C程序设计语言--指针和引用的区别

    在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在&l ...

  6. 【C++】指针与引用的区别

    本文主要总结在C++中指针与引用的区别. 从定义与性质来看指针与引用有如下区别: 指针表示的是一块变量的地址 引用表示一个变量的别名. 因此指针变量需要占用空间(一个指针变量在32位系统下占用4字节, ...

  7. C语言中指针和数组的区别

    看<C专家编程>一书,看到数组与指针并不相同一章,遂做了一段测试: 代码: #include <stdio.h> #include <stdlib.h> int m ...

  8. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  9. C++指针和数组的区别(不能混用的情况)

    通常情况下,C++中指针和数组是可以混用的,但是,在编写字符数组的全排列的时候,混用却出了问题,因此,今天特地mark一下,以备日后查找 这里整理的,不包括用new开辟的动态数组 1.数组一旦声明,我 ...

随机推荐

  1. hdu 4939 Stupid Tower Defense ( dp )

    题目链接 题意:给出一条长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后的格子每秒造成y点伤害, 蓝塔可以使通过单位长度的时间增加z秒 ...

  2. hdu 3501 Calculation 2 (欧拉函数)

    题目 题意:求小于n并且 和n不互质的数的总和. 思路:求小于n并且与n互质的数的和为:n*phi[n]/2 . 若a和n互质,n-a必定也和n互质(a<n).也就是说num必定为偶数.其中互质 ...

  3. Android提供的LruCache类简介

    分类: Android开发 2013-02-06 15:26 26733人阅读 评论(10) 收藏 举报 package android.util; import import /** * A cac ...

  4. android中getSystemService详解

        android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监 听是否有SD卡安装及移除,ClipboardS ...

  5. UVA 10537 The Toll! Revisited uva1027 Toll(最短路+数学坑)

    前者之所以叫加强版,就是把uva1027改编了,附加上打印路径罢了. 03年的final题哦!!虽然是水题,但不是我这个只会做图论题的跛子能轻易尝试的——因为有个数学坑. 题意:运送x个货物从a-&g ...

  6. centos使用denyhosts的问题,会将自己的IP自动加到hosts.deny的解决办法。

    先吐槽, 很多网站\博客,技术文章也玩伪原创, 害人不浅. 全TMD是COPY, COPY, COPY过来. 拷过来就算了, 你TMD还改了其中的内容... 改成错的.然后众多网站转载, 将错进行到底 ...

  7. 01day1

    最大音量 动态规划 题意:给出一个初始值和一个变化序列 c,在第 i 步可以加上或减去 c[i],求 n 步之后能达到的最大值.有一个限定值 maxlevel,在变化过程中值不能超过 maxlevel ...

  8. 【Mysql】初学命令行指南

    MYSQL初学者使用指南与介绍 一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbi ...

  9. Oracle 课程九之绑定变量

    课程目标 完成本课程的学习后,您应该能够: •变量绑定的目的 •父子游标 •游标共享 •绑定窥探 •SQL语句处理流程 •硬解析.软解析.软软解析 •变量绑定的应用场景   1.游标 游标可以理解为S ...

  10. Android-根据ImageView的大小来压缩Bitmap,避免OOM

    本文转自:http://www.cnblogs.com/tianzhijiexian/p/4254110.html Bitmap是引起OOM的罪魁祸首之一,当我们从网络上下载图片的时候无法知道网络图片 ...