КАТЕГОРИИ: Архитектура-(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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |