Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание тулбара, проблема 
:(
    Опции темы
Loginanton
Дата 10.11.2009, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



в качестве главного окна программы использую диалог. в ресурсах задаю для диалога контрол тулбар, но почему то тулбар не отображается. помогите пожалуйста, бьюсь с этой проблемой уже долго.
dialog.cpp:
Код
#include <windows.h>
#include <dialog.h>
#include <commctrl.h>
// переменные
HINSTANCE h; // хендл приложения
HWND hw; // хендл окна
int nresult; // код окончания программы
INITCOMMONCONTROLSEX cc;

TBBUTTON tbb[3];
TBADDBITMAP tbab;

int __stdcall DlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp)
{
    switch(msg)
    {
        case WM_CLOSE: // нажат крестик или alt+F4
            SendMessage(hw,WM_COMMAND,IDM_EXIT,0);
            return 1;
        case WM_COMMAND: // сообщения от меню и тулбара
            switch(LOWORD(wp))
            {
                case IDM_EXIT: // выход
                    EndDialog(hw,nresult);
                    return 1;
            }
        case WM_SIZE: // изменение размера окна
            SendMessage(GetDlgItem(hw,IDC_STATUS),WM_SIZE,0,0);
            return 1;
        case WM_INITDIALOG: // создание диалога
            tbab.hInst = HINST_COMMCTRL;
            tbab.nID = IDB_STD_SMALL_COLOR;
            SendMessage(GetDlgItem(hw,IDC_TOOLBAR), TB_ADDBITMAP, 0, (LPARAM)&tbab);
            ZeroMemory(tbb, sizeof(tbb));
            tbb[0].iBitmap = STD_FILENEW;
            tbb[0].fsState = TBSTATE_ENABLED;
            tbb[0].fsStyle = TBSTYLE_BUTTON;
            tbb[0].idCommand = IDM_FILE_NEW;
            tbb[1].iBitmap = STD_FILEOPEN;
            tbb[1].fsState = TBSTATE_ENABLED;
            tbb[1].fsStyle = TBSTYLE_BUTTON;
            tbb[1].idCommand = IDM_FILE_OPEN;
            tbb[2].iBitmap = STD_FILESAVE;
            tbb[2].fsState = TBSTATE_ENABLED;
            tbb[2].fsStyle = TBSTYLE_BUTTON;
            tbb[2].idCommand = IDM_FILE_SAVEAS;
            SendMessage(GetDlgItem(hw,IDC_TOOLBAR), TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);
            return 1;
    }
    return 0;
}

int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    h = GetModuleHandle(0); // индусам передаём привет
    /* инициализация контролов */
    cc.dwSize = sizeof(INITCOMMONCONTROLSEX);
    cc.dwICC = ICC_BAR_CLASSES;    
    InitCommonControlsEx(&cc);
    /* создание главного окна */
    DialogBoxParam(h,"tmpl",hw,DlgProc,0);
    return nresult;
}
dialog.rc:
Код
#include <dialog.h>

tmpl DIALOG 50,50,100,100
STYLE WS_VISIBLE|WS_OVERLAPPEDWINDOW
CAPTION "ImgView"
{
    CONTROL "",IDC_TOOLBAR,TOOLBARCLASSNAME,WS_CHILD|WS_TABSTOP|CCS_ADJUSTABLE|CCS_NODIVIDER|CCS_NOPARENTALIGN,0,0,100,0
    CONTROL "",IDC_STATUS,"msctls_statusbar32",0,0,0,0,0
}
dialog.h:
Код
#define IDM_EXIT 0
#define IDC_STATUS 1
#define IDC_TOOLBAR 2
#define IDM_FILE_NEW 3
#define IDM_FILE_OPEN 4
#define IDM_FILE_SAVEAS 5

PM   Вверх
Earnest
Дата 10.11.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Скорее всего, тулбар сам не может разместиться. Посмотри Спаем, какие у него размеры. То, что ты задаешь в ресурсах, ему до лампочки. Там ведь нет загрузки кнопок (при создании). А тулбар определяет свой размер исходя из кнопок.

Так что проще все делать руками, динамически.


--------------------
...
PM   Вверх
Loginanton
Дата 11.11.2009, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



а не подскажите как посмотреть размер? никогда просто не пользовался spy++ и в интернете не нахожу
PM   Вверх
Earnest
Дата 11.11.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Spy - это утилита, которая входит в набор VisualStudio. А смотреть просто: наводишь на окно, смотришь свойства.


--------------------
...
PM   Вверх
Mikl_
Дата 12.11.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: нет
Всего: 14



Loginanton, 
пример тулбара на ассемблере nasm под WinXP

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  toolbar.rar 9,05 Kb
PM MAIL   Вверх
Loginanton
Дата 28.11.2009, 06:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



пытаюсь добавить свои изображения на кнопки тулбара. но изображение добавляется только на первую кнопку. помогите пожалуйста.
Код

CreateWindowEx(0,TOOLBARCLASSNAME,0,WS_CHILD|WS_VISIBLE,0,0,0,0,hw,0,h,0);
SendMessage(ht, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
TBADDBITMAP tbab;
tbab.hInst = 0;
tbab.nID = (UINT_PTR)LoadBitmap(h,"LOL");
LRESULT iImageOffset = SendMessage(ht, TB_ADDBITMAP, 0, (LPARAM)&tbab);
TBBUTTON tbb[4];
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = iImageOffset + 0;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].idCommand = IDM_OPEN;
tbb[1].iBitmap = iImageOffset + 1;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].idCommand = IDM_SAVE;
tbb[2].iBitmap = iImageOffset + 2;
tbb[2].fsState = TBSTATE_ENABLED;
tbb[2].fsStyle = TBSTYLE_BUTTON;
tbb[2].idCommand = IDM_SAVE;
tbb[3].iBitmap = iImageOffset + 3;
tbb[3].fsState = TBSTATE_ENABLED;
tbb[3].fsStyle = TBSTYLE_BUTTON;
tbb[3].idCommand = IDM_SAVE;
SendMessage(ht, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM)&tbb);
ресурс:
Код
LOL BITMAP "tb.bmp"
Без iImageOffset тоже самое. А если писать так:
Код
tbab.hInst = h;
tbab.nID = LOL;
 то выдаёт ошибку (VS2008) что LOL неизвестный индефикатор
PM   Вверх
Loginanton
Дата 28.11.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 8.11.2007

Репутация: нет
Всего: нет



уже сам понял ошибку: надо писать так SendMessage(ht, TB_ADDBITMAP, 4, (LPARAM)&tbab);
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.