对话框类.docx

上传人:b****8 文档编号:9315974 上传时间:2023-02-04 格式:DOCX 页数:35 大小:36.55KB
下载 相关 举报
对话框类.docx_第1页
第1页 / 共35页
对话框类.docx_第2页
第2页 / 共35页
对话框类.docx_第3页
第3页 / 共35页
对话框类.docx_第4页
第4页 / 共35页
对话框类.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

对话框类.docx

《对话框类.docx》由会员分享,可在线阅读,更多相关《对话框类.docx(35页珍藏版)》请在冰豆网上搜索。

对话框类.docx

对话框类

如何在对话框类内调用视图cview类中的函数和变量

SDI程序Dialog类中调用View中方法或修改View中的变量

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

CXXView*pView=(CXXView*)pMain->GetActiveView();

CXXDoc*pDoc=(CXXDoc*)pMain->GetActiveDocument();

在Dialog类中这样写会出现CXXViewUndeclareidentifier

如果把CXXView.h包含进来就会syntaxerror:

missing';'before'*'

指示为View类中这行有问题CXXDoc*GetDocument();

高手指点一下

*****

*****打开新Dialog类的头文件,在

#include"CXXView.h"这句之前,再加一句

#include"CXXDoc.h",记住是“之前”!

*****

*****有问题的话再反馈。

非常有效谢谢

求救VCSDI中如何在对话框类中调用view类方法

比如,点击视图上的按钮后弹出一个对话框,点击对话框中的一个按钮后改变视图中一个控件的文本

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

CT2View*pView=(CT2View*)pMain->GetActiveView();

CT2Doc*pDoc=(CT2Doc*)pMain->GetActiveDocumen();

VC6.0中如何在对话框中如何获得View类指针

vc中如何在其他类,或者对话框中获得View类指针,进而获得客户区CDC,这是在做图形处理中常遇到的问题。

下面将列出一个很简单的方法,获得相应的指针

假定项目名为FDSFrame,则代码如下。

CMainFrame*pFrame=(CMainFrame*)AfxGetMainWnd();   

CChildFrame*pChildFrame=(CChildFrame*)pFrame->GetActiveFrame();

CFDSFrameView*pView=(CFDSFrameView*)pChildFrame->GetActiveView();

CDC*pDC=pView->GetDC();

SDI探索中:

获得Mainframe和view的指针

CFrameWnd*pFrame=(CFrameWnd*)AfxGetApp()->m_pMainWnd;   

CMyView*pView=(CMy0View*)pFrame->GetActiveView();

 其中(CMy0View*)一定要加上,不然GetActiveView()只返回CView的指针了!

对话框程序中调用单文档视图的显示与交互

我在对话框程序中加入了三个单文档视图的文件用于调用,分别是 MainFrm.h  htmlExDoc.h  htmlExView.h

在对话框(CExamPaperToolDlg)中双击按钮后弹出视图,由于弹出的是非模态的,若不关闭视图再次点击按钮时则会出错

在OnInitDialog中初始化

C/C++code

?

1

2

3

4

5

6

7

8

9

10

11

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

    IDR_MAINFRAME,

    RUNTIME_CLASS(ChtmlExDoc),

    RUNTIME_CLASS(CMainFrame),       // main SDI frame window

    RUNTIME_CLASS(ChtmlExView));

if (!

pDocTemplate)

    return;

AfxGetApp()->AddDocTemplate(pDocTemplate);

在按钮按下时调用:

C/C++code

?

1

2

3

4

5

6

7

8

9

10

     CCommandLineInfo   cmdInfo; 

        AfxGetApp()->ParseCommandLine(cmdInfo);         

        if   (!

AfxGetApp()->ProcessShellCommand(cmdInfo)) 

                return; 

      

  

    // The one and only window has been initialized, so show and update it

    //AfxGetApp()->m_pMainWnd->ShowWindow(SW_HIDE);

    //AfxGetApp()->m_pMainWnd->UpdateWindow();

请问怎么解决视图未关闭再次点击出错的问题?

可以将视图弹出的方式变成模态的么

另外请问怎么调用视图类ChtmlExView中的方法?

OK了 我解决了

在sdi的view初始化的时候将view指针传递给主对话框,感谢大家的热心帮助

VC中如何使整个视图区填满一副位图呢?

BOOLCGraphicView:

:

OnEraseBkgnd(CDC*pDC)

{

CBitmapbitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

CDCdccom;

dccom.CreateCompatibleDC(pDC);

dccom.SelectObject(&bitmap);

CRectrect;

GetClientRect(&rect);

BITMAPbmp;

bitmap.GetBitmap(&bmp);

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dccom,0,0,bmp.bmWidth,bmp.bmHeight,

SRCCOPY);

return1;

}

在一个对话框类里面,如何调用FormView中的OnUpdate函数

在一个对话框类里面,怎么调用FormView中的OnUpdate函数啊?

还是用SendMessage啊?

谁有这样的例子分享一下啊!

------解决方案--------------------------------------------------------

把formview类的指针赋给对话框就行了,就是这么做:

假设是在FormView类里弹出对话框,那么在视类的弹出对话框函数里:

dialog1(自己定义的对话框类名)dd;

dd.m_FormView=this;

dd.DoModal();

在对话框头文件里:

form(你的视类全名)*m_FormView;

这样在对话框CPP文件里就可调用视类任何PUBLIC的函数和变量了,同样包括OnUpdate,就是这样:

m_FormView->OnUpdate();

在对话框中创设Formview后,不进入OnInitialUpdate

在对话框中创建Formview后,不进入OnInitialUpdate

我在CSDN资源下可编辑的CListCtrl

VC++写的功能非常强大的自定义列表控件(排序、背景、树状伸缩、在线编辑)源代码

他把这个CListCtrl同FormView结合起来实现的,就是CGfxListCtrl+CSuperGrid1View。

源代码在CSuperGrid1View:

:

OnInitialUpdate()中创建CGfxListCtrl的列表项。

因为源代码是结合框架使用的,框架创建CSuperGrid1View后会调用OnInitialUpdate。

我在自己的代码中,把CSuperGrid1View创建到一个对话框Mydialog中。

而我创建到对话框后,View相应区域是白色,没有列表项。

在OnInitialUpdate下断点发现没有进入。

需要如何处理才能使之执行。

我要在对话框中获得视图类的指针。

可在对话框中无法包含视图类的头文件。

这样编译会出错。

顺序问题,包含文件的顺序很重要,要看你其它的包含都有什么。

另外,可以这样:

AfxGetMainWnd()->GetActiveView();

如果不需要使用自定义的东西,就不用强制转换为xxview,直接用。

追问

头文件:

#include"MainFrm.h"

#include"MyDoc.h"

#include"MyView.h"

定义的视图类的指针。

cmyview*编译没定义。

CMainFrame*pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd;

CMyView*pView=(CMyView*)pMain->GetActiveView();

这是什么问题

你不写全了没法看。

给你个建议吧,看view类里面包含顺序怎么写,这里就怎么写。

看view类里面包含顺序怎么写,这里就怎么写

谢谢提醒,类试图下看东西的确有问题。

如何在对话框类内调用视图cview类中的函数和变量

你如果是想要从弹出对话框中访问主视的话可以这样来:

首先得到主窗口对象指针:

AfxGetApp()->m_pMainWnd或AfxGetApp()->AfxGetMainWnd();

然后用这个主窗口对象指针来得到视的对象指针:

单文档:

CFrameWnd:

GetActiveView( )。

这个是基于单文档的,多文档的大致差不多,不过要先获得活动窗口而已CFrame:

GetactiveFrame()

我在对话框类内编入了以下代码:

CFrameWnd *pFram=AfxGetApp()->m_pMainWnd;

CSmDataView *pView=(CSmDataView)pFram:

显示没有语法错误,但是当执行到调用该对象内的成员函数时,出现异常,好象与CView中的Getcount()函数有关,是怎么回事啊!

我要调用的函数内有调用文档CSmDataDoc类的对象和函数!

对话框如何引用视类成员函数

我创建了一个对话框,并将这个对话框停靠在窗口视图的右边方便操作,我想引用视类的成员函数,通过网上介绍的一些方法:

 m_pView = (CTView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView();获取视类对象,然后在引用成员函数,发现编译没错误,但点击对话框上控件时是出现应用程序错误的对话框,当注释引用的视类成员函数时,不会出现错误,想想问问各位大侠,究竟是什么原因啊,应该怎么处理?

对话框错误提示:

0x00416d9c指令引用0X00000394内存,该内存不能written

我在一个按钮控件的响应中加了:

 m_pView = (CTView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView();

 m_pView->m_pDIB=NULL;

m_pView为在对话框类增加的视类对象

到底该怎么办啊?

如何在对话框类中调用视图类中的函数

第一:

在对话框的源文件中加入两个头文件:

MyDoc.h和MyView.h,一定记住是Doc的头文件在前面;

第二:

然后加入CMyView*pMyView;

第三:

然后就可以调用pMyView->。

的函数了;;;

多文档视图中,对话框类调用文档类函数

多文档视图中。

假设文档类CMyDoc中定义了一个public成员变量number。

我在菜单栏里加入了一个调用非模式对话框的函数调用CMyDlg.现在我想在这个对话框中调用文档类里面的成员函数。

请问该如何实现呢!

可以采取下面的办法:

CFrameWnd   *pWnd   =   (CFrameWnd   *)AfxGetMainWnd();  

CView   *pView   =   pWnd->GetActiveView();   

CImageDoc   *pDoc   =   (CImageDoc   *)pView->GetDocument();

这样就获取了指向文档类的指针,可以操作文档了。

因为在视图类的头文件中有这样一句话CImageDoc* GetDocument();所以需要获取pview指针,即指向视类的指针,要想或者指向视类的指针就需要窗口类指针。

   方法2:

    CFrameWnd   *pWnd   =(CFrameWnd   *)AfxGetMainWnd();   

     CImageDoc   *pDoc=(CImageDoc   *)pWnd->GetActiveDocument();就这两行可以实现上面的功能。

一种MDI和SDI通用的办法:

 

CFrameWnd* pMainFrame=(CFrameWnd*)AfxGetMainWnd(); 

CFrameWnd* pActiveFrame=pMainFrame->GetActiveFrame(); 

CDocument* pActiveDocument=pActiveFrame->GetActiveDocument(); 

if(pActiveDocument) 

……………… 

}

对话框类获取视图类指针问题

我使用如下方法:

CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;   

CMyIEView *m_pView = (CMyIEView*)pFrame->GetActiveView(); 

 

但加入#include "MyIEView.h"后有三个错误

c:

\documents and settings\administrator\桌面\最新myie\myieview.h(21) :

 error C2143:

 syntax error :

 missing ';' before '*'

c:

\documents and settings\administrator\桌面\最新myie\myieview.h(21) :

 error C2501:

 'CMyIEDoc' :

 missing storage-class or type specifiers

c:

\documents and settings\administrator\桌面\最新myie\myieview.h(21) :

 error C2501:

 'GetDocument' :

 missing storage-class or type specifiers

即其CMyIEDoc* GetDocument()有错误

请问怎样解决?

答:

仔细查查是不是有重复#include的地方,我以前也遇到过,再编译一次有时就没错了,但我现在忘了当时是怎么解决的,困惑?

CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;

  

// Get the active MDI child window.

CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();

  

// or CMDIChildWnd *pChild = pFrame->MDIGetActive();

  

// Get the active view attached to the active MDI child

// window.

CMyView *pView = (CMyView *) pChild->GetActiveView();

#include "MyIEDoc.h"

#include "MyIEView.h"

注意顺序,或者前置声明。

#include "MyIEDoc.h" 

#include "MyIEView.h"  

或者加一句class CMyIEDoc;

SDI单文档工程中怎样通过对话框获取文档指针

CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);

C**Doc *pDoc = (C**Doc*)(pFrame->GetActiveDocument());

楼上正解,记得添加mainframe和view的头文件

也可以用AfxGetMainWnd()->GetActiveView()->GetDocument();

#include "MainFrm.h"

你的文档类CYourDoc

CYourDoc *pDoc = (CYourDoc*)(((CMainFrame*)(AfxGetMainWnd())->GetActiveView()->GetDocument();

2楼 正解 注意头文件包含就是了

MFC对话框添加视图怎么获取句柄

MFC对话框添加视图如何获取句柄!

我在对话框中按如下方式添加了一个从CVIEW继承的视图类

m_imageView=newCimageView();

//ASSERT(m_pView1!

=NULL);

if(!

(m_imageView)->Create(NULL,NULL,WS_CHILD,

CRect(rect.left+25,rect.top,rect.right,rect.bottom),this,NULL,NULL))

{

AfxMessageBox(_T("Createview1failed"));

returnTRUE;

}

m_imageView->ShowWindow(SW_SHOW);

m_imageView->OnInitialUpdate();

现在要想改类发送消息

 但m_imageView->m_hWnd句柄不对!

------解决方案--------------------------------------------------------

m_imageView->SendMessage。

也行啊

MFC中获取各种类(文档、视图、框架、应用程序)指针的方法

对于初学者来说,在MFC中获得各种类的指针是个障碍。

如:

要获得另一窗体视图类中的某控件指针,首先必须获得目标视图指针,然后再通过该视图指针用GetDlgItem函数才可获得控件指针。

 

 

只考虑文档、视图和框架窗口间的关系,常用的指针获取方法如下:

 

全局函数AfxGetApp可以得到CWinApp应用类指针

AfxGetApp()->m_pMainWnd为框架窗口指针

在框架窗口中:

CFrameWnd:

:

GetActiveDocument得到当前活动文档指针

在框架窗口中:

CFrameWnd:

:

GetActiveView得到当前活动视指针

在视中:

CView:

:

GetDocument得到对应的文档指针

在文档中:

CDocument:

:

GetFirstViewPosition,CDocument:

:

GetNextView用来遍历所有和文档关联的视。

在文档中:

CDocument:

:

GetDocTemplate得到文档模板指针

在多文档界面中:

CMDIFrameWnd:

:

MDIGetActive得到当前活动的MDI子窗口

 

 

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)从一个视图类取得另一视图类的指针

16)获取分割视图中各个视图的指针

 

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

其实这些内容基本上是每本VC学习工具书上必讲的内容,而且通过MSDN很多问题都能解决。

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

  一般我们使用的框架是VC提供的Wizard生成的MFCAppWizard(exe)框架,无论是多文档还是单文档,都存在指针获取和操作问题。

下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。

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

首先一般获得本类(视,文档,对话框都支持)实例指针this,用this的目的,主要可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。

 1)在View中获得Doc指针

  CYouSDIDoc*pDoc=GetDocument();

  一个视只能有一个文档。

 2)在App中获得MainFrame指针

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

  也可以:

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

 3)在View中获得MainFrame指针

  CMainFrame*pMain=(CmaimFrame*)AfxGetApp()->m_pMainWnd;

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

  CMainFrame*pMain=(CmaimFrame*)AfxGetApp()->m_pMainWnd;

  CyouView*pView=(CyouView*)pMain->GetActiveView();

5)获得当前文档指针

  CDocument*pCurrentDoc=(CFrameWnd*)m_pMainWnd->GetActiveDocument();

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

  CStatusBar*pStatusBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

  CToolBar*pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);

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

  (CMainFrame*)GetParent()->m_w

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

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1