解析VC++6中的指针

原创 2003年06月30日 14:25:00

     摘要:指针,在VC++中是很常见的,这里我们并不打算去详细讲解在C++中那样的指针用法(我们会有另外的文章去详细讨论),这里主要讲一下VC++中常见的对指针获取的方法,包括:工具条、状态条、控件和窗口的指针。

     获取工具条的指针
     在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下:
     CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
     是不是很简单?
 
     获取状态条的指针
     在缺省状态下,有一个默认的状态条AFX_IDW_STATUS_BAR,我们自然也可以根据相应的ID去获取状态条指针,方法如下:
     CStatusBar* pToolBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
     是不是同样很简单?

    获取控件的指针
    这里有两种方法。
    一、调用CWnd: : GetDlgItem,获取一个CWnd*指针调用成员函数。例如,我们想获取CButton指针,方法如下:
    CButton* pButton=(CButton*) GetDlgItem (IDC_MYBUTTON);
    二、可以使用ClassWizard将控件和成员变量联系起来。在ClassWizard中简单地选择Member Variables标签,然后选择Add Variable …按钮。如果在对话资源编辑器中,按下Ctrl键并双击控件即可转到Add Member Variable对话。

    在文档类中调用视图类指针
   
我们可以利用文档类的成员函数GetFirstView()和GetNextView()遍历视图。

    在视图类中调用文档类
    其实,在视图类中有一个现成的成员函数供我们使用,那就是:GetDocument();利用它我们可以很容易的得到文档类指针,我们先看一下GetDocument()函数的实现:
    CColorButtonDoc* CColorButtonView::GetDocument()
   {
 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CColorButtonDoc)));
 return (CColorButtonDoc*)m_pDocument;
   }
   这里实际上是将m_pDocument强制转换成CColorButtonDoc*,也就是我们想要的。

   在框架类中调用文档类、视图类
  
这里我们可以利用GetActiveXXXXX()去掉用当前激活的文档和视图:
   CMyDoc*  pDoc=(CMyDoc*)GetActiveDocument();
   CMyView* pView=(CMyView*)GetActiveView();

   获得应用程序指针
   这个很简单,一句话搞定:
   CMyApp* pApp=(CMyApp*)AfxGetApp();

   获得主框架指针
  
在类CWinThread里面有一个公有的成员变量:CWnd* m_pMainWnd; 它存在的主要目的就是提供我们获得CWnd指针,我们可以利用它来达到我们的目的:
   CMainFrame* pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);
  
   通过鼠标获得子窗口指针
   这里我们要用到一个不太常用的函数:ChildWindowFromPoint。他的原型如下:
   CWnd* ChildWindowFromPoint(POINT point) const;
   CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const;
   这个函数用于确定包含指定点的子窗口,如果指定点在客户区之外,函数返回NULL;如果指定点在客户区内,但是不属于任何一个子窗口,函数返回该CWnd的指针;如果有多个子窗口包含指定点,则返回第一个子窗口的指针。不过,这里还要注意的是:该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。
   对于第二个参数nFlags有几个含义:
   CWP_ALL             file://不忽略任何子窗口
   CWP_SKIPNIVSIBLE    file://忽略不可见子窗口
   CWP_SKIPDISABLED    file://忽略禁止的子窗口
  CWP_SKIPRANSPARENT  file://忽略透明子窗口

C++函数指针数组的使用方法

2015-11-24 一、   缘起 什么情况下,想到将函数指针数组来的呢?是由于近期写的一个程序中,有一系列顺序化的函数,且这些函数的形式基本一致,需要对每一步的执行结果进行判断,是否执行成功,...
  • u011462318
  • u011462318
  • 2015年11月24日 20:30
  • 3821

VC++ CString 及char 指针的常见问题(转)

http://hi.baidu.com/jetqu2003/item/9d603989c35a0d53e63d199c CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的...
  • song121212
  • song121212
  • 2014年01月03日 17:03
  • 1299

VC++中list::list的使用方法总结

http://www.cnblogs.com/rushoooooo/archive/2011/09/03/2164623.html 本文主题        这几天在做图像处理方面的研究,其...
  • liups
  • liups
  • 2015年01月09日 19:45
  • 5354

解析VC++6中的指针&获得各种指针(应用程序&主框架&子窗口)

获取工具条的指针     在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下:      CToolBar* pToolBar=(CToo...
  • liyun422828
  • liyun422828
  • 2011年04月27日 21:22
  • 479

VC++ Watch窗口查看指针指向的数组

原文:http://blog.csdn.net/minidick/article/details/3763613假设int *block;在watch窗口查看block,看到的是block的地址用bl...
  • wag2765
  • wag2765
  • 2016年01月25日 16:41
  • 1089

VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法

(1)、引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF...
  • hlbwp
  • hlbwp
  • 2014年03月16日 11:05
  • 1128

C++下this指针实现机制分析(针对vc++ 6.0)

在C++编程中,this指针是经常需要用到,特别是形参与类结构成员具有相同名称时;我们都知道this是指向对象本身,那它是怎么实现呢? 先看一段源代码,如下: #include using...
  • smallmuou
  • smallmuou
  • 2011年10月17日 14:24
  • 1305

VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法

(1)、引入ADO类 1 2 3 #import "c:\program files\common files\system\ado\msado15.dll" ...
  • fengzhishang2019
  • fengzhishang2019
  • 2012年08月21日 11:43
  • 21785

VC++使用列表控件显示数据库中的数据(移动记录集指针遍历记录集)

1、创建一个基于对话框的MFC应用程序,命名为SeeData。 2、向资源视图中的主对话框中添加一个列表视图控件。ID默认。关联一个变量为m_grid。 3、在类视图中添加一个数据库连接类ADOC...
  • hushiwei1993
  • hushiwei1993
  • 2015年05月03日 09:11
  • 819

《深入详解VC++》第三者 74页关于this指针指向子类的问题

在第三章的74页中,有这样一行代码:pModuleState->m_pCurrentWinApp = this;作者说,根据C++继承性原理,这个this对象代表的是子类CTestApp实例化的一个对...
  • luoshao20120430
  • luoshao20120430
  • 2013年03月27日 13:11
  • 758
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析VC++6中的指针
举报原因:
原因补充:

(最多只允许输入30个字)