Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переключения между View 
:(
    Опции темы
RSV
Дата 9.3.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Не могу понять почему при переключении с CFormView на CScrollView
винда выдает сообщение об ошибке. Когда заменяю CScrollView на
CView, то всё впорядке. Где у меня ошибка. Код с коментариями
прилагаю. Заранее спасибо.
PM MAIL   Вверх
nikitao
Дата 9.3.2006, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: нет
Всего: 26



RSV, так где код?(вешай проблемный кусок прямо сюда).


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
takedo
Дата 10.3.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 1.6.2005

Репутация: нет
Всего: 3



RSV, показывай как делаешь, по другому не разобраться.
Добавлено @ 11:29
по ссылке ничего не получаю smile


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Coocky
Дата 10.3.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Давай сюда, сейчас как два пальца... smile
Только скопируй код в теги Код


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
RSV
Дата 10.3.2006, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(nikitao @ 9.3.2006, 22:20)
RSV, так где код?(вешай проблемный кусок прямо сюда).

// MainFrm.h : interface of the CMainFrame class
//
#pragma once
class CMainFrame : public CFrameWnd
{

protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:

// Operations
public:

// Overrides
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;

// Generated message map functions
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
public:
CView* m_pViews[2];
int m_nCurView;
afx_msg void OnSwitchView(UINT nID);
afx_msg void OnUpdateViewEnterDate(CCmdUI *pCmdUI);
afx_msg void OnUpdateViewPreviewData(CCmdUI *pCmdUI);
};

/********************************************************************************************/
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Nakladnaya.h"

#include "MainFrm.h"
#include "NakladnayaDoc.h"
#include "NakladnayaView.h"
#include "PreView.h"
#include ".\mainfrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND_RANGE(ID_VIEW_ENTER_DATE, ID_VIEW_PREVIEW_DATA, OnSwitchView)
ON_UPDATE_COMMAND_UI(ID_VIEW_ENTER_DATE, OnUpdateViewEnterDate)
ON_UPDATE_COMMAND_UI(ID_VIEW_PREVIEW_DATA, OnUpdateViewPreviewData)
END_MESSAGE_MAP()

static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}

CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return TRUE;
}


// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}

#endif //_DEBUG

// CMainFrame message handlers
void CMainFrame::OnSwitchView(UINT nID)
{
// Индекс активизируемого представления
int nNewView = nID - ID_VIEW_ENTER_DATE;
if (m_nCurView == nNewView)
return;

// Текущее активное представление
CView *pActiveView = m_pViews[m_nCurView];
// Активизируемое представление
CView *pNewView = m_pViews[nNewView];

// Меняем идентификаторы предствлений
int nSwitchChildID = pNewView->GetDlgCtrlID();
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pActiveView->SetDlgCtrlID(nSwitchChildID);

// Прячем текущее представление
pActiveView->ShowWindow(SW_HIDE);
// Показываем активизируемое представление
pNewView->ShowWindow(SW_SHOW);

// Вносим изменения в фрейм и обновляем его
SetActiveView(pNewView);
RecalcLayout();

// Перерисовываем активизируемое представление
// после обновления фрейма
pNewView->Invalidate();

// Обновляем номер текущего представления
m_nCurView = nNewView;
}

void CMainFrame::OnUpdateViewEnterDate(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nCurView == 0);
}

void CMainFrame::OnUpdateViewPreviewData(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nCurView == 1);
}
/**************************************************************************************/

// Nakladnaya.h : main header file for the Nakladnaya application
//
#pragma once

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h" // main symbols
// CNakladnayaApp:
// See Nakladnaya.cpp for the implementation of this class
//

class CNakladnayaApp : public CWinApp
{
public:
CNakladnayaApp();


// Overrides
public:
virtual BOOL InitInstance();

// Implementation
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
};

extern CNakladnayaApp theApp;
/*******************************************************************************************/
// Nakladnaya.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "Nakladnaya.h"
#include "MainFrm.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"
#include "PreView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CNakladnayaApp

