C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 209 - Заставка при запуске приложения / MFC шаг за шагом / Visual C++

Шаг 209 - Заставка при запуске приложения

Привет Артем.
Решил принять участие в организации "Русского MSDN".
Посылаю пример создания заставки при загрузке приложения.
SLY - sly@vmz.nnov.ru
	
Спасибо большое. Вот мое описание а исходные код загрузите из проекта.
Там все что прислал SLY.

Я просто сделаю комментарии к коду написанного SLY, оставив так как есть. Давайте смотреть. Создано приложение на базе диалогового окна, для которого и должна появляться заставка. Сам класс заставки порожден от класса CWnd.

class CGRSplashWin : public CWnd
{
	// Construction
public:
    CGRSplashWin();
    BOOL Create(CWnd* pParent);
	// Attributes
public:
	// Operations
public:
	// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CGRSplashWin)
	protected:
	virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
	//}}AFX_VIRTUAL
	// Implementation
public:
	virtual ~CGRSplashWin();
	// Generated message map functions
protected:
	//{{AFX_MSG(CGRSplashWin)
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

Сама реализация класса довольно проста. Интересным моментом является получение фона окна реализованного в функции OnEraseBkgnd.

BOOL CGRSplashWin::OnEraseBkgnd(CDC* pDC) 
{
	//////////////////////////////////////////////////////////
	//создадим фон представления
	//////////////////////////////////////////////////////////
	BITMAP m_bkparam;
	CBitmap m_bkview;
	CBitmap* m_oldbkview;
	CDC m_memDC;
	RECT rect;
	m_bkview.LoadBitmap(IDB_BKVIEW);
	m_bkview.GetObject(sizeof(m_bkparam),&m_bkparam);
	m_memDC.CreateCompatibleDC(pDC);
	m_oldbkview=m_memDC.SelectObject(&m_bkview);
	GetClientRect(&rect);
	//количество строк и столбцов для представления
	int NumRows=(int)(rect.bottom/m_bkparam.bmHeight);
	int NumCols=(int)(rect.right/m_bkparam.bmWidth);
	//заполнить всю рабочую область представления
	for (int row=0;rowBitBlt(col*m_bkparam.bmWidth,
		row*m_bkparam.bmHeight,m_bkparam.bmWidth,
		m_bkparam.bmHeight,&m_memDC,0,0,SRCCOPY);

	SelectObject(m_memDC,m_oldbkview);
	return 1;
}

Вот главный вопрос - это когда заставку надо создать и когда удалить. Создаем мы ее в классе приложения используя функцию InitInstance.

BOOL CSplashWinApp::InitInstance()
{
......
#ifdef _AFXDLL
	Enable3dControls();	// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
	
	//////////////////////////////////////////////
	//показать заставку
	//уничтожить ее при активизации диалога
	//WM_ACTIVATE
	//////////////////////////////////////////////
	m_wndSplash = new CGRSplashWin();
    	m_wndSplash->Create(m_wndSplash->FromHandle(GetDesktopWindow()));
    	m_wndSplash->ShowWindow(SW_NORMAL);
	CSplashWinDlg dlg;
	m_pMainWnd = &dlg;
......

Сам класс заставки объявлен в классе приложения:

class CSplashWinApp : public CWinApp
{
public:
	CSplashWinApp();
    	CGRSplashWin *m_wndSplash;
......

А удаляется заставка в классе диалога при его активации:

void CSplashWinDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
{
CDialog::OnActivate(nState, pWndOther, bMinimized);

////////////////////////////////////////////
//сделаем задержку а то вдруг не увидим
//если прога быстро загружается
////////////////////////////////////////////

Sleep(1000);	
if (((CSplashWinApp*)AfxGetApp())->m_wndSplash!=NULL)
{
	delete ((CSplashWinApp*)AfxGetApp())->m_wndSplash;
	((CSplashWinApp*)AfxGetApp())->m_wndSplash=NULL;
}
}

Вот у кого остались вопросы грузите проект и пишите SLY.

Материалы для шага прислал SLY (sly@vmz.nnov.ru).


Загрузить проект | | |
Автор Каев Артем.
[AD]