对话框类.docx
《对话框类.docx》由会员分享,可在线阅读,更多相关《对话框类.docx(35页珍藏版)》请在冰豆网上搜索。
![对话框类.docx](https://file1.bdocx.com/fileroot1/2023-2/3/250bc570-050e-4af7-962b-b2ade8da363b/250bc570-050e-4af7-962b-b2ade8da363b1.gif)
对话框类
如何在对话框类内调用视图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