VC中各类的调用Word下载.docx

上传人:b****4 文档编号:8297570 上传时间:2023-05-10 格式:DOCX 页数:10 大小:21.99KB
下载 相关 举报
VC中各类的调用Word下载.docx_第1页
第1页 / 共10页
VC中各类的调用Word下载.docx_第2页
第2页 / 共10页
VC中各类的调用Word下载.docx_第3页
第3页 / 共10页
VC中各类的调用Word下载.docx_第4页
第4页 / 共10页
VC中各类的调用Word下载.docx_第5页
第5页 / 共10页
VC中各类的调用Word下载.docx_第6页
第6页 / 共10页
VC中各类的调用Word下载.docx_第7页
第7页 / 共10页
VC中各类的调用Word下载.docx_第8页
第8页 / 共10页
VC中各类的调用Word下载.docx_第9页
第9页 / 共10页
VC中各类的调用Word下载.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VC中各类的调用Word下载.docx

《VC中各类的调用Word下载.docx》由会员分享,可在线阅读,更多相关《VC中各类的调用Word下载.docx(10页珍藏版)》请在冰点文库上搜索。

VC中各类的调用Word下载.docx

while(pos!

=NULL)

{

 

pView=GetNextView(pos);

if(!

pView->

IsKindOf(pClass))

break;

}

AfxMessageBox("

ConntLocatetheView."

);

returnNULL;

returnpView;

}

使用如下:

CYourView*pView=(CYourView*)GetView(RUNTIME_CLASS(CYourView));

1、获取应用程序指针

CMyApp*pApp=(CMyApp*)AfxGetApp();

2、获取主框架指针

CWinApp中的公有成员变量m_pMainWnd就是主框架的指针

CMainFrame*pMainFrame=(CMainFrame*)(AfxGetApp()->

m_pMainWnd);

或者

3、获取菜单指针

CMenu*pMenu=AfxGetMainWnd()->

GetMenu();

4、获取工具栏、状态栏指针

主框架中可以直接使用m_wndToolBar、m_wndStatusBar

其他:

CToolBar*pToolBar=(CToolBar*)AfxGetMainWnd()->

GetDescendantWindow(AFX_IDW_TOOLBAR);

CStatusBar*pStatusBar=(CStatusBar*)AfxGetMainWnd()->

GetDescendantWindow(AFX_IDW_STATUS_BAR);

5、获取控件指针

先用GetDlgItem()再转换,如:

CButton*pButton=(CButton*)GetDlgItem(IDC_MYBUTTON);

6、获取文档、视图指针

7、文档、视图

8、文档模版、文档

从文档获取文档模版指针:

CDocTemplate*GetDocTemplate()const;

从文档模版获取文档指针:

viaualPOSITIONGetFirstDocPosition()const=0;

visualCDocument*GetNextDoc(POSITION&

rPos)const=0;

9、获取分割视图中各个视图的指针

主框架中定义:

CSplitterWndm_wndSplitter;

定义两个View类:

CView1、CView2

框架类中重载:

BOOLCMainFrame:

OnCreateClient(LPCREATESTRUCT,CCreateContext*pContext)

VERIFY(m_splitter.CreateStatic(this,2,1));

//分割成两行一列

VERIFY(m_splitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100),pContext));

VERIFY(m_splitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext));

returnTRUE;

获取分割视图指针

CView1*pView1=(CView1*)m_wndSplitter.GetPane(0,0);

CView2*pView2=(CView2*)m_wndSplitter.GetPane(1,0);

10、通过鼠标获得子窗口指针

CWnd*ChildWindowFromPoint(POINTpoint)const;

CWnd*ChildWindowFromPoint(POINTpoint,UINTnFlags)const;

用于确定包含指定点的子窗口

如果指定点在客户区之外,函数返回NULL;

如果指定点在客户区,但是不属于任何一个子窗口,函数返回该CWnd的指针;

如果有多个子窗口包含指定点,则返回第一个子窗口的指针。

还要注意的是,该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。

对于第二个参数nFlags有几个含义:

CWP_ALL 

file:

//不忽略任何子窗口

CWP_SKIPNIVSIBLE 

//忽略不可见子窗口

CWP_SKIPDISABLED 

//忽略禁止的子窗口

CWP_SKIPRANSPARENTfile:

//忽略透明子窗口

获取工具条的指针

在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下:

CToolBar*pToolBar=(CToolBar*)AfxGetMainWnd()->

是不是很简单?

获取状态条的指针

在缺省状态下,有一个默认的状态条AFX_IDW_STATUS_BAR,我们自然也可以根据相应的ID去获取状态条指针,方法如下:

CStatusBar*pToolBar=(CStatusBar*)AfxGetMainWnd()->

是不是同样很简单?

获取控件的指针

这里有两种方法。

一、调用CWnd:

:

GetDlgItem,获取一个CWnd*指针调用成员函数。

例如,我们想获取CButton指针,方法如下:

CButton*pButton=(CButton*)GetDlgItem(IDC_MYBUTTON);

二、可以使用ClassWizard将控件和成员变量联系起来。

在ClassWizard中简单地选择MemberVariables标签,然后选择AddVariable…按钮。

如果在对话资源编辑器中,按下Ctrl键并双击控件即可转到AddMemberVariable对话。

在文档类中调用视图类指针

我们可以利用文档类的成员函数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()->

通过鼠标获得子窗口指针

这里我们要用到一个不太常用的函数:

ChildWindowFromPoint。

他的原型如下:

CWnd*ChildWindowFromPoint(POINTpoint)const;

CWnd*ChildWindowFromPoint(POINTpoint,UINTnFlags)const;

这个函数用于确定包含指定点的子窗口,如果指定点在客户区之外,函数返回NULL;

