希望能通过菜单点“子窗口1”,弹出一个唯一的“子窗口1”;点“子窗口2”,弹出一个唯一的“子窗口2”;.....
我自己尝试用多文档模版建,但老弹出叫我选择文档模版小窗口;用子窗口的方法去建,主框架窗口和子窗口又只能有一个框架兰色(=一个焦点),难看,不知道问题出在哪里,希望各位大侠比吝赐教,帮帮我这个菜鸟,谢谢!100分及时呈上
我自己尝试用多文档模版建,但老弹出叫我选择文档模版小窗口;用子窗口的方法去建,主框架窗口和子窗口又只能有一个框架兰色(=一个焦点),难看,不知道问题出在哪里,希望各位大侠比吝赐教,帮帮我这个菜鸟,谢谢!100分及时呈上
解决方案 »
- ListView显示
- 关于CDockBar管理问题
- 问一个关于路由器的NAT的映射的初级问题 理论上的问题
- 晕了,我在Visual 2005 里边用 sendto函数。有一个参数是char *类型的,但CString.GetBuffer()返回的是wchar_t。我用强制转换为char*
- 今天的面试题,大家讨论一下!
- 郑州晚报今天刊登的拒卖日货的广告!
- 祝大家新年快乐,工作顺利!!
- 请问怎么选择性的继承父类的几个方法? 最简便的方法!
- 怎样设置画图才不覆盖已经在对话框上面控件??
- CListCtrl应用高手请进
- 如何初始化新建的DIALOG里的组合框/?
- 在线等一个windows编程的界面的简单小问题
#define AFX_TABDLG_H__7F15FD4D_C850_4306_8EB8_4791CA7604C5__INCLUDED_
我以前的MDI#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// TabDlg.h : header file
///////////////////////////////////////////////////////////////////////////////
// CTabDlg form view#ifndef __AFXEXT_H__
#include <afxext.h>
#endif
class CShowPicFrmWnd;
class CPicViewDoc;
class CShowChartWnd;
class CResultViewFrmWnd;
class CTabDlg : public CFormView
{
protected:
CTabDlg(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CTabDlg)
private:
// Form Data
public:
//{{AFX_DATA(CTabDlg)
enum { IDD = IDD_TABDLG };
//}}AFX_DATA// Attributes
public:
BOOL b_ChartOpened,b_mainpicOpened,b_ResultOpened;
CShowPicFrmWnd *p_FrameShowPic;
CShowChartWnd *p_ShowChartWnd;
CResultViewFrmWnd *p_ResultWnd;
CCreateContext context_showpic,resultview_context;
// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTabDlg)
public:
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
virtual ~CTabDlg();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif // Generated message map functions
//{{AFX_MSG(CTabDlg)
afx_msg void OnMainpic();
afx_msg void OnPanechart();
afx_msg void OnPaneresult();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_TABDLG_H__7F15FD4D_C850_4306_8EB8_4791CA7604C5__INCLUDED_)
//////////////////////实现// TabDlg.cpp : implementation file
//#include "stdafx.h"
#include "lab.h"
#include "TabDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
#include "ShowPicFrmWnd.h"
#include "ShowPicView.h"
#include "PicViewDoc.h"
#include "ShowChartWnd.h"#include "ResultViewFrmWnd.h"
#include "ResultListView.h"IMPLEMENT_DYNCREATE(CTabDlg, CFormView)
CPicViewDoc *p_Doc=NULL;
CTabDlg::CTabDlg()
: CFormView(CTabDlg::IDD)
{
//{{AFX_DATA_INIT(CTabDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
b_ChartOpened=FALSE;
b_mainpicOpened=FALSE;
b_ResultOpened=FALSE;
p_ShowChartWnd=NULL;
p_FrameShowPic=NULL;
p_ResultWnd=NULL;
p_Doc=new CPicViewDoc;
}CTabDlg::~CTabDlg()
{
delete p_FrameShowPic;
delete p_ShowChartWnd;
delete p_ResultWnd;
}void CTabDlg::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTabDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTabDlg, CFormView)
//{{AFX_MSG_MAP(CTabDlg)
ON_BN_CLICKED(IDC_MAINPIC, OnMainpic)
ON_BN_CLICKED(IDC_PANECHART, OnPanechart)
ON_BN_CLICKED(IDC_PANERESULT, OnPaneresult)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CTabDlg diagnostics#ifdef _DEBUG
void CTabDlg::AssertValid() const
{
CFormView::AssertValid();
}void CTabDlg::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CTabDlg message handlers
//extern CPicViewDoc *g_picviewDoc;
void CTabDlg::OnMainpic()
{
// TODO: Add your control notification handler code here
if(!b_mainpicOpened)
{
p_FrameShowPic=new CShowPicFrmWnd();
context_showpic.m_pNewViewClass=RUNTIME_CLASS(CShowPicView);
context_showpic.m_pCurrentDoc=p_Doc;//new CPicViewDoc;//g_picviewDoc;
p_FrameShowPic->LoadFrame(IDI_ICON1,WS_OVERLAPPEDWINDOW|WS_CHILD ,NULL,&context_showpic);
p_FrameShowPic->ShowWindow(SW_SHOW); CRect rect;
AfxGetMainWnd()->GetClientRect(rect);
CRect DlgRect;
GetClientRect(DlgRect);
int width=rect.Width()-DlgRect.Width();
p_FrameShowPic->MoveWindow(CRect(0,rect.top,width*3/5,rect.bottom/2));
p_FrameShowPic->SetFocus();
b_mainpicOpened=TRUE;
}
else
{
if(p_FrameShowPic->IsWindowVisible())
{
p_FrameShowPic->ShowWindow(SW_HIDE);
}
else
{
p_FrameShowPic->ShowWindow(SW_SHOW);
p_FrameShowPic->SetFocus();
}
}
}void CTabDlg::OnPanechart()
{
// TODO: Add your control notification handler code here
if(!b_ChartOpened)
{
p_ShowChartWnd=new CShowChartWnd;
p_ShowChartWnd->LoadFrame(IDI_ICON1,WS_OVERLAPPEDWINDOW|WS_CHILD,NULL);
p_ShowChartWnd->ShowWindow(SW_SHOW); CRect rect;
AfxGetMainWnd()->GetClientRect(rect);
CRect DlgRect;
GetClientRect(DlgRect);
int width=rect.Width()-DlgRect.Width(); p_ShowChartWnd->MoveWindow(CRect(width*3/5,rect.top,width,rect.bottom/2)); p_ShowChartWnd->SetFocus();
b_ChartOpened=TRUE;
}
else
{
if(p_ShowChartWnd->IsWindowVisible())
{
p_ShowChartWnd->ShowWindow(SW_HIDE);
}
else
{
p_ShowChartWnd->ShowWindow(SW_SHOW);
p_ShowChartWnd->SetFocus();
}
}
}void CTabDlg::OnPaneresult()
{
// TODO: Add your control notification handler code here
if(!b_ResultOpened)
{
p_ResultWnd=new CResultViewFrmWnd();
resultview_context.m_pNewViewClass=RUNTIME_CLASS(CResultListView);
resultview_context.m_pCurrentDoc=p_Doc;//new CPicViewDoc;//g_picviewDoc;
if(p_Doc==NULL)
{
AfxMessageBox("Doc is null");
return;
}
p_ResultWnd->LoadFrame(IDI_ICON1,WS_OVERLAPPEDWINDOW|WS_CHILD ,NULL,&resultview_context);
p_ResultWnd->ShowWindow(SW_SHOW);
CRect rect;
AfxGetMainWnd()->GetClientRect(rect);
CRect DlgRect;
GetClientRect(DlgRect);
int width=rect.Width()-DlgRect.Width();
p_ResultWnd->MoveWindow(CRect(0,rect.bottom/2,width,rect.bottom));
p_ResultWnd->SetFocus();
b_ResultOpened=TRUE;
}
else
{
if(p_ResultWnd->IsWindowVisible())
{
p_ResultWnd->ShowWindow(SW_HIDE);
}
else
{
p_ResultWnd->ShowWindow(SW_SHOW);
p_ResultWnd->SetFocus();
}
}
}
IDI_ICON1,
RUNTIME_CLASS(CPicViewDoc),
RUNTIME_CLASS(CShowPicFrmWnd), // custom MDI child frame
RUNTIME_CLASS(CShowPicView));
AddDocTemplate(pDocTemplate1);的声名去掉我的程序中的几个class CShowPicFrmWnd;class CShowChartWnd;
class CResultViewFrmWnd;
都是从CMDIChildWnd派生的子类,
void CTabDlg::OnPanechart() 等函数就是生成相应窗口的函数
#if !defined(AFX_SHOWPICFRMWND_H__F24D853C_0B18_42AA_8AAD_CDE230418C29__INCLUDED_)
#define AFX_SHOWPICFRMWND_H__F24D853C_0B18_42AA_8AAD_CDE230418C29__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ShowPicFrmWnd.h : header file
///////////////////////////////////////////////////////////////////////////////
// CShowPicFrmWnd frameclass CShowPicFrmWnd : public CMDIChildWnd
{
DECLARE_DYNCREATE(CShowPicFrmWnd)
public:
CShowPicFrmWnd(); // protected constructor used by dynamic creation// Attributes
public:// Operations
public:// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CShowPicFrmWnd)
//}}AFX_VIRTUAL// Implementation
public:
virtual ~CShowPicFrmWnd(); // Generated message map functions
//{{AFX_MSG(CShowPicFrmWnd)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_SHOWPICFRMWND_H__F24D853C_0B18_42AA_8AAD_CDE230418C29__INCLUDED_)
{
CCreateContext context; CChildFrame *pFrmae = new CChildFrame;
context.m_pNewViewClass = RUNTIME_CLASS(CMyView);
context.的其它参数你可以根据需要再设置了.// show
pFrame ->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW, this, &context);
pFrame ->InitialUpdateFrame(NULL, TRUE);
}