如何在对话框中显示视图,最好能有代码,多谢。 你的视GetDocument返回什么?没有文档为什么要用视呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也想要我也需要在一个对话款中显示视图,因为在对话框上显示比较直观[email protected] http://www.codeproject.com/docview/dfv.asp上面的例子就是往dialog中加视图 右两种方法实现。一种是直接在对话框中创建视图。还有一种是用子类化。先谈第一种:先在对话框中定义自己的视图对象MyView *m_pView;在对话框的CPP中CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) //构造函数{ m_pView = NULL;}void CAboutDlg::OnDestroy() { if(m_pView) { m_pView->DestroyWindow(); delete m_pView; } CDialog::OnDestroy();}BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); CRect rect; GetClientRect(&rect); if(!m_pView) { m_pView = new MyView; m_pView->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rect,this,AFX_IDW_PANE_LAST); } return TRUE;}用这种方法需要重载视图类的PostNcDestroy和OnMouseActivate两个函数void MyView::PostNcDestroy() {}int MyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message) { return MA_NOACTIVATE;}第二重方法是子类化:在对话框上放一个简单空间比如RECTANGLE,然后在对话框重定义视图的对象 MyView *m_pView;在对话框的CPP中CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){ m_pView = NULL;}BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); if(!m_pView) { m_pView = new MyView; m_pView->SubclassDlgItem(IDC_STATIC1,this); } return TRUE;}void CAboutDlg::OnDestroy() { if(m_pView) { m_pView->UnsubclassWindow(); delete m_pView; } CDialog::OnDestroy();}在视图中重载OnEraseBkgnd函数BOOL MyView::OnEraseBkgnd(CDC* pDC) { CRect rect; CBrush Brush(RGB(255,255,255)); GetClientRect(&rect); pDC->FillRect(&rect,&Brush); return TRUE;} 这个问题我曾经请教过,这是别人给的代码,很好用的。OnInitDialog(){ CCreateContext ctx1; ctx1.m_pCurrentDoc = NULL; ctx1.m_pCurrentFrame = NULL; ctx1.m_pLastView = NULL; ctx1.m_pNewDocTemplate = NULL; ctx1.m_pNewViewClass = RUNTIME_CLASS(threadview2); threadview2 *m_pview = (threadview2 *)((CFrameWnd *)this)->CreateView(&ctx1); CRect rectClient; GetDlgItem(IDC_STATIC22)->GetClientRect(rectClient); GetDlgItem(IDC_STATIC22)->MapWindowPoints(this, rectClient); rectClient.DeflateRect(0,0); m_pview->MoveWindow(rectClient); m_pview->UpdateWindow();} threadview2是你自己添加的视类,IDC_STATIC22是对话框上静态的文本,它的区域就是视图区的大小。 To ky640(exec): 我只不过想用封装好的众多视图类而已。它们并不是只可以用在D/V结构中的。 如何写出这样的函数 读取bmp文件的问题 求算法 ,有10000个模式,在一个长度大约为10000字的文本里,进行查找替换 VC怎么实现光驱的打开和关闭? return (void**)((BYTE*)p + m_nNextOffset); 问题 网线和交叉线区别啥? 请高手指点使用USB接口IC卡读卡器的API 文件发送出错 请教高人关于gzip和zlib的问题 sendto()问题 求教:如何用VC做一个体温曲线图。 帮帮我吧,我快要失去对VC++de 信心了!!
我也需要在一个对话款中显示视图,因为在对话框上显示比较直观
[email protected]
上面的例子就是往dialog中加视图
一种是直接在对话框中创建视图。
还有一种是用子类化。先谈第一种:
先在对话框中定义自己的视图对象
MyView *m_pView;
在对话框的CPP中
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) //构造函数
{
m_pView = NULL;
}
void CAboutDlg::OnDestroy()
{
if(m_pView)
{
m_pView->DestroyWindow();
delete m_pView;
}
CDialog::OnDestroy();
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog(); CRect rect;
GetClientRect(&rect);
if(!m_pView)
{
m_pView = new MyView;
m_pView->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,rect,this,AFX_IDW_PANE_LAST);
}
return TRUE;
}
用这种方法需要重载视图类的PostNcDestroy和OnMouseActivate两个函数
void MyView::PostNcDestroy()
{
}
int MyView::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
return MA_NOACTIVATE;
}第二重方法是子类化:
在对话框上放一个简单空间比如RECTANGLE,然后在对话框重定义视图的对象
MyView *m_pView;
在对话框的CPP中
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
m_pView = NULL;
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
if(!m_pView)
{
m_pView = new MyView;
m_pView->SubclassDlgItem(IDC_STATIC1,this);
}
return TRUE;
}
void CAboutDlg::OnDestroy()
{
if(m_pView)
{
m_pView->UnsubclassWindow();
delete m_pView;
}
CDialog::OnDestroy();
}
在视图中重载OnEraseBkgnd函数
BOOL MyView::OnEraseBkgnd(CDC* pDC)
{
CRect rect;
CBrush Brush(RGB(255,255,255));
GetClientRect(&rect);
pDC->FillRect(&rect,&Brush);
return TRUE;
}
OnInitDialog()
{
CCreateContext ctx1;
ctx1.m_pCurrentDoc = NULL;
ctx1.m_pCurrentFrame = NULL;
ctx1.m_pLastView = NULL;
ctx1.m_pNewDocTemplate = NULL;
ctx1.m_pNewViewClass = RUNTIME_CLASS(threadview2);
threadview2 *m_pview = (threadview2 *)((CFrameWnd *)this)->CreateView(&ctx1);
CRect rectClient;
GetDlgItem(IDC_STATIC22)->GetClientRect(rectClient);
GetDlgItem(IDC_STATIC22)->MapWindowPoints(this, rectClient);
rectClient.DeflateRect(0,0);
m_pview->MoveWindow(rectClient);
m_pview->UpdateWindow();
}
IDC_STATIC22是对话框上静态的文本,它的区域就是视图区的大小。
我只不过想用封装好的众多视图类而已。它们并不是只可以用在D/V结构中的。