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

Ваш аккаунт

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

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

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

ToolBar +RC+ WinAPI

13K
30 августа 2005 года
Dr_Freeman
2 / / 30.08.2005
Есть у меня в ресурсах мой ТулБарчик. Как мне его прицепить к моему диалогу? Только на WinAPI.
Создал я окошечко CreateWindow - ом, соотвественно есть его хэндл.

Да и еще вопрос - как создать функции, реагирующие на нажатия соответствующих кнопок на тулбаре?

В WndProc прописать что-то типа такого:

=== куть ===
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case ID_BUT1:
DoSomethingProc();
break;
}
}
=== куть ===
13K
30 августа 2005 года
Dr_Freeman
2 / / 30.08.2005
Все, спасибо всем. Я таки разобрался.
Счас опишу все подробно, если еще кому-нибудь это будет нужно когда-либо.

ToolBar. Подключаеи ToolBar на WinAPI.

Итак, у меня в проекте есть ресурсный файл. Создаем там тулбар. Например, сделаем две кнопки.

Первая кнопка - ID_CUBE, вторая кнопка - ID_MOVE.
Если создать меню, в котором будет пункт "Куб" и установить у него ID_CUBE, то автоматически получаем связь ТулБара с меню =) (Ну об этом все знают).
Не забудьте подключить:
 
Код:
#include <commctrl.h>
#pragma comment( lib, "comctl32.lib")  // для CreateToolBarEx - comctl32.dll


мои переменные и константы:
Код:
//Количество кнопок в тулбаре
#define NUM_TBBUTTONS                   2
//Количест во картинок в тулбаре на кнопочках
#define NUM_TBBITMAPS                   2
//Размеры картинки
#define BMP_CX                          16
#define BMP_CY                          16
//Минимальные размеры у Ребара.
#define MIN_CY                          30
#define MIN_TBCX                        200
#define ID_TOOLBAR                      1000
#define ID_REBAR                        13001

// Handles to tool control windows
HWND hWndToolBar, hWndRebar;


//Кнопочки для ТулБара
TBBUTTON tbButtons[] = {
    { 0, ID_CUBE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, ID_CUBE},
    { 1, ID_MOVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, ID_MOVE}
};


Как я уже говорил, хэндл моего окна hWnd.
Далее. В функции WndProc прописываем по ON_CREATE:

 
Код:
if (!CreateRebar(hWnd)) //Если надо с Rebar-ом
//if (!CreateTheToolBar(hWnd)) //Если просто нужен ТулБар без Ребар-а
    MessageBox (NULL, TEXT("Could not create rebar."), NULL, MB_OK );
break;


А вот и сама функция:

Код:
/****************************************************************************
*    FUNCTION: CreateRebar(HWND)
*    PURPOSE:  Creates the rebar
*****************************************************************************/

UINT CreateRebar(HWND hWndParent)
{
    INITCOMMONCONTROLSEX icex;

    //This is where we create the rebar control
    // First, we initialize the common controls
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC = ICC_COOL_CLASSES | ICC_USEREX_CLASSES; // load the rebar and combo
    InitCommonControlsEx(&icex);

    // Create the REBAR control
    hWndRebar = CreateWindowEx(
                0L,
                REBARCLASSNAME,
                NULL,
                WS_VISIBLE | WS_BORDER | WS_CHILD | WS_CLIPCHILDREN |
                  WS_CLIPSIBLINGS | CCS_NODIVIDER | CCS_NOPARENTALIGN |
                  RBS_VARHEIGHT | RBS_BANDBORDERS,
                0, 0, 500, 20,  //Собственно, размеры Ребара =)
                hWndParent,
                (HMENU)ID_REBAR,
                hInst,
                NULL );

    if (!hWndRebar)
        return 0;

    // Создаем ТулБар и добавляем его к нашему ребару
    if ((hWndToolBar = CreateTheToolBar(hWndRebar)) == NULL)
        MessageBox (NULL, TEXT("Could not create the toolbar"), NULL, MB_OK );
    return 1;
}


А вот код функции CreateTheToolBar:

Код:
/************************************************************************
*
*       Создаем ТулБар и пихаем его в наш диалог
*
*************************************************************************/

HWND CreateTheToolBar (HWND hWndParent)
{
    REBARBANDINFO rbBand;

    hWndToolBar = CreateToolbarEx(hWndParent,
        WS_CHILD | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | WS_CLIPCHILDREN |
           WS_CLIPSIBLINGS | CCS_NODIVIDER | CCS_NORESIZE | WS_VISIBLE,
        ID_TOOLBAR, //Идентификатор ТулБара
        NUM_TBBITMAPS,  //Количество картинок
        (HINSTANCE)hInst,  //Module instance with the executable file that contains the bitmap resource.
        IDR_TOOLBAR1,   //Ресурсы
        (LPCTBBUTTON)&tbButtons,  //Кнопочки
        NUM_TBBUTTONS,      //количество кнопок
        BMP_CX,BMP_CY,                  // width & height of buttons
        BMP_CX,BMP_CY,                  // width & height of bitmaps
        sizeof(TBBUTTON));

    if (hWndToolBar == NULL )
    {
        MessageBox (NULL, TEXT("Toolbar not created!"), NULL, MB_OK );
        return (HWND)NULL;
    }

    // Initialize REBARBANDINFO for all rebar bands
    rbBand.cbSize = sizeof(REBARBANDINFO);
    rbBand.fMask = RBBIM_COLORS |   // clrFore and clrBack are valid
        RBBIM_CHILD |               // hwndChild is valid
        RBBIM_CHILDSIZE |           // cxMinChild and cyMinChild are valid
        RBBIM_STYLE |               // fStyle is valid
        RBBIM_ID |                  // wID is valid
        RBBIM_BACKGROUND;           // hbmBack is valid
    rbBand.clrFore = GetSysColor(COLOR_BTNTEXT);
    rbBand.clrBack = GetSysColor(COLOR_BTNFACE);
    rbBand.fStyle = RBBS_NOVERT |   // do not display in vertical orientation
        RBBS_CHILDEDGE |
        RBBS_FIXEDBMP;
    rbBand.hbmBack = LoadBitmap(hInst, MAKEINTRESOURCE(ID_CUBE));
    rbBand.hwndChild = hWndToolBar;
    rbBand.wID = ID_TOOLBAR;
    rbBand.cxMinChild = MIN_TBCX;
    rbBand.cyMinChild = MIN_CY;

    // Insert band into rebar
    SendMessage(hWndRebar, RB_INSERTBAND, (UINT) -1, (LPARAM) (LPREBARBANDINFO) &rbBand);

    return (hWndToolBar);

}


и теперь только остается сделать обработчики. Они делаются просто. в WndProc прописать:
Код:
case WM_COMMAND:
            wmId    = LOWORD(wParam);
            wmEvent = HIWORD(wParam);
            // Parse the menu selections:
            switch (wmId)
            {
                case ID_CUBE:
                          MessageBox (NULL, TEXT("IN_CUBE."), NULL, MB_OK );
                          break;
                        case ID_MOVE:
                          DoSomethingProc();
                        break;
                default:
                   return DefWindowProc(hWnd, message, wParam, lParam);
            }
            break;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог