Шустрый
Профиль
Группа: Участник
Сообщений: 147
Регистрация: 16.12.2005
Репутация: нет Всего: нет
|
Есть файл LunarMissionsOrbits.cpp для главного класса приложения и файл LunarMissionsOrbitsDlg.cpp для главного диалога приложения. Вот эти файлы: 1) файл LunarMissionOrbits.h : Код | // LunarMissionOrbits.h : main header file for the PROJECT_NAME application //
#pragma once
#ifndef __AFXWIN_H__ #error "include 'stdafx.h' before including this file for PCH" #endif
#include "resource.h" // main symbols
// CLunarMissionsOrbitsApp: // See LunarMissionsOrbits.cpp for the implementation of this class //
class CLunarMissionsOrbitsApp : public CWinApp { public: CLunarMissionsOrbitsApp();
// Overrides public: virtual BOOL InitInstance();
// Implementation
DECLARE_MESSAGE_MAP() };
extern CLunarMissionsOrbitsApp theApp;
|
2) файл LunarMissionOrbits.cpp : Код | // LunarMissionsOrbits.cpp : Defines the class behaviors for the application. //
#include "stdafx.h" #include "LunarMissionsOrbits.h" #include "LunarMissionsOrbitsDlg.h"
#ifdef _DEBUG #define new DEBUG_NEW #endif
// CLunarMissionOrbits2App
BEGIN_MESSAGE_MAP(CLunarMissionOrbits2App, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP()
// CLunarMissionsOrbitsApp construction
CLunarMissionsOrbitsApp::CLunarMissionsOrbitsApp() { // support Restart Manager m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: add construction code here, // Place all significant initialization in InitInstance }
// The one and only CLunarMissionOrbits2App object
CLunarMissionsOrbitsApp theApp;
// CLunarMissionsOrbitsApp initialization
BOOL CLunarMissionsOrbitsApp::InitInstance() { // InitCommonControlsEx() is required on Windows XP if an application // manifest specifies use of ComCtl32.dll version 6 or later to enable // visual styles. Otherwise, any window creation will fail. INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // Set this to include all the common control classes you want to use // in your application. InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
// Create the shell manager, in case the dialog contains // any shell tree view or shell list view controls. CShellManager *pShellManager = new CShellManager;
// Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need // Change the registry key under which our settings are stored // TODO: You should modify this string to be something appropriate // such as the name of your company or organization SetRegistryKey(_T("Local AppWizard-Generated Applications"));
CLunarMissionsOrbitsDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } else if (nResponse == -1) { TRACE(traceAppMsg, 0, "Предупреждение. Не удалось создать диалоговое окно, поэтому работа приложения неожиданно завершена.\n"); TRACE(traceAppMsg, 0, "Предупреждение. При использовании элементов управления MFC для диалогового окна невозможно #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n"); } // Delete the shell manager created above. if (pShellManager != NULL) { delete pShellManager; }
// Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; }
|
3) файл LunarMissionOrbitsDlg.h : Код | // LunarMissionOrbitsDlg.h : header file //
#pragma once
#include "afxwin.h" #include "afxbutton.h" #include "Resource.h" #include "stdafx.h" #include "MyStatic.h" #include "MyMFCButton.h" #include "MyMFCButton2.h"
// CLunarMissionOrbitsDlg dialog class CLunarMissionsOrbitsDlg : public CDialogEx { // Construction public: CLunarMissionsOrbitsDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data enum { IDD = IDD_LUNARMISSIONORBITS_DIALOG };
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation protected: HICON m_hIcon;
// Generated message map functions virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() public: HBRUSH m_brush; CButton m_IDOK; //CMFCButton m_IDC_MFCBUTTON1; CMyMFCButton m_IDC_MFCBUTTON1; CMyMFCButton2 m_IDC_MFCBUTTON2; CMFCButton m_IDC_MFCBUTTON3; //CStatic m_IDC_STATIC1; //CStatic m_IDC_STATIC2; CMyStatic m_IDC_STATIC1; CMyStatic m_IDC_STATIC2; void RedrawMFCButton(int i); afx_msg void OnBnClickedMfcbutton1(); afx_msg void OnBnClickedMfcbutton2(); afx_msg void OnBnClickedOk(); };
|
4) файл LunarMissionOrbitsDlg.cpp : Код | // LunarMissionOrbits2Dlg.cpp : implementation file //
#include "stdafx.h" #include "LunarMissionOrbits2.h" #include "LunarMissionOrbits2Dlg.h" #include "afxdialogex.h" #include "Satellite.h" #include "MyMFCButton.h" #include "MyMFCButton2.h" #include "FlightToMoonDlg.h" #include "FlightAroundMoonDlg.h"
#ifdef _DEBUG #define new DEBUG_NEW #endif
#pragma warning(disable : 4996)
// Диалоговое окно CAboutDlg используется для описания сведений о приложении
NewSatInit st; Satellite *sat;
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialogEx { public: CAboutDlg();
// Dialog Data enum { IDD = IDD_ABOUTBOX };
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
// Implementation protected: DECLARE_MESSAGE_MAP() };
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { }
void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); }
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP()
// CLunarMissionOrbits2Dlg dialog
CLunarMissionsOrbitsDlg::CLunarMissionsOrbitsDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CLunarMissionsOrbitsDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); }
void CLunarMissionsOrbitsDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDOK, m_IDOK); DDX_Control(pDX, IDC_MFCBUTTON1, m_IDC_MFCBUTTON1); DDX_Control(pDX, IDC_MFCBUTTON2, m_IDC_MFCBUTTON2); DDX_Control(pDX, IDC_MFCBUTTON3, m_IDC_MFCBUTTON3); DDX_Control(pDX, IDC_STATIC1, m_IDC_STATIC1); DDX_Control(pDX, IDC_STATIC2, m_IDC_STATIC2); }
BEGIN_MESSAGE_MAP(CLunarMissionsOrbitsDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_CTLCOLOR() ON_BN_CLICKED(IDC_MFCBUTTON1, &CLunarMissionsOrbitsDlg::OnBnClickedMfcbutton1) ON_BN_CLICKED(IDC_MFCBUTTON2, &CLunarMissionsOrbitsDlg::OnBnClickedMfcbutton2) ON_BN_CLICKED(IDOK, &CLunarMissionsOrbitsDlg::OnBnClickedOk) END_MESSAGE_MAP()
// CLunarMissionOrbits2Dlg message handlers
BOOL CLunarMissionsOrbitsDlg::OnInitDialog() { CFont *pfont1, *pfont2, *pfont3, *pfont4, *pfont5, *pfont6; LOGFONT lf1, lf2, lf3;
CDialogEx::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } }
// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here //m_IDC_MFCBUTTON1.pMFCButton2 = &m_IDC_MFCBUTTON2; //m_IDC_MFCBUTTON2.pMFCButton = &m_IDC_MFCBUTTON1; //m_IDC_MFCBUTTON1.pDialog = this; //m_IDC_MFCBUTTON2.pDialog = this; memset(&lf1,0,sizeof(lf1)); lf1.lfHeight = 40; lf1.lfWidth = 10; lf1.lfWeight = FW_BOLD; lf1.lfCharSet = ANSI_CHARSET; lf1.lfOutPrecision = OUT_DEFAULT_PRECIS; lf1.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf1.lfQuality = PROOF_QUALITY; lf1.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; //strcpy(lf1.lfFaceName,"MS Sans Serif"); wcscpy(lf1.lfFaceName,L"MS Sans Serif"); pfont1 = new CFont(); pfont1->CreateFontIndirect(&lf1); pfont2 = new CFont(); pfont2->CreateFontIndirect(&lf1); m_IDC_STATIC1.SetFont(pfont1); m_IDC_STATIC2.SetFont(pfont2); memset(&lf2,0,sizeof(lf2)); lf2.lfHeight = 25; lf2.lfWidth = 10; lf2.lfWeight = FW_BOLD; lf2.lfCharSet = ANSI_CHARSET; lf2.lfOutPrecision = OUT_DEFAULT_PRECIS; lf2.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf2.lfQuality = PROOF_QUALITY; lf2.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; //strcpy(lf2.lfFaceName,"MS Sans Serif"); wcscpy(lf2.lfFaceName,L"MS Sans Serif"); pfont3 = new CFont(); pfont3->CreateFontIndirect(&lf2); pfont4 = new CFont(); pfont4->CreateFontIndirect(&lf2); pfont5 = new CFont(); pfont5->CreateFontIndirect(&lf2); m_IDC_MFCBUTTON1.SetFont(pfont3); m_IDC_MFCBUTTON2.SetFont(pfont4); m_IDC_MFCBUTTON3.SetFont(pfont5); memset(&lf3,0,sizeof(lf3)); lf3.lfHeight = 16; lf3.lfWidth = 6; lf3.lfWeight = FW_NORMAL; lf3.lfCharSet = ANSI_CHARSET; lf3.lfOutPrecision = OUT_DEFAULT_PRECIS; lf3.lfClipPrecision = CLIP_DEFAULT_PRECIS; lf3.lfQuality = PROOF_QUALITY; lf3.lfPitchAndFamily = VARIABLE_PITCH | FF_ROMAN; //strcpy(lf3.lfFaceName,"MS Shell Dlg"); wcscpy(lf3.lfFaceName,L"MS Shell Dlg"); pfont6 = new CFont(); pfont6->CreateFontIndirect(&lf3); m_IDOK.SetFont(pfont6); m_IDC_STATIC1.RedrawWindow(); //m_IDC_STATIC1.UpdateWindow(); m_IDC_STATIC2.RedrawWindow(); //m_IDC_STATIC2.UpdateWindow(); //m_IDC_MFCBUTTON1.RedrawWindow(); return TRUE; // return TRUE unless you set the focus to a control }
void CLunarMissionsOrbitsDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } }
// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.
void CLunarMissionsOrbitsDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } }
// The system calls this function to obtain the cursor to display while the user drags // the minimized window. HCURSOR CLunarMissionsOrbitsDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); }
HBRUSH CLunarMissionsOrbitsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC,pWnd,nCtlColor);
if ((pWnd->GetDlgCtrlID()==IDC_STATIC1)||(pWnd->GetDlgCtrlID()==IDC_STATIC2)) { //pDC->SetTextColor(RGB(255,0,0)); pDC->SetTextColor(RGB(162,21,10)); pDC->SetBkMode(TRANSPARENT); } //if (pWnd->GetDlgCtrlID()==IDC_MFCBUTTON1) //{ //hbr = CreateSolidBrush(RGB(12,149,210)); //pDC->SelectObject(hbr); //pDC->SetBkColor(RGB(12,149,210)); //pDC->SetBkMode(TRANSPARENT); //} //if (pWnd->GetDlgCtrlID()==IDC_MFCBUTTON3) //{ // //} return hbr; }
void CLunarMissionsOrbitsDlg::OnBnClickedMfcbutton1() // если была нажата кнопка "Участок перелёта Земля - Луна" { // TODO: добавьте свой код обработчика уведомлений //CFlightToMoonDlg flightToMoonDlg(this); CFlightToMoonDlg flightToMoonDlg(NULL); flightToMoonDlg.DoModal(); }
void CLunarMissionsOrbitsDlg::OnBnClickedMfcbutton2() { // TODO: добавьте свой код обработчика уведомлений //m_IDC_MFCBUTTON1.ispaint = true; //m_IDC_MFCBUTTON1.RedrawWindow(); //CFlightAroundMoonDlg flightAroundMoonDlg(this); CFlightAroundMoonDlg flightAroundMoonDlg(NULL); flightAroundMoonDlg.DoModal(); }
void CLunarMissionsOrbitsDlg::RedrawMFCButton(int i) { if (i==1) { m_IDC_MFCBUTTON1.ispaint = true; //m_IDC_MFCBUTTON1.RedrawWindow(); //m_IDC_MFCBUTTON1.UpdateWindow(); m_IDC_MFCBUTTON1.UpdateData(); } if (i==2) { m_IDC_MFCBUTTON2.ispaint = true; //m_IDC_MFCBUTTON2.RedrawWindow(); //m_IDC_MFCBUTTON2.UpdateWindow(); m_IDC_MFCBUTTON2.UpdateData(); } }
void CLunarMissionsOrbitsDlg::OnBnClickedOk() { // TODO: добавьте свой код обработчика уведомлений /* m_IDC_MFCBUTTON1.ispaint = true; m_IDC_MFCBUTTON1.UpdateData(); m_IDC_MFCBUTTON2.ispaint = true; m_IDC_MFCBUTTON2.UpdateData(); */ CDialogEx::OnOK(); }
|
И при запуске программы в файле LunarMissionOrbits.cpp на строке INT_PTR nResponse = dlg.DoModal(); значение nResponse становится равным -1, после чего отладчик попадает на else if (nResponse == -1) { TRACE(traceAppMsg, 0, "Предупреждение. Не удалось создать диалоговое окно, поэтому работа приложения неожиданно завершена.\n"); TRACE(traceAppMsg, 0, "Предупреждение. При использовании элементов управления MFC для диалогового окна невозможно #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS.\n"); } и выскакивает сообщение Цитата | Необработанное исключение по адресу 0x53A0D62C (mfc110ud.dll) в LunarMissionOrbits.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFEFEFF66 .
|
Что это означает? Как исправить эту ошибку? (Проект был перенесён с другого компьютера, на котором стоит Visual Studio 2010--там всё нормально работает, а на этой машине Visual Studio 2012--и вот такие проблемы).
|