BEGIN_MESSAGE_MAP(CNakladnayaApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()


// CNakladnayaApp construction

CNakladnayaApp::CNakladnayaApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

// The one and only CNakladnayaApp object

CNakladnayaApp theApp;

// CNakladnayaApp initialization

BOOL CNakladnayaApp::InitInstance()
{
InitCommonControls();

CWinApp::InitInstance();

// Initialize OLE libraries
// if (!AfxOleInit())
// {
// AfxMessageBox(IDP_OLE_INIT_FAILED);
// return FALSE;
// }
// AfxEnableControlContainer();
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(4); // Load standard INI file options (including MRU)

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CNakladnayaDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CEnterDataView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;

/********************************************************************************/

CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
pMainFrame->m_pViews[0] = pMainFrame->GetActiveView();
pMainFrame->m_pViews[1] = new CPreView;
pMainFrame->m_pViews[1]->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
pMainFrame->rectDefault, pMainFrame, AFX_IDW_PANE_FIRST + 1, NULL);
// Добавляем представление в документ
pMainFrame->GetActiveDocument()->AddView(pMainFrame->m_pViews[1]);
// Номер изначально отображаемого представления
pMainFrame->m_nCurView = 0;
/********************************************************************************/

m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// App command to run the dialog
void CNakladnayaApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
// CNakladnayaApp message handlers

/*****************************************************************************************/
// NakladnayaView.h : interface of the CEnterDataView class
//
#pragma once


class CEnterDataView : public CFormView
{
protected: // create from serialization only
CEnterDataView();
DECLARE_DYNCREATE(CEnterDataView)

public:
enum{ IDD = IDD_NAKLADNAYA_FORM };

// Attributes
public:
CNakladnayaDoc* GetDocument() const;

// Operations
public:

// Overrides
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void OnInitialUpdate(); // called first time after construct

// Implementation
public:
virtual ~CEnterDataView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG // debug version in NakladnayaView.cpp
inline CNakladnayaDoc* CEnterDataView::GetDocument() const
{ return reinterpret_cast<CNakladnayaDoc*>(m_pDocument); }
#endif

/***************************************************************************************/
// NakladnayaView.cpp : implementation of the CEnterDataView class
//

#include "stdafx.h"
#include "Nakladnaya.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CEnterDataView

IMPLEMENT_DYNCREATE(CEnterDataView, CFormView)

BEGIN_MESSAGE_MAP(CEnterDataView, CFormView)
END_MESSAGE_MAP()

// CEnterDataView construction/destruction

CEnterDataView::CEnterDataView()
: CFormView(CEnterDataView::IDD)
{
// TODO: add construction code here

}

CEnterDataView::~CEnterDataView()
{
}

void CEnterDataView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}

BOOL CEnterDataView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CFormView::PreCreateWindow(cs);
}

void CEnterDataView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
// CEnterDataView diagnostics

#ifdef _DEBUG
void CEnterDataView::AssertValid() const
{
CFormView::AssertValid();
}

void CEnterDataView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}

CNakladnayaDoc* CEnterDataView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNakladnayaDoc)));
return (CNakladnayaDoc*)m_pDocument;
}
#endif //_DEBUG


// CEnterDataView message handlers
/**************************************************************************************/
// NakladnayaView.cpp : implementation of the CEnterDataView class
//

#include "stdafx.h"
#include "Nakladnaya.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CEnterDataView

IMPLEMENT_DYNCREATE(CEnterDataView, CFormView)

BEGIN_MESSAGE_MAP(CEnterDataView, CFormView)
END_MESSAGE_MAP()

// CEnterDataView construction/destruction

CEnterDataView::CEnterDataView()
: CFormView(CEnterDataView::IDD)
{
// TODO: add construction code here

}

CEnterDataView::~CEnterDataView()
{
}

void CEnterDataView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}

BOOL CEnterDataView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CFormView::PreCreateWindow(cs);
}

void CEnterDataView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}


// CEnterDataView diagnostics
#ifdef _DEBUG
void CEnterDataView::AssertValid() const
{
CFormView::AssertValid();
}

void CEnterDataView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}

CNakladnayaDoc* CEnterDataView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNakladnayaDoc)));
return (CNakladnayaDoc*)m_pDocument;
}
#endif //_DEBUG
/**********************************************************************************/
// PreView.cpp : implementation file
//
#include "stdafx.h"
#include "Nakladnaya.h"
#include "PreView.h"
#include "NakladnayaDoc.h"


// CPreView

IMPLEMENT_DYNCREATE(CPreView, CScrollView)

CPreView::CPreView()
{
}

CPreView::~CPreView()
{
}


BEGIN_MESSAGE_MAP(CPreView, CScrollView)
END_MESSAGE_MAP()


// CPreView drawing

void CPreView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}

void CPreView::OnDraw(CDC* pDC)
{
//CDocument* pDoc = GetDocument();
// TODO: add draw code here
CNakladnayaDoc* pDoc = GetDocument();
if (!pDoc)
return;
}


// CPreView diagnostics

#ifdef _DEBUG
void CPreView::AssertValid() const
{
CScrollView::AssertValid();
}

void CPreView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
#endif //_DEBUG


// CPreView message handlers

/********************************************************************************/
Добавлено @ 13:15
Цитата(Coocky @ 10.3.2006, 12:01)
Давай сюда, сейчас как два пальца... smile
Только скопируй код в теги Код

// MainFrm.h : interface of the CMainFrame class
//
#pragma once
class CMainFrame : public CFrameWnd
{

protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:

// Operations
public:

// Overrides
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);

// Implementation
public:
virtual ~CMainFrame();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected: // control bar embedded members
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;

// Generated message map functions
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
public:
CView* m_pViews[2];
int m_nCurView;
afx_msg void OnSwitchView(UINT nID);
afx_msg void OnUpdateViewEnterDate(CCmdUI *pCmdUI);
afx_msg void OnUpdateViewPreviewData(CCmdUI *pCmdUI);
};

/********************************************************************************************/
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "Nakladnaya.h"

#include "MainFrm.h"
#include "NakladnayaDoc.h"
#include "NakladnayaView.h"
#include "PreView.h"
#include ".\mainfrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_COMMAND_RANGE(ID_VIEW_ENTER_DATE, ID_VIEW_PREVIEW_DATA, OnSwitchView)
ON_UPDATE_COMMAND_UI(ID_VIEW_ENTER_DATE, OnUpdateViewEnterDate)
ON_UPDATE_COMMAND_UI(ID_VIEW_PREVIEW_DATA, OnUpdateViewPreviewData)
END_MESSAGE_MAP()

static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};

// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
}

CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}

if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);

return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return TRUE;
}


// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}

#endif //_DEBUG

// CMainFrame message handlers
void CMainFrame::OnSwitchView(UINT nID)
{
// Индекс активизируемого представления
int nNewView = nID - ID_VIEW_ENTER_DATE;
if (m_nCurView == nNewView)
return;

// Текущее активное представление
CView *pActiveView = m_pViews[m_nCurView];
// Активизируемое представление
CView *pNewView = m_pViews[nNewView];

// Меняем идентификаторы предствлений
int nSwitchChildID = pNewView->GetDlgCtrlID();
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pActiveView->SetDlgCtrlID(nSwitchChildID);

// Прячем текущее представление
pActiveView->ShowWindow(SW_HIDE);
// Показываем активизируемое представление
pNewView->ShowWindow(SW_SHOW);

// Вносим изменения в фрейм и обновляем его
SetActiveView(pNewView);
RecalcLayout();

// Перерисовываем активизируемое представление
// после обновления фрейма
pNewView->Invalidate();

// Обновляем номер текущего представления
m_nCurView = nNewView;
}

void CMainFrame::OnUpdateViewEnterDate(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nCurView == 0);
}

void CMainFrame::OnUpdateViewPreviewData(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nCurView == 1);
}
/**************************************************************************************/

// Nakladnaya.h : main header file for the Nakladnaya application
//
#pragma once

#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif

#include "resource.h" // main symbols
// CNakladnayaApp:
// See Nakladnaya.cpp for the implementation of this class
//

class CNakladnayaApp : public CWinApp
{
public:
CNakladnayaApp();


// Overrides
public:
virtual BOOL InitInstance();

// Implementation
afx_msg void OnAppAbout();
DECLARE_MESSAGE_MAP()
};

extern CNakladnayaApp theApp;
/*******************************************************************************************/
// Nakladnaya.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "Nakladnaya.h"
#include "MainFrm.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"
#include "PreView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// CNakladnayaApp

BEGIN_MESSAGE_MAP(CNakladnayaApp, CWinApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
END_MESSAGE_MAP()


// CNakladnayaApp construction

CNakladnayaApp::CNakladnayaApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}

// The one and only CNakladnayaApp object

CNakladnayaApp theApp;

// CNakladnayaApp initialization

BOOL CNakladnayaApp::InitInstance()
{
InitCommonControls();

CWinApp::InitInstance();

// Initialize OLE libraries
// if (!AfxOleInit())
// {
// AfxMessageBox(IDP_OLE_INIT_FAILED);
// return FALSE;
// }
// AfxEnableControlContainer();
SetRegistryKey(_T("Local AppWizard-Generated Applications"));
LoadStdProfileSettings(4); // Load standard INI file options (including MRU)

CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CNakladnayaDoc),
RUNTIME_CLASS(CMainFrame), // main SDI frame window
RUNTIME_CLASS(CEnterDataView));
if (!pDocTemplate)
return FALSE;
AddDocTemplate(pDocTemplate);
// Parse command line for standard shell commands, DDE, file open
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (!ProcessShellCommand(cmdInfo))
return FALSE;

/********************************************************************************/

CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
pMainFrame->m_pViews[0] = pMainFrame->GetActiveView();
pMainFrame->m_pViews[1] = new CPreView;
pMainFrame->m_pViews[1]->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
pMainFrame->rectDefault, pMainFrame, AFX_IDW_PANE_FIRST + 1, NULL);
// Добавляем представление в документ
pMainFrame->GetActiveDocument()->AddView(pMainFrame->m_pViews[1]);
// Номер изначально отображаемого представления
pMainFrame->m_nCurView = 0;
/********************************************************************************/

m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();

return TRUE;
}
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// Dialog Data
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

// Implementation
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()

// App command to run the dialog
void CNakladnayaApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
// CNakladnayaApp message handlers

/*****************************************************************************************/
// NakladnayaView.h : interface of the CEnterDataView class
//
#pragma once


class CEnterDataView : public CFormView
{
protected: // create from serialization only
CEnterDataView();
DECLARE_DYNCREATE(CEnterDataView)

public:
enum{ IDD = IDD_NAKLADNAYA_FORM };

// Attributes
public:
CNakladnayaDoc* GetDocument() const;

// Operations
public:

// Overrides
public:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual void OnInitialUpdate(); // called first time after construct

// Implementation
public:
virtual ~CEnterDataView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

protected:

// Generated message map functions
protected:
DECLARE_MESSAGE_MAP()
};

#ifndef _DEBUG // debug version in NakladnayaView.cpp
inline CNakladnayaDoc* CEnterDataView::GetDocument() const
{ return reinterpret_cast<CNakladnayaDoc*>(m_pDocument); }
#endif

/***************************************************************************************/
// NakladnayaView.cpp : implementation of the CEnterDataView class
//

#include "stdafx.h"
#include "Nakladnaya.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CEnterDataView

IMPLEMENT_DYNCREATE(CEnterDataView, CFormView)

BEGIN_MESSAGE_MAP(CEnterDataView, CFormView)
END_MESSAGE_MAP()

// CEnterDataView construction/destruction

CEnterDataView::CEnterDataView()
: CFormView(CEnterDataView::IDD)
{
// TODO: add construction code here

}

CEnterDataView::~CEnterDataView()
{
}

void CEnterDataView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}

BOOL CEnterDataView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CFormView::PreCreateWindow(cs);
}

void CEnterDataView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}
// CEnterDataView diagnostics

#ifdef _DEBUG
void CEnterDataView::AssertValid() const
{
CFormView::AssertValid();
}

void CEnterDataView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}

CNakladnayaDoc* CEnterDataView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNakladnayaDoc)));
return (CNakladnayaDoc*)m_pDocument;
}
#endif //_DEBUG


// CEnterDataView message handlers
/**************************************************************************************/
// NakladnayaView.cpp : implementation of the CEnterDataView class
//

#include "stdafx.h"
#include "Nakladnaya.h"

#include "NakladnayaDoc.h"
#include "NakladnayaView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CEnterDataView

IMPLEMENT_DYNCREATE(CEnterDataView, CFormView)

BEGIN_MESSAGE_MAP(CEnterDataView, CFormView)
END_MESSAGE_MAP()

// CEnterDataView construction/destruction

CEnterDataView::CEnterDataView()
: CFormView(CEnterDataView::IDD)
{
// TODO: add construction code here

}

CEnterDataView::~CEnterDataView()
{
}

void CEnterDataView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
}

BOOL CEnterDataView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

return CFormView::PreCreateWindow(cs);
}

void CEnterDataView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
}


// CEnterDataView diagnostics
#ifdef _DEBUG
void CEnterDataView::AssertValid() const
{
CFormView::AssertValid();
}

void CEnterDataView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}

CNakladnayaDoc* CEnterDataView::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNakladnayaDoc)));
return (CNakladnayaDoc*)m_pDocument;
}
#endif //_DEBUG
/**********************************************************************************/
// PreView.cpp : implementation file
//
#include "stdafx.h"
#include "Nakladnaya.h"
#include "PreView.h"
#include "NakladnayaDoc.h"


// CPreView

IMPLEMENT_DYNCREATE(CPreView, CScrollView)

CPreView::CPreView()
{
}

CPreView::~CPreView()
{
}


BEGIN_MESSAGE_MAP(CPreView, CScrollView)
END_MESSAGE_MAP()


// CPreView drawing

void CPreView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}

void CPreView::OnDraw(CDC* pDC)
{
//CDocument* pDoc = GetDocument();
// TODO: add draw code here
CNakladnayaDoc* pDoc = GetDocument();
if (!pDoc)
return;
}


// CPreView diagnostics

#ifdef _DEBUG
void CPreView::AssertValid() const
{
CScrollView::AssertValid();
}

void CPreView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
#endif //_DEBUG


// CPreView message handlers

/********************************************************************************/
PM MAIL   Вверх
Coocky
Дата 10.3.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



RSV, я ж просил! Справа есть кнопочка КОД ! smile
Нажми ее, и весь код помести туда!
Отредактируй сообщение! Невозможно понять ни хрена! smile
Добавлено @ 13:25
Код

// Индекс активизируемого представления
int nNewView = nID - ID_VIEW_ENTER_DATE;
if (m_nCurView == nNewView)
return;

// Текущее активное представление
CView *pActiveView = m_pViews[m_nCurView];
// Активизируемое представление
CView *pNewView = m_pViews[nNewView];

// Меняем идентификаторы предствлений
int nSwitchChildID = pNewView->GetDlgCtrlID();
pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pActiveView->SetDlgCtrlID(nSwitchChildID);

// Прячем текущее представление
pActiveView->ShowWindow(SW_HIDE);
// Показываем активизируемое представление
pNewView->ShowWindow(SW_SHOW);

// Вносим изменения в фрейм и обновляем его
SetActiveView(pNewView);
RecalcLayout();

// Перерисовываем активизируемое представление
// после обновления фрейма
pNewView->Invalidate();

// Обновляем номер текущего представления
m_nCurView = nNewView;
}


Вот переключение..
Покажи то место, где вываливается!


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 10.3.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Код

CView*p=GetActiveView();

    CDocument* pDoc=GetActiveDocument();

CView *pOptimization;

pOptimization=new View;

pOptimization->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,AFX_IDW_PANE_FIRST,NULL);


pOptimization->OnInitialUpdate();

pOptimization->ShowWindow(SW_SHOW);

p->ShowWindow(SW_HIDE);

pDoc->AddView(pOptimization);

pDoc->RemoveView(p);

ShowWindow(SW_SHOWMAXIMIZED );

SetActiveView(pOptimization);

RecalcLayout();



Вот примерный код , как переключаются представления и создаются

Это сообщение отредактировал(а) Coocky - 10.3.2006, 14:29


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
RSV
Дата 11.3.2006, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(Coocky @ 10.3.2006, 14:27)
Код

CView*p=GetActiveView();

    CDocument* pDoc=GetActiveDocument();

CView *pOptimization;

pOptimization=new View;

pOptimization->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,CRect(0,0,0,0),this,AFX_IDW_PANE_FIRST,NULL);


pOptimization->OnInitialUpdate();

pOptimization->ShowWindow(SW_SHOW);

p->ShowWindow(SW_HIDE);

pDoc->AddView(pOptimization);

pDoc->RemoveView(p);

ShowWindow(SW_SHOWMAXIMIZED );

SetActiveView(pOptimization);

RecalcLayout();



Вот   примерный код , как переключаются представления и создаются

Код

//Винда выдаёт, что в viewscrl.cpp найдена ошибка в строке 143.
//Генерируется сообщение в момент переключения с CFormView на
//CScrollView. При переключении в обратном порядке все проходит
//нормально. Пробывал отследить отладчиком в каком именно месте
//происходит сбой ни чего не получается. 
//Заранее эти классы перевел в public. 


// MainFrm.h : interface of the CMainFrame class

class CMainFrame : public CFrameWnd
{


public:
    CView* m_pViews[2];
    int m_nCurView;
    afx_msg void OnSwitchView(UINT nID);
    afx_msg void OnUpdateViewEnterDate(CCmdUI *pCmdUI);
    afx_msg void OnUpdateViewPreviewData(CCmdUI *pCmdUI);
};