如果指定点在客户区,但是不属于任何一个子窗口,函数返回该CWnd的指针;

如果有多个子窗口包含指定点,则返回第一个子窗口的指针。

不过,这里还要注意的是:

该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。

对于第二个参数nFlags有几个含义:

CWP_ALL 

file:

CWP_SKIPNIVSIBLE 

CWP_SKIPDISABLED 

 CWP_SKIPRANSPARENT 

//忽略透明子窗口

在何时何地,你都可以通过以下方法精确的得到任何一个对象(Application,DocTemplate,Document,View,Frame)

1。

通过AfxGetApp()得到当前的App对象;

2。

通过AfxGetMainWnd()得到主窗口;

3。

通过CMDIFrameWnd:

GetActiveFrame得到当前活动窗口;

4。

通过GetNextWindow()遍例所有的子窗口;

(如果要得到你想要的子窗口,可以通过特定的成员变量来标志);

5。

通过CWinApp:

GetFirstDocTemplatePostion()以及CWinApp:

GetNextDocTemplate()的组合应用来遍历所有的DocTemplate对象,并且用CDocTemplate:

GetDocString()来判断当前得到的文档莫板对象是哪个。

6。

通过CDocTemplate:

GetFirstDocPosition()以及CDocTemplate的GetNextDoc()组合来遍历所有的该模板的文档对象,并用CDocument:

GetDocTemplate()来得到文档模板,用CDocment:

GetTitle()或者GetPathName()来判断当前的文档是哪个。

7。

通过CDocuemt的GetFirstViewPositon()以及GetNextView()来遍历视图对象,一般通过访问View的成员变量来区别各个视图;

通过CView:

GetDocument()来得到文档对象;

8。

Frame->

View:

通过GetActiveView方法;

9。

Doc:

通过GetActiveDocument();

10。

View->

Frame:

GetParentFrame();

11。

View->

Doc:

GetDocuemt()//前面已经说了。

12。

Doc->

View:

前面说了;

13。

Doc->

Frame:

不知道有没有很直接的方法。

MFC应用程序中指针的使用

1)在View中获得Doc指针

2)在App中获得MainFrame指针

3)在View中获得MainFrame指针

4)获得View(已建立)指针

5)获得当前文档指针

6)获得状态栏与工具栏指针

7)获得状态栏与工具栏变量

8)在Mainframe获得菜单指针

9)在任何类中获得应用程序类

10)从文档类取得视图类的指针

(1)

11)在App中获得文档模板指针

12)从文档模板获得文档类指针

13)在文档类中获得文档模板指针

14)从文档类取得视图类的指针

(2)

15)从一个视图类取得另一视图类的指针

VC中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与

操作。

其实这些容基本上是每本VC学习工具书上必讲的容,而且通过MSDN很多

问题都能解决。

下面文字主要是个人在编程中指针使用的一些体会,说的不当的地

方请指正。

一般我们使用的框架是VC提供的Wizard生成的MFCAppWizard(exe)框架,

无论是多文档还是单文档,都存在指针获取和操作问题。

下面这节容主要是一般

的框架,然后再讲多线程中的指针使用。

使用到的类需要包含响应的头文件。

首先

一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通

过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的

功能。

1)在View中获得Doc指针CYouSDIDoc*pDoc=GetDocument();

一个视只能有一个文

档。

CWinApp中的m_pMainWnd变量就是MainFrame的指针

也可以:

CMainFrame*pMain=(CMainFrame*)AfxGetMainWnd();

3)在View中获得MainFrame指针CMainFrame*pMain=(CmaimFrame*)AfxGetApp()->

m_pMainWnd;

4)获得View(已建立)指针CMainFrame*pMain=(CmaimFrame*)AfxGetApp()->

CyouView*pView=(CyouView*)pMain->

5)获得当前文档指针CDocument*pCurrentDoc=(CFrameWnd*)m_pMainWnd->

6)获得状态栏与工具栏指针CStatusBar*pStatusBar=(CStatusBar*)AfxGetMainWnd()->

CToolBar*pToolBar=(CtoolBar*)AfxGetMainWnd()->

7)如果框架中加入工具栏和状态栏变量还可以这样

(CMainFrame*)GetParent()->

m_wndToolBar;

m_wndStatusBar;

8)在Mainframe获得菜单指针CMenu*pMenu=m_pMainWnd->

用MFC全局函数AfxGetApp()获得。

10)从文档类取得视图类的指针

我是从download.cqcnc./soft/program/article/vc/vc405.html学到的,

从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会

特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。

CDocument类提供了两个函数用于视图类的定位:

GetFirstViewPosition()和GetNextView()

注意:

GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。

GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一

个POSITION类型值),GetNextView()有两个功能:

返回下一个视图类的指针以及用

引用调用的方式来改变传入的POSITION类型参数的值。

很明显,在Test程序中,只有

一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定

义一个POSITION结构变量来辅助操作):

CTestView*pTestView;

POSITIONpos=GetFirstViewPosition();

pTestView=GetNextView(pos);

这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没

有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不

具有太强的通用性和安全特征;

当象前面说的那样,当要在多个视图为中返回某个指

定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。

判断一个类指针指

向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如:

IsKindOf(RUNTIME_CLASS(CTestView));

即可检查pView所指是否是CTestView类。

有了以上基础,我们已经可以从文档类取得任何类的指针。

为了方便,我们将其作

为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。

实现如下:

CView*CTestDoc:

CView*pView;

while(pos!

=NULL){

pView=GetNextView(pos);

if(!

break;

IsKindOf(pClass)){

AfxMessageBox("

ConntLocatetheView.\r\n.VCKBA

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2