Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Пример: В центре рабочей области окна вывести текст




_______________________________________________________________

#include <windows.h>

bool RegClass(WNDPROC,LPCTSTR,UINT);

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

HINSTANCE hInstance;

char szMainClass[]="MainClass";

char szTitle[]="Вывод текста";

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,szTitle,WS_POPUPWINDOW|WS_CAPTION|

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

if (!hwnd) return FALSE;

ShowWindow(hwnd,SW_SHOWMAXIMIZED);

UpdateWindow(hwnd);

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)

{char szText[]="Выводим текст";

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_DESTROY:

{PostQuitMessage(0); return 0;}

}

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

}

_______________________________________________________________

 

Результат работы программы:

 

Функции:

SetTextColor(hdc,RGB(255,0,0)) – цвет текста;

SetBkColor(hdc,RGB(0,255,255)) – цвет заливки;

SetTextAlign(hdc,TA_CENTER) – выравнивание текста;

UpdateWindow(HWND hwnd) – посылает сообщение WM_PAINT функциио бновляемого окна. Прототип данной функции:

BOOL UpdateWindow(HWND hwnd).

В случае успешного выполнения функция возвращает ненулевое значение, иначе – 0.

 

II) Если рисование должно происходить не в блоке обработки сообщения WM_PAINT или если дескриптор контекста устройства нужен не для рисующих функций (например, в качестве аргумента функции GetTextMetrics), то в таких случаях контекст устройства получают либо вызовом функции GetDC следующим образом:

hdc=GetDC(hWnd);

либо вызовом функции GetWindowDC:

hdc= GetWindowDC(hWnd);

Первая функция возвращает дескриптор контекста дисплея для клиентской области окна hWnd, а вторая – для всего окна. Если в качестве аргумента hWnd передать значение NULL, то обе функции вернут дескриптор для всего экрана.

По окончании работы с функциями GDI необходимо освободить контекст устройства с помощью функции ReleaseDC, например:

hDC=GetDC(hWnd);

[использование функций GDI]

ReleaseDC(hWnd,hDC);

 

В отличие от контекста устройства, полученного при помощи вызова функции BeginPaint, контекст устройства, возвращаемый функцией GetDC, работает с регионом отсечения, который равен всей клиентской области, то есть рисование можно производить в любом месте клиентской области. Функция GetDC не делает действительными какие-либо недействительные зоны.

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




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


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


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



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




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