vc++深入详解学习-NO.5

MFC消息映射机制

  在每个能接受和处理消息的类中,定义一个消息和消息响应函数静态对照表,即消息映射表。在消息映射表中,消息与对应的消息处理函数指针是成对出现的。某个类能处理的所有消息及其对应的消息处理函数的地址都列在这个类所对应的静态表中。当有消息需要处理的时候,程序只要搜索该消息静态表,查看表中是个有该消息,就可以知道该类是否能够处理此消息。如果可以处理该消息,则同样可以从静态对照表找到消息处理函数!

 

============================

静态成员函数

     静态成员函数和静态成员变量属于类本身,在类加载的时候,即为他们分配了内存空间,所以可以通过类名::函数名来访问。而非静态成员函数和非静态成员变量属于具体对象的方法和数据,也就是应该首先产生该类的对象,然后通过类的对象去调用。

  在静态成员函数中,是不能调用非静态成员的,包括非静态成员函数和非静态成员变量!

  无论采取什么样的操作,程序代码是在内存中运行的,只有在内存中占有了一席之地,我们才能够访问它,如果一个成员函数或者成员变量还未在内存中产生,结果是无法访问它的!

  对于静态成员变量,必须对她进行初始化,并且应该在类的定义之外进行此操作!

 

===============================

  我们在窗口的客户区进行输出文字或者画图,都需要有一个DC,这样一个dc是微软为了简化程序员工作,避免程序员和输出设备驱动打交道定义的一个中间操作。有了这样一个dc我们就可以轻松的在窗口客户区进行输出操作。

   再获取DC后,使用完成结束的时候必须释放dc,否则会造成内存泄露。

==================================

  利用程序进行画线操作。

    首先需要画线我们需要知道两个点,即线的起点 和终点。有了这两个点我们可以利用微软sdk定义的两个函数 movetoex() 和lineto()进行画线操作。

那么这两个点怎么获取,在mfc中,在程序收到鼠标点击消息的时候即传递了鼠标坐标值的point类的对象,这样就是线的起点。终点就是鼠标按键弹起时候传递的point对象值。

mfc还为我们封装了关于dc的几个类,例cclient,cdc,cwindowdc。这样的类使用起来比较简单在构造对象完成之后即完成了dc的获取,当对象析构的时候释放dc,可以免去我们手动释放dc的操作,减少出错几率。另外还封装在这样的类中一些画线的函数,使用类对象的.操作符即可访问。

  

====================================

  

posted @ 2013-07-28 19:26  veonm  阅读(307)  评论(0编辑  收藏  举报