пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Діалогові вікна модального та немодального типів. Реалізація класів. Особливості конструкторів. Приклади.

Есть два типа диалогов: модальные и немодальные. Наиболее распространены первые. В случае модальных диалогов, при активизации диалога основное окно приложения становится пассивным и перестает реагировать на действия пользователя до тех пор, пока он не закроет диалог. В случае немодальных диалогов, диалог существует независимо от других окон, и основное окно также может быть активизировано. Программировать немодальные диалоги немного труднее.

Построение диалоговых окон обеспечивается тремя конструкторами класса СDialog:

CDialog :: CDialog (LPCTSTR lpszTemplateName, CWnd * pParentWnd = NULL);

CDialog :: CDialog (UINT nIDTemplate, CWnd * pParentWnd = NULL);

CDialog :: CDialog ();

где lpszTemplateName содержит строку с ресурса шаблона диалогового окна, nIDTemplate - содержит идентификатор ресурса шаблона диалогового окна; pParentWnd - указатель на окно-владелец, например, главное окно программы.

Объявление класса модального диалогового окна:

class CSampleDialog: public CDialog

[public: CSampleDialog (UINT id, CWnd * Owner): CDialog (id, Owner) []

DECLARE_MESSAGE_MAP ()];

Конструктор класса CSampleDialog можно вызвать следующим образом:

CSampleDialog MyDialog (IDD_DIALOG1, NULL);

Объявление класса немодального диалогового окна:

class CModeLess : public CDialog 

[public:            CModeLess():CDialog()[]

            DECLARE_MESSAGE_MAP()];

Вызов модального диалога с обработчика главного окна

void CMainWin :: OnDialog ()

[CSampleDialog a (IDD_DIALOG1, this);

  a.DoModal ();]

Вызов немодального диалога с обработчика главного окна

CModeLess ml; // Глобальная переменная

void CMainWin :: OnModeless ()

[ml.Create (IDD_DIALOG2, this);

   ml.ShowWindow (SW_SHOWNORMAL);]

_______________________________

// файл d01.h

class CApp : public CWinApp 

{public:           BOOL InitInstance();};

 

            class CSampleDialog : public CDialog 

{public:           BOOL OnInitDialog();

                                   void OnClose();

                                   CSampleDialog(UINT id, CWnd *Owner):CDialog(id,Owner){}

                                   DECLARE_MESSAGE_MAP()};

 

// файл d01.cpp

#include <afxwin.h>

#include "d01.h"

#include "resource.h"

 

BOOL CApp::InitInstance()

{CSampleDialog a(IDD_DIALOG1,m_pMainWnd);

  a.DoModal();

  return TRUE; }

 

CApp App;

 

BEGIN_MESSAGE_MAP(CSampleDialog,CDialog)

            ON_COMMAND(ID_CLOSE,OnClose)

END_MESSAGE_MAP()

 

void CSampleDialog::OnClose(){SendMessage(WM_CLOSE);}

 

BOOL CSampleDialog::OnInitDialog()

{CDialog::OnInitDialog();

 // у цьому прикладі функція OnInitDialog() фактично є зайвою

 return TRUE;

}

 


22.06.2015; 11:38
хиты: 233
рейтинг:0
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь