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 руб./мес


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




 301 - Типы контекстов экранов и эффективность графики / MFC шаг за шагом / Visual C++

Шаг 301 - Типы контекстов экранов и эффективность графики

Для экрана в Win32 API есть три типа контекстов. Кстати многие проблемы с графикой как раз связаны с использованием не того типа контекста. Поэтому они бывают:

  • Контекст класса - class DC
  • Общий контекст - common DC
  • Частный контекст - private DC

Контекст класса и частный контекст нужен для программ интенсивно производящих работу с графикой, так как время на графические операции здесь очень значительны. Общий же контекст используется для обычных приложений, основу которых не составляет вывод сложных графических изображений на экран. Получаются все контексты одинаково вызовом функции BeginPaint() или GetDC(), только возвращается контекст с типом определенным классом окна, то есть от того как окно зарегистрировано. Возвращается контекст обратно с помощью функций EndPaint() или ReleaseDC(). Класс контекста существет только для совместимости со старыми версиями. Реально у нас два класса контекста общий и частный. Чем они различаются ? Ну, во-первых, общий контекст всегда инициализируется заново перед операциями вывода на экран по функциям получения контекста. Конечно параметры его можно поменять, но после окончания операций контекст нужно вернуть и все пропадет. А если не возвращать ??? Нельзя. Количество общих контекстов в системе ограничено. Надо. В случае же частного контекста все изменения будут сохранены. Частный контекст инициализируется один раз и удаляется только в самом конце.

Как же получить окно с нужным контекстом ??? Стиль надо нужный установить. Для получения окна с частным контекстом нужно установить стиль CS_OWNDC и все. Все остальные функции используются так же, как и с общим контекстом. Если в друг Вы захотите получить контекст типа контекст класса, то стиль нужен CS_CLASSDC.

Как сделать это в MFC ??? Вот так:

const LPCTSTR MYCLASSNAME = _T("MYView"); 

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs) 
{
	if (CView::PreCreateWindow(cs)) // проверка первого раза
	{
		GetClassInfoEx(AfxGetInstanceHandle(), cs.lpszClass, &wc); 
		WNDCLASSEX wc; 
		wc.cbSize = sizeof(WNDCLASSEX); 
		wc.lpszClassName = MYCLASSNAME; 
		wc.style |= CS_OWNDC; 
		VERIFY(RegisterClassEx(&wc)); 
		cs.lpszClass = MYCLASSNAME; 
		return TRUE; 
	}
	return FALSE; 
}

Протестировать результат работы можно запустив SPY:

301.gif (12270 b)


| |
Автор Каев Артем.
[AD]