|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Using Clipping
This section contains example code that shows how to generate a clip path consisting of a character string. The example creates a logical font and uses it to draw a string within a clip path, then fills the path by drawing horizontal and vertical lines.
/* * DoClipPat - Draws a clip path using the specified string * Return value - TRUE if successful; FALSE otherwise * lplf - address of a LOGFONT structure that defines the font to * use to draw the clip path * lpsz - address of a string to use for the clip path */ BOOL DoClipPath(LPLOGFONT lplf, LPSTR lpsz) { LOGFONT lf; /* logical font structure */ HFONT hfont; /* new logical font handle */
HFONT hfontOld; /* original logical font handle */ HDC hdc; /* display DC handle */ int nXStart, nYStart; /* drawing coordinates */ RECT rc; /* rectangle structure for painting window */ SIZE sz; /* size structure that receives text extents */ int nStrLen; /* length of the string */ int i; /* loop counter */
/* Retrieve a cached DC for the window. */ hdc = GetDC(hwnd); /* Erase the current window contents. */ GetClientRect(hwnd, &rc); FillRect(hdc, &rc, GetStockObject(WHITE_BRUSH)); /* * Use the specified font to create a logical font and select it * into the DC. */ hfont = CreateFontIndirect(lplf); if (hfont == NULL) return FALSE; hfontOld = SelectObject(hdc, hfont); /* Create a clip path. */
nStrLen = lstrlen(lpsz); BeginPath(hdc); TextOut(hdc, nXStart, nYStart, lpsz, nStrLen); EndPath(hdc); SelectClipPath(hdc, RGN_DIFF); /* * Retrieve the dimensions of the rectangle surrounding * the text. */ GetTextExtentPoint32(hdc, lpsz, nStrLen, &sz); /* Draw horizontal lines through the clip path. */ for (i = nYStart + 1; i < (nYStart + sz.cy); i += 3) { MoveToEx(hdc, nXStart, i, (LPPOINT) NULL);
LineTo(hdc, (nXStart + sz.cx), i); } /* Draw vertical lines through the clip path. */ for (i = nXStart + 1; i < (nXStart + sz.cx); i += 3){ MoveToEx(hdc, i, nYStart, (LPPOINT) NULL); LineTo(hdc, i, (nYStart + sz.cy)); } /* Select the original font into the DC and release the DC. */ SelectObject(hdc, hfontOld); DeleteObject(hfont); ReleaseDC(hwnd, hdc); return TRUE; }
For an example that demonstrates how an application creates a rectangular clipping region, see Regions.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Использование Отсечения
Эта секция содержит код примера, который показывает как, чтобы генерировать путь клипа, состоящий из символьной строки. Пример создает логический шрифт и использует это, чтобы делать строкой в пределах пути клипа затем заполнять путь рисуя горизонтальные и вертикальные линии.
/* * DoClipPat - ДЕЛАЕТ путем клипа, использовавшим определенную строку * Величина Возврата - ИСТИНА если успешно; ЛОЖЬ в противном случае * lplf - адрес структуры LOGFONT, которая определяет шрифт, чтобы * использование, чтобы делать путем клипа * lpsz - адрес строки, чтобы использоваться для пути клипа */ BOOL DoClipPath(LPLOGFONT lplf, LPSTR lpsz) { lf LOGFONT; /* логическая шрифтовая структура */ HFONT hfont; /* новая логическая шрифтовая ручка */
HFONT hfontOld; /* оригинальная логическая шрифтовая ручка */ hdc HDC; /* отобразите ручку DC */ int nXStart, nYStart; /* рисуя координаты */ rc RECT; /* структура прямоугольника для живописи окна */ РАЗМЕР sz; /* размер структуры, который получает текстовую протяженность */ int nStrLen; /* длина строки */ int i; /* счетчик цикла */
/* Извлеките кеш DC для window. */ hdc = GetDC(hwnd); /* Выстирайте текущее окно contents. */ GetClientRect(hwnd, &rc); FillRect(hdc, &rc, GetStockObject(WHITE_BRUSH)); /* * Используйте определенный шрифт, чтобы создавать логический шрифт и выбираться это * в DC. */ hfont = CreateFontIndirect(lplf); если (hfont == НЕДЕЙСТВИТЕЛЬНЫЙ) обратная ЛОЖЬ; hfontOld = SelectObject(hdc, hfont); /* Создайте клип path. */
nStrLen = lstrlen(lpsz); BeginPath(hdc); TextOut(hdc, nXStart, nYStart, lpsz, nStrLen); EndPath(hdc); SelectClipPath(hdc, RGN_DIFF); /* * Извлеките измерения окружать прямоугольника * текст. */ GetTextExtentPoint32(hdc, lpsz, nStrLen, &sz); /* Сделайте горизонтальными линиями через клип path. */ для (i = nYStart + 1; я < (nYStart + sz.cy); я += 3) { MoveToEx(hdc, nXStart, я, (LPPOINT) НЕДЕЙСТВИТЕЛЬНЫЙ);
LineTo(hdc, (nXStart + sz.cx), Я); } /* Сделайте вертикальными линиями через клип path. */ для (i = nXStart + 1; я < (nXStart + sz.cx); я += 3){ MoveToEx(hdc, я, nYStart, (LPPOINT) НЕДЕЙСТВИТЕЛЬНЫЙ); LineTo(hdc, Я, (nYStart + sz.cy)); } /* Выберитесь оригинальный шрифт в DC и выпускайте DC. */ SelectObject(hdc, hfontOld); DeleteObject(hfont); ReleaseDC(hwnd, hdc); возвращайтесь ВЕРНО; }
Для примера, который демонстрирует как приложение создает прямоугольное отсечение региона, смотри Регионы.
|
|
|
|
| |