/**********************************************************************/
// MainFrm.cpp
// CMainFrame message handlers
void CMainFrame::OnSwitchView(UINT nID)
{
    // Индекс активизируемого представления
    int nNewView = nID - ID_VIEW_ENTER_DATE;
    if (m_nCurView == nNewView)
        return;

    // Текущее активное представление
    CView *pActiveView = m_pViews[m_nCurView];
    // Активизируемое представление
    CView *pNewView = m_pViews[nNewView];

    // Меняем идентификаторы предствлений
    int nSwitchChildID = pNewView->GetDlgCtrlID();
    pNewView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    pActiveView->SetDlgCtrlID(nSwitchChildID);

    // Прячем текущее представление
    pActiveView->ShowWindow(SW_HIDE);
    // Показываем активизируемое представление
    pNewView->ShowWindow(SW_SHOW);

    // Вносим изменения в фрейм и обновляем его
    SetActiveView(pNewView);
    RecalcLayout();

    // Перерисовываем активизируемое представление
    // после обновления фрейма
    pNewView->Invalidate();

    // Обновляем номер текущего представления
    m_nCurView = nNewView;
}

/**************************************************************************************/

//Код добавленный в основной класс приложения Nakladnaya.cpp
    if (!ProcessShellCommand(cmdInfo))
        return FALSE;

    /********************************************************************************/
    
    CMainFrame *pMainFrame = (CMainFrame *)AfxGetMainWnd();
    pMainFrame->m_pViews[0] = pMainFrame->GetActiveView();
    pMainFrame->m_pViews[1] = new CPreView;
    pMainFrame->m_pViews[1]->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW,
        pMainFrame->rectDefault, pMainFrame, AFX_IDW_PANE_FIRST + 1, NULL);
    // Добавляем представление в документ
    pMainFrame->GetActiveDocument()->AddView(pMainFrame->m_pViews[1]);
    // Номер изначально отображаемого представления
    pMainFrame->m_nCurView = 0;
    /********************************************************************************/

    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    
    return TRUE;
}



PM MAIL   Вверх
Coocky
Дата 11.3.2006, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата

//Генерируется сообщение в момент переключения с CFormView на
//CScrollView. При переключении в обратном порядке все проходит

OnInintialUpdate для CScrollView я думаю перегрузил?
Я думаю с правильными параметрами?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Coocky
Дата 11.3.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Вот еще раз глянул...Код вроде правильный, но...
Вызывают сомнения pNewView->Invalidate();
Если для CScrollView, то правильно ли ты ставишь там SetScrollSizes?
Второе
Цитата

Пробывал отследить отладчиком в каком именно месте
//происходит сбой ни чего не получается.

Неможет быть.. Поставь брекпоинты во всех функциях твоего класса, производного от CScrollView.
Если не помогло:
есть стек вызова функций (окошко такое в отладяике, кажется СallStack называется-без студии в руках сейчас не вспомню... ). Там всегда показывется порядок вызова всех функций


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
RSV
Дата 13.3.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(Coocky @ 11.3.2006, 22:51)
Вот еще раз глянул...Код вроде правильный, но...
Вызывают сомнения pNewView->Invalidate();
Если для CScrollView, то правильно ли ты ставишь там  SetScrollSizes?
Второе
Цитата

Пробывал отследить отладчиком в каком именно месте
//происходит сбой ни чего не получается.

Неможет быть.. Поставь брекпоинты во всех функциях твоего класса, производного от CScrollView.
Если не помогло:
есть стек вызова функций (окошко такое в отладяике, кажется СallStack называется-без студии в руках сейчас не вспомню... ). Там всегда показывется порядок вызова всех функций

Спасибо за помощь думаю, что через отладчик найду ошибку.
Только у меня еще один вопрос где указывать размер окна
которое открывается при старте программы. Мне необходимо
что бы оно открывалось на весь экран.
PM MAIL   Вверх
Coocky
Дата 13.3.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Есть два варианта
1 обработать сообщение ON_WM_GETMINMAXINFO()
В обработчике сообщения OnGetMinMaxInfo(MINMAXINFO* lpMMI)
передается указатель lpMMI
typedef struct tagMINMAXINFO {
POINT ptReserved;
POINT ptMaxSize;
POINT ptMaxPosition;
POINT ptMinTrackSize;
POINT ptMaxTrackSize;
} MINMAXINFO;
Просто заполни поля

Есть сторой вариант
В твоем классе приложения,производном от CWinApp есть функция InitInstance()
Там есть код, который сгенерировала студия m_pMainWnd->ShowWindow(SW_SHOW);
Замени флаг в этой функции на нужный (SW_SHOWMAXIMIZED )

Это сообщение отредактировал(а) Coocky - 13.3.2006, 17:41


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.2621 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.