На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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);

возвращайтесь ВЕРНО;
}


Для примера, который демонстрирует как приложение создает прямоугольное отсечение региона, смотри Регионы.


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz