Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Общие контексты устройства




Пример 2.

В центре рабочей области окна вывести строку «Текст по умолчанию». После нажатия левой клавиши мыши содержимое этой строки сменить на текст «Нажата левая клавиша мыши», после нажатия правой клавиши вывести текст «Нажата правая клавиша мыши».

_________________________________________________________________________

#include <windows.h>

bool RegClass(WNDPROC,LPCTSTR,UINT);

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE hInstance;

char szMainClass[]="MainClass";

char szText[50]="Текст по умолчанию";

int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,

LPSTR lpszCmdLine, int nCmdShow)

{

MSG msg;

hInstance=hInst;

HWND hwnd;

if (!RegClass(WndProc,szMainClass,COLOR_WINDOW))

return FALSE;

hwnd=CreateWindow(szMainClass,"Вывод текста",WS_OVERLAPPEDWINDOW|WS_CAPTION|

WS_MINIMIZEBOX|WS_VISIBLE,0,0,500,500,0,0,hInstance,NULL);

/* CW_USEDEFAULT,CW_USEDEFAULT,

CW_USEDEFAULT,CW_USEDEFAULT*/

if (!hwnd) return FALSE;

 

 

while (GetMessage(&msg,0,0,0))

DispatchMessage(&msg);

return msg.wParam;

}

bool RegClass(WNDPROC Proc,LPCTSTR szName,UINT brBackground)

{

WNDCLASS wc;

wc.style=CS_HREDRAW|CS_VREDRAW;

wc.cbClsExtra=wc.cbWndExtra=0;

wc.lpfnWndProc=Proc;

wc.hInstance=hInstance;

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

wc.hbrBackground=(HBRUSH)(brBackground+1);

wc.lpszMenuName=(LPCTSTR)NULL;

wc.lpszClassName=szName;

return (RegisterClass(&wc)!=0);

}

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

static short cx,cy;

switch(msg)

{

case WM_SIZE:

{cx=LOWORD(lParam);

cy=HIWORD(lParam);

return 0;

}

case WM_PAINT:

{

PAINTSTRUCT ps;

HDC hdc=BeginPaint(hwnd,&ps);

SetTextColor(hdc,RGB(255,0,0));

SetBkColor(hdc,RGB(0,255,255));

SetTextAlign(hdc,TA_CENTER);

TextOut(hdc,cx/2,cy/2,szText,strlen(szText));

EndPaint(hwnd,&ps);

return 0;

}

case WM_LBUTTONDOWN:

{

strcpy(szText,"Нажата левая клавиша мыши");

InvalidateRect(hwnd,NULL,TRUE);

return 0;

}

case WM_RBUTTONDOWN:

{

strcpy(szText,"Нажата правая клавиша мыши");

InvalidateRect(hwnd,NULL,TRUE);

return 0;

}

 

case WM_DESTROY:

{PostQuitMessage(0); return 0;}

}

return DefWindowProc(hwnd,msg,wParam,lParam);

}

____________________________________________________________________________

 

Имеется три типа контекстов устройств для видеодисплеев:

1) Класса (Class)

2) Общий (Common)

3) Частный (Private)

Контексты устройства класса

Контексты устройства класса (class device contexts) поддерживаются строго для совместимости с 16-битовыми версиями Windows. В приложении вместо контекста устройства класса необходимо использовать частный контекст устройства.

Общие контексты устройства (common device contexts) - это дисплейные контексты устройства (DC), которые сохраняются в специальном КЭШе системы. Общие контексты устройства используются в прикладных программах, которые выполняют нечастые операции рисования. Прежде, чем система возвратит дескриптор DC, она инициализирует общий контекст устройства с заданными по умолчанию объектами, атрибутами и режимами. Любые операции рисования, выполняемые приложением, используют эти значения по умолчанию, до тех пор, пока не будет вызвана одна из функций GDI, чтобы выбрать новый объект, изменить атрибуты существующего объекта, или выбирать новый режим.

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




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 269; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.