如何在mfc的mfc单文档档里的CMy1VIEW类定义

一种风,只流浪在一座山谷;一道堤,只护住一湾星河.每次仰望星空,我总是闭上眼,因为最美的一颗不在天上.
用MFC开发一个软件界面中需要拆分多个试图窗口时,使用CSplitterWnd类
&CSplitterWnd类主要用在创建一个拆分试图窗口。通常嵌入在框架窗口中(CMainFrame)
创建步骤:
  1.在框架类(CMainFrame)中定义一个CSplitterWnd成员;
  2.重载父框架类中CFrameWnd::OnCreateClient函数;
  3.在OnCreateClient()函数中调用CSplitterWnd类的Create或CreateStatic()函数;
CSplitterWnd m_wndS
BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT lpcs,
CCreateContext* pContext)
  BOOL bCreateSpltr = m_wndSplitter.CreateStatic( this, 2, 1);
  // COneView and CAnotherView are user-defined views derived from CMDIView
  m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(COneView), CSize(0,0),
   pContext);
  m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CAnotherView), CSize(0,0),
  pContext);
  return (bCreateSpltr);
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
// TODO: Add your specialized code here and/or call the base class
  if (!m_wndSplitter.CreateStatic(this, 1, 2))
   return FALSE;
  if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(160, 200), pContext) ||
   !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CTestView), CSize(100, 200), pContext))
     m_wndSplitter.DestroyWindow();
    return FALSE;
  return TRUE;
在创建了多个窗口之后,有时为了能够得到其中的某个窗口,进而对其进行操作控制,则:
不能简单使用GetActiveView,可从MainFrame的CSplitterWnd成员得到,如下
CMainFrame* pMF=(CMainFrame*)AfxGetApp()-&m_pMainWCViewRes* pViewRes=(CViewRes*)pMF-&m_wndSplitter.GetPane(0,1);
注意:1, 使用CMainFrame,要在调用的cpp文件中包含MainFrame.h   2, 注意在CMainFrame中,m_wndSplitter变量的类型,若定义为protected或private则可能导致不可引用等错误&
   3, 具体的使用有待测试  
相关示例源码链接: /s/1c0yAbeS 密码: iq8j
阅读(...) 评论()
什么是幸福?天天在做自己想做的事情,家人、同事、朋友、客户、网友都和和睦睦,身体健康、钱包鼓鼓、女朋友天天开心、生活无忧无虑就是最大的幸福&1、获取应用程序指针
  CMyApp* pApp=(CMyApp*)AfxGetApp();
  2、获取主框架指针
  CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针
  CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()-&m_pMainWnd);
  CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
  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、获取文档、视图指针
  CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
  CYourDoc* pDoc = (CYourDoc*)pMainFrame-&GetActiveDocument();
  CYourView* pView = (CYourView*)pMainFrame-&GetActiveView();
  CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
  CChildFrame* pChildFrame = (CChildFrame*)pMainFrame-&GetActiveFrame();
  CYourDoc* pDoc = (CYourDoc*)pChildFrame-&GetActiveDocument();
  CYourView* pView = (CYourView*)pChildFrame-&GetActiveView();
  7、文档、视图
  从视图获取文档指针:
  CYourDoc* pDoc = GetDocument();
  从文档获取视图指针:
  利用成员函数 GetFirstViewPosition() 和 GetNextView() 遍历
  virtual POSITION GetFirstViewPosition()
  virtual CView* GetNextView(POSITION& rPosition)
  CYourView* pV
  POSITION pos = GetFirstViewPosition();
  pView = GetNextView(pos);
  定义函数
  CView* CYourDoc::GetView(CRuntimeClass* pClass)
  CView* pV
  POSITION pos=GetFirstViewPosition();
  while(pos!=NULL)
  pView=GetNextView(pos);
  if(!pView-&IsKindOf(pClass))
  if(!pView-&IsKindOf(pClass))
  AfxMessageBox("Connt Locate the View.");
  return NULL;
  return pV
  使用如下:
  CYourView* pView=(CYourView*)GetView(RUNTIME_CLASS(CYourView));
8、文档模版、文档
  从文档获取文档模版指针:
  CDocTemplate* GetDocTemplate()
  从文档模版获取文档指针:
  viaual POSITION GetFirstDocPosition( ) const = 0;
  visual CDocument* GetNextDoc(POSITION & rPos) const = 0;
  9、获取分割视图中各个视图的指针
  主框架中定义:CSplitterWnd m_wndS
  定义两个View类:CView1、CView2
  框架类中重载:
  BOOL CMainFrame::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));
  return TRUE;
  获取分割视图指针
  CView1* pView1 = (CView1*)m_wndSplitter.GetPane(0,0);
  CView2* pView2 = (CView2*)m_wndSplitter.GetPane(1,0);
  10、通过鼠标获得子窗口指针
  CWnd* ChildWindowFromPoint(POINT point)
  CWnd* ChildWindowFromPoint(POINT point,UINT nFlags)
  用于确定包含指定点的子窗口
  如果指定点在客户区之外,函数返回NULL;
  如果指定点在客户区内,但是不属于任何一个子窗口,函数返回该CWnd的指针;
  如果有多个子窗口包含指定点,则返回第一个子窗口的指针。
  还要注意的是,该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。
  对于第二个参数nFlags有几个含义:
  CWP_ALL&&&&&&&&&&&& file://不忽略任何子窗口
  CWP_SKIPNIVSIBLE&&& file://忽略不可见子窗口
  CWP_SKIPDISABLED&&& file://忽略禁止的子窗口
  CWP_SKIPRANSPARENT file://忽略透明子窗口
  获取工具条的指针
  在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针,方法如下:
  CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()-&GetDescendantWindow(AFX_IDW_TOOLBAR);
阅读(...) 评论()添加一个非模态对话框1、点击菜单 插入——资源,选择Dialog,点击新建。2、编辑对话框,添加一些控件什么的。3、双击对话框或者打开ClassWizard,为对话框建立一个类,如CMyDialog。4、在*view.cpp的开头添加新建立的类的头文件(如:#include "mydialog.h")。这点很重要,漏了这步编译的时候经常提示出错的。5、在主窗口的view类定义中添加一个对话框的指针定义,如:class CTest3View : public CView{......public:&CMyDialog* pM ......}6、为主窗口增加一个按钮或者菜单,准备点击后弹出对话框,用ClassWizard指定执行函数(如OnOption)。内容如下:void CTest3View::OnOption() {pMydialog=new CMyD//建立对话框pMydialog-&m_width=//向对话框输出数据(根据实际情况定)pMydialog-&Create(CMyDialog::IDD);pMydialog-&ShowWindow(SW_SHOW);&//显示对话框}7、运行一下,对话框就出现了。8、为了让对话框的数据能反馈回主窗口,需要通过对话框向主窗口发送一个自定义消息,触发主窗口的一个函数,把对话框的数据传回主窗。为了能向主窗口发送消息,需要取得主窗口指针,因此重载对话框的构造函数,生产对话框的时候把主窗的指针传给对话框。9、在CMyDialog.h增加以下:#define WM_DIALOGOK WM_USER+1&&//自定义点击OK按钮的消息宏#define WM_DIALOGAPPLY WM_USER+2&//自定义点击APPLY按钮的消息宏class CMyDialog : public CDialog{...public:&CMyDialog(CView* pParent);&//重载的构造函数声明,原来的构造函数声明去掉&CView *pV&&&//定义一个存储主窗的指针...&protected:&virtual void OnOK();&&//重载OnOK函数声明,为了关闭对话框时间向主窗提供数据};在CMyDialog.cpp修改如下:...CMyDialog::CMyDialog(CView* pParent)//重新定义构造函数,原来的构造函数去掉{pView=pP//把**View类的指针保存}void CMyDialog2::OnOK()//点击对话框的OK按钮,关闭对话框同时数据生效{&UpdateData(TRUE);//显式调用实现数据交换&pView-&SendMessage(WM_DIALOGOK); //向主窗发送消息&CDialog::OnOK();}void CMyDialog::OnApply()//点击对话框的APPLY按钮,数据生效但不关闭对话框{&UpdateData(TRUE);//显式调用数据交换&pView-&PostMessage(WM_DIALOGAPPLY);//把消息发送给主窗}10、对话框把消息发送回主窗后,主窗需要响应该相应的消息,调用函数接受数据的变化。在**view.h中,修改以下:class CTest3View : public CView{...public:&...&CMyDialog* pM &&//定义对话框...protected:&//{{AFX_MSG(CTest3View)&......&afx_msg void OnDialogOk();&//声明OK消息处理函数&afx_msg void OnDialogApply();&//声明apply消息处理函数&//}}AFX_MSG...}在**view.cpp中,修改如下:...#include "mydialog.h"&&&//引入对话框类定义(别忘记)...BEGIN_MESSAGE_MAP(CTest3View, CView)&...&ON_MESSAGE(WM_DIALOGOK,OnDialogOk)&//自定义OK消息处理函数,对话框发回的消息这里吵醒主窗,然后它执行OnDialogOk&ON_MESSAGE(WM_DIALOGAPPLY,OnDialogApply)//自定义APPLY消息处理函数,同上END_MESSAGE_MAP()...CTest3View::CTest3View(){&pMydialog=new CMyDialog(this);&//将当前指针传入对话框&pMydialog-&Create(CMyDialog::IDD);}void CTest3View::OnOption() {&pMydialog-&m_width=&//数据传入对话框&pMydialog-&ShowWindow(SW_SHOW);&//显示对话框}void CTest3View::OnDialogOk()&&//自定义的OK消息处理函数{&width=pMydialog-&m_&//数据传回主窗&IfInvalidate();&&&//对返回数据的处理(自定)}
void CTest3View::OnDialogApply()&//自定义的APPLY消息处理函数{&width=pMydialog-&m_&//数据传回主窗&IfInvalidate();&&&//对返回数据的处理(自定)}11、完成,运行。
本文已收录于以下专栏:
相关文章推荐
新建基于对话框的MFC项目Demo
删除所有控件,工具箱添加一个新的按钮Button1
在资源视图中dialog插入新dialog,将其ID命名为IDD_TEST
用类向导为IDD_TEST添加...
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。
 一、模态对话框(model dialog box)
...
人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..
一、模态对话框的创建及显示
1、Windows对话框分为两类:模态对话框和非模态对话框。
    模态对话框:当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进...
请参见博客:
http://blog.csdn.net/candyliuxj/article/details/6736032
今天项目中遇到的问题,记录下来,做个总结。
一个简单的目的是创建一个非模态对话框并在对话框关闭后将其销毁。
这里的销毁包括:销毁对话框对象资源和对话框对象指针;
首先说创建对话框:
一、模态对话框(m...
1.首先利用资源编辑器创建对话框资源,并针对该对话框资源定义一个对话框类:class   CTestDlg :  public CDialog
2.创建话话框对象
模态对话框的创建:
    如...
1. 非模态对话框的创建方法以及和模态对话框的不同之处:
    1) 首先是创建非模态对话框使用的是CDialog::Create而不是CDialog::DoModal;
    2) 那么最大的问...
非模态(Modalless)对话框,又叫做无模式对话框,当用户打开非模态对话框时,依然可以操作其他窗口。非模态对话框允许用户在处理非模态对话框的同时处理目标对话框。上次的练习已经说明了Modalles...
多线程,非模态对话框,消息传递,定时器
他的最新文章
讲师: 许鹏
讲师:董付国
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)2008年2月 VB大版内专家分月排行榜第一2003年4月 VC/MFC大版内专家分月排行榜第一2002年11月 VC/MFC大版内专家分月排行榜第一
2011年11月 VC/MFC大版内专家分月排行榜第二2008年3月 VB大版内专家分月排行榜第二2008年3月 硬件/嵌入开发大版内专家分月排行榜第二2003年4月 其他开发语言大版内专家分月排行榜第二2003年4月 VB大版内专家分月排行榜第二2003年3月 VB大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 mfc帮助文档 的文章

 

随机推荐