На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Проблема с запуском диалогового приложения
    Есть файл LunarMissionsOrbits.cpp для главного класса приложения и файл LunarMissionsOrbitsDlg.cpp для главного диалога приложения.
    Вот эти файлы:

    1) файл LunarMissionOrbits.h :

    ExpandedWrap disabled
      // 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 :

    ExpandedWrap disabled
      // 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)
    ExpandedWrap disabled
      файл 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 :

    ExpandedWrap disabled
      // 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--и вот такие проблемы).
      Под отладчиком запускал?
        Цитата erslgoeirjh @
        Что это означает? Как исправить эту ошибку?
        (Проект был перенесён с другого компьютера, на котором стоит Visual Studio 2010--там всё нормально работает, а на этой машине Visual Studio 2012--и вот такие проблемы).

        Ну видимо у тебя на машину куда ты перенес стоит рантайм от 2012 студии, и ты перенес не просто исходники, а весь проект с промежуточными файлами и бинарниками. Поэтому возможно у тебя неверно слинковалось с 2012 рантаймом. Но это теория.
        Попробуй сделать Clean + Rebuild. И желательно вообще удалить все папки Debug/Release и промежуточные файлы. Так же зайти в настройки проекта и посмотреть какой там рантайм стоит, проверить установлен ли в системе такой же рантайм.

        Ну либо попробовать создать проект заного и закинуть в него исходники. Ну или установить MSVS2010 на машину куда ты все это перенес и собирать ей.
        Сообщение отредактировано: Wound -
          Цитата Wound @
          Попробуй сделать Clean

          Нащет этого - люто плюсую!
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0307 ]   [ 17 queries used ]   [ Generated: 24.04.24, 17:35 GMT ]