На главную

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 Owner-Drawn Buttons



The parent window of an owner-drawn button typically responds to at least three messages for the button: WM_INITDIALOG, WM_COMMAND, and WM_DRAWITEM. It is not necessary to process the WM_MEASUREITEM message for owner-drawn buttons.

When you must paint an owner-drawn button, Windows sends the parent window a WM_DRAWITEM message whose lParam points to a DRAWITEMSTRUCT structure. Use this structure with all owner-drawn controls to provide the application with the information it requires to paint the control. The itemAction and itemState members of the DRAWITEMSTRUCT structure define how to paint an owner-drawn button.
The following example shows how to process WM_INITDIALOG, WM_DRAWITEM, and WM_COMMAND messages for owner-drawn buttons. This example demonstrates how to draw one of two bitmaps for a control, depending on whether the control is selected. You would typically use the wParam parameter of the WM_DRAWITEM message to identify the control; in this example, only one control is assumed.

LRESULT APIENTRY OwnDrawProc(hDlg, message, wParam, lParam)
HWND hDlg; // window handle of dialog box
UINT message; // type of message
UINT wParam; // message-specific information
LONG lParam;
{
HDC hdcMem;
LPDRAWITEMSTRUCT lpdis;

switch (message) {
case WM_INITDIALOG:

// hinst, hbm1 and hbm2 are defined globally.
hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1");
hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2");

return TRUE;

case WM_DRAWITEM:
lpdis = (LPDRAWITEMSTRUCT) lParam;
hdcMem = CreateCompatibleDC(lpdis->hDC);

if (lpdis->itemState & ODS_SELECTED) // if selected
SelectObject(hdcMem, hbm2);
else
SelectObject(hdcMem, hbm1);

// Destination
StretchBlt(
lpdis->hDC, // destination DC
lpdis->rcItem.left, // x upper left

lpdis->rcItem.top, // y upper left

// The next two lines specify the width and
// height.
lpdis->rcItem.right - lpdis->rcItem.left,
lpdis->rcItem.bottom - lpdis->rcItem.top,
hdcMem, // source device context
0, 0, // x and y upper left
32, // source bitmap width
32, // source bitmap height

SRCCOPY); // raster operation

DeleteDC(hdcMem);
return TRUE;

case WM_COMMAND:
if (wParam == IDOK
|| wParam == IDCANCEL) {
EndDialog(hDlg, TRUE);
return TRUE;
}
if (HIWORD(wParam) == BN_CLICKED) {
switch (LOWORD(wParam)) {
case IDB_OWNERDRAW:

.
. // application-defined processing

.

break;
}
}
break;

case WM_DESTROY:
DeleteObject(hbm1); // delete bitmaps
DeleteObject(hbm2);

break;

}
return FALSE;
UNREFERENCED_PARAMETER(lParam);
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Использование Кнопок Owner-Drawn



Родительское окно сделанной кнопки владельца обычно реагирует на по крайней мере три сообщения для кнопки: WM_INITDIALOG, WM_COMMAND, и WM_DRAWITEM. Нет необходимости обрабатывать сообщение WM_MEASUREITEM для сделанных кнопок владельца.

Когда Вы должны закрасить сделанную кнопку владельца, Окно посылает родительскому окну сообщение WM_DRAWITEM чьих точек lParam на структуру DRAWITEMSTRUCT. Используйте эту структуру со всеми сделавшим элементами управления владельца, чтобы обеспечивать приложение информацией, которая требует закрашивать управление. itemAction И участники itemState структуры DRAWITEMSTRUCT определяют как, чтобы закрашивать сделанную кнопку владельца.
Следующий пример показывает как, чтобы обрабатывать WM_INITDIALOG, WM_DRAWITEM, и сообщения WM_COMMAND для сделанных кнопок владельца. Этот пример демонстрирует как, чтобы делать одно из двух побитовых отображений для управления, или управление выбрано. Вы должны обычно использовать параметр wParam сообщения WM_DRAWITEM, чтобы идентифицировать управление; в этом примере, только одно управление принято.

LRESULT APIENTRY OwnDrawProc(hDlg, СООБЩЕНИЕ, wParam, lParam) HWND hDlg; // ручка окна диалогового сообщения блока UINT; // тип сообщения UINT wParam; // сообщеняя-специфическая информация ДОЛГО (ДЛИНОЙ) lParam;
{
HDC hdcMem;
lpdis LPDRAWITEMSTRUCT;

ключ (сообщение) { случай WM_INITDIALOG:

// hinst, hbm1 и hbm2 определяться глобально.
hbm1 = LoadBitmap((РУЧКА) hinst, "OwnBit1");
hbm2 = LoadBitmap((РУЧКА) hinst, "OwnBit2");

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

случай WM_DRAWITEM: lpdis = (LPDRAWITEMSTRUCT) lParam;
hdcMem = CreateCompatibleDC(lpdis->hDC);

если (lpdis->itemState & ODS_SELECTED) // если выбрано SelectObject(hdcMem, hbm2);
еще
SelectObject(hdcMem, hbm1);

// Destination StretchBlt(
lpdis->hDC, // расположение DC lpdis->rcItem.left, // x верхний левый

lpdis->rcItem.top, // y верхний левый

// Следующие две строки определяют ширину и // высоту.
lpdis->rcItem.right - lpdis->rcItem.left, lpdis->rcItem.bottom - lpdis->rcItem.top, hdcMem, // исходный контекст устройства 0, 0, // x и y верхние левые 32, // исходная ширина побитового отображения 32, // исходная высота побитового отображения

SRCCOPY); // растровая операция

DeleteDC(hdcMem);
возвращайтесь ВЕРНО;

случай WM_COMMAND: если (wParam == IDOK || wParam == IDCANCEL) { EndDialog(hDlg, TRUE);
возвращайтесь ВЕРНО;
}
если (HIWORD(wParam) == BN_CLICKED) { ключ (LOWORD(wParam)) { случай IDB_OWNERDRAW:

.
. // определенная прикладная обработка

.

прерывание;
}
}
прерывание;

случай WM_DESTROY: DeleteObject(hbm1); // удалите побитовые отображения DeleteObject(hbm2);

прерывание;

}
обратная ЛОЖЬ;
UNREFERENCED_PARAMETER(lParam);
}



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