Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как сделать в основном или диалоговом окне Кнопку?

9.7K
13 октября 2007 года
SpeedShifter
67 / / 07.10.2007
Не могу нормальный пример или что то в этом роде найти на этот счет.
В диалоге конечно можно создать стандартнуб кнопку но я не могу понять как ей вид нормальный сделать (битмап или иконку подцепить).
Подскажите наиболее универсальный способ.:confused:
31K
13 октября 2007 года
-mix-
7 / / 19.09.2007
Вот пример создания кнопки:

Код:
hwndButton = CreateWindow(
    "BUTTON",   // predefined class
    "OK",       // button text
    WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // styles
 
    // Size and position values are given explicitly, because
    // the CW_USEDEFAULT constant gives zero values for buttons.
    10,         // starting x position
    10,         // starting y position
    100,        // button width
    100,        // button height
    hwnd,       // parent window
    NULL,       // No menu
    (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), [/SIZE][/FONT]
    NULL);      // pointer not needed


Кнопка - это небольшое прямоугольное дочернее окно, обычно имеющее два состояния: нажато/отпущено или включено/выключено. Пользователь меняет состояние этого элемента щелчком мыши. К этому классу относятся: кнопки-"давилки" (BS_DEFPUSHBUTTON), кнопки-"галочки" (BS_CHECKBOX), "радио"-кнопки (radio buttons) и специальный тип групповых рамочек (BS_GROUPBOX). Разница между стилями BS_xxx и BS_AUTOxxx заключается в том, что при щелчке по AUTO-кнопкам Windows сама автоматически переключает их состояние. Для не AUTO-кнопок это надо делать вручную в диалоговой процедуре.

Чтобы вывести на кнопку битовый образ в MSDN есть вот такой пример:

Код:
[COLOR="Navy"]BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam,
                          LPARAM 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 IDC_OWNERDRAW:
 
                        // application-defined processing
 
                        break;
                }
            }
            break;
 
        case WM_DESTROY:
            DeleteObject(hbm1);  // delete bitmaps
            DeleteObject(hbm2);
 
            break;
 
    }
    return FALSE;
        UNREFERENCED_PARAMETER(lParam);
}
[/COLOR]


The parent window of an owner-drawn button typically responds to at least three messages for the button:

WM_INITDIALOG
WM_COMMAND
WM_DRAWITEM

When you must paint an owner-drawn button, the system sends the parent window a WM_DRAWITEM message whose lParam parameter is a pointer 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.

Возможно это поможет..
9.7K
14 октября 2007 года
SpeedShifter
67 / / 07.10.2007
Дай пожалуйста ссылку на MSDN.
31K
15 октября 2007 года
-mix-
7 / / 19.09.2007
Все это находится здесь: http://msdn2.microsoft.com/en-us/library/bb775943.aspx
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог