Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/27: Рейтинг темы: голосов - 27, средняя оценка - 4.96
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641

CreateToolbarEx

26.05.2011, 22:26. Показов 5458. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ошибка при выполнение функции.вот её код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
bool OnCreate(HWND hwnd,LPCREATESTRUCT)
{
    //панель инструментов
    TBBUTTON tbb[3];
    for(int i=0; i<3; i++)
    {
    tbb[i].iBitmap=0;
    tbb[i].idCommand=300+i;
    tbb[i].fsState=TBSTATE_ENABLED;
    }
    CreateToolbarEx(hwnd,WS_CHILD|WS_BORDER|WS_VISIBLE,-1,3,hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));
    return TRUE;
}
при выполнение такого кода появляется такое сообщение


если выполнять без этого
C++
1
CreateToolbarEx(hwnd,WS_CHILD|WS_BORDER|WS_VISIBLE,-1,3,hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));
то все работает нормально
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2011, 22:26
Ответы с готовыми решениями:

Создание ToolBar: CreateToolbarEx()
Здравствуйте! Не получается создать ToolBar. На мой взгляд все правильно, но вылазит ошибка код

Что за функция CreateToolbarEx?
Ви не могли б мене обяснить мне об функции CreateToolbarEx

undefined reference to `CreateToolbarEx@52'
Набрал код из примера в книге на приложение с тулбаром, но не могу создать тулбар с помощью функции CreateToolbarEx так как получаю ошибку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.05.2011, 14:04  [ТС]
up

очень хотелось бы што бы кто то помог

Добавлено через 25 минут
кажись разобрался...
перепутал порядок аргументов(поменял 2 и 3)

но все равно панель интструментов не появляется
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
27.05.2011, 14:08
У структуры tbb явно присвоены значения только трем полям, остальные поля (fsStyle, dwData, iString) содержат х.з. что.
Подозрительно выглядит iBitmap=0, может надо iBitmap=I_IMAGENONE (учитываем, что I_IMAGENONE != 0).
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.05.2011, 14:26  [ТС]
вот исправленный код (все равно панель инструментов не появляется)
C++
1
2
3
4
5
6
7
8
9
10
TBBUTTON tbb[3];
    memset(&tbb,0,sizeof(tbb));
    for(int i=0; i<3; i++)
    {
    
    tbb[i].iBitmap=i;
    tbb[i].idCommand=300+i;
    tbb[i].fsState=TBSTATE_ENABLED;
    }
    CreateToolbarEx(hwnd,-1,WS_CHILD|WS_BORDER|WS_VISIBLE,3,hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));
так iBitmap - это же вроде номер кнопки, а макрос выглядит так #define I_IMAGENONE (-2)


п.с. у меня в программе есть меню, может оно как то мешает?
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
27.05.2011, 14:53
Это обнуляет только первую структуру, а у вас их три
C++
1
2
TBBUTTON tbb[3];
memset(&tbb,0,sizeof(tbb));
iBitmap
Zero-based index of the button image. Set this member to I_IMAGECALLBACK, and the toolbar will send the TBN_GETDISPINFO notification to retrieve the image index when it is needed.
Version 5.81. Set this member to I_IMAGENONE to indicate that the button does not have an image. The button layout will not include any space for a bitmap, only text.

If the button is a separator, that is, if fsStyle is set to BTNS_SEP, iBitmap determines the width of the separator, in pixels. For information on selecting button images from image lists, see TB_SETIMAGELIST message.
0
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
27.05.2011, 15:08  [ТС]
я так пробовал
C++
1
2
3
4
5
6
7
8
9
10
    TBBUTTON tbb[3];
    
    for(int i=0; i<3; i++)
    {
    memset(&tbb[i],0,sizeof(tbb[i]));
    tbb[i].iBitmap=i;
    tbb[i].idCommand=300+i;
    tbb[i].fsState=TBSTATE_ENABLED;
    }
    CreateToolbarEx(hwnd,-1,WS_CHILD|WS_BORDER|WS_VISIBLE,3,hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));
не че не меняется

щас про бит мап прочитаю

Добавлено через 5 минут
с английским у меня туго(так же как с русским)
можешь скажешь че там написанно


и скажи плиз как надо ваше код испрапвить
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
27.05.2011, 16:38
Переводчик не профессиональный, так что..

iBitmap
Берущий отсчет с нуля индекс изображения кнопки. Установите для данного члена значение I_IMAGECALLBACK и панель инструментов будет отправлять уведомление TBN_GETDISPINFO для получения индекса изображения, когда ей это понадобится.
Версия 5.81 (библиотеки элементов управления). Установите для данного члена значение I_IMAGENONE для указания того, что данная кнопка не имеет изображения. Компановка (разметка) кнопки не будет включать какое-либо пространство для растрового образа (т.е. изображения), а будет содержать только текст.
Если кнопка является разделителем и для поля fsStyle установлено значение BTNS_SEP, то значение поля iBitmap устанавливает ширину разделителя в пикселах. Для получения сведений о выборе изображения из списка см. описание сообщения TB_SETIMAGELIST.


По поводу как правильно, вроде и так подсказываю, но я же не знаю что там у тебя реально в других переменных. Например, в hwnd, действительный хендл или нет.

А вот в CreateToolbarEx второй и третий аргументы поменяй местами назад. Сначала было правильно. Второй параметр стиль, третий - идентификатор, а четвертый - количество изображений в битовом образе (если нет изображений, то ноль там должен быть).
0
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
28.05.2011, 10:27  [ТС]
Цитата Сообщение от bigredcat Посмотреть сообщение
А вот в CreateToolbarEx второй и третий аргументы поменяй местами назад. Сначала было правильно. Второй параметр стиль, третий - идентификатор, а четвертый - количество изображений в битовом образе (если нет изображений, то ноль там должен быть).
так если делать аргументы то выдается ошибка как в первом посту, а так нет ее


вообщем кидаю весь код... только там много лишнего


файл с ресурсами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "head.h"
 
Main MENU
{
    POPUP "&Фон"
    {
        MENUITEM "&Синий",MI_BLUE
        MENUITEM "&Зеленый",MI_GREEN
        MENUITEM SEPARATOR
        MENUITEM "&Выход",MI_EXIT
    }
}
 
 
//подключаем рисунок
ID_BTNS BITMAP "lol.bmp"
хеадер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#define MI_BLUE 100
#define MI_GREEN 101
#define MI_EXIT 102
 
 
#define ID_1 300 // панель инструментов
#define ID_2 301
#define ID_3 302
#define ID_BTNS 400
 
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>  // панель инструментов
#pragma comment(lib, "Comctl32.lib")
 
 
// прототипы
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);//оконаая функция
void OnDestroy(HWND);
void OnPaint(HWND hwnd);
bool OnCreate(HWND,LPCREATESTRUCT);
void OnCommand(HWND,int,HWND,UINT);
void OnRBottonDown(HWND,BOOL,int x,int y,UINT);
char *VibErr(const int a);
 
MSG Msg;
 
 
HPEN hRedPen;
HPEN hGreenPen;
HPEN hBluePen;
 
HBRUSH hRedBrush=CreateSolidBrush(RGB(255,120,100));
HBRUSH hGreenBrush=CreateSolidBrush(RGB(120,250,100));
HBRUSH hBlueBrush=CreateSolidBrush(RGB(120,120,255));
 
 
//шрифты
HFONT hFont1;
и сам код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
#include "head.h"
 
 
int sw;
HINSTANCE hI; // дескриптор приложения
 
 
int WINAPI WinMain(HINSTANCE hInst,HINSTANCE,LPSTR,int)
{
    try
    {
        char szClassName[]="MainWindow";//Произвольное имя класса главного ок
        char szTitle[]="бэ..жн..жена)";//Произвольный заголовок окна
        hI=hInst;
 
        WNDCLASS wc;//Структура wc типа WNDCLASS для задания характеристик окна 
            /*3арвгястрируен класс главного окна*/
        memset(&wc,0,sizeof(wc));
        wc.lpfnWndProc=WndProc;//Определяем оконную процедуру для главного окна 
        wc.hInstance=hInst;
        wc.hIcon=LoadIcon(NULL, IDI_APPLICATION) ; // Стандартная пиктограмма
        wc.hCursor=LoadCursor (NULL, IDC_ARROW) ; // Стандартный курсор мыши
        wc.hbrBackground=GetStockBrush (3) ; //Светло-серый фона ОКЩ
        wc.lpszMenuName="Main";
        wc.lpszClassName=szClassName;//Имя класса окна
        if(!RegisterClass(&wc))
            throw 1;//Вызов функции Windows регистрации класса окна
 
        HWND hwnd=CreateWindow
            (
            szClassName, //класс 
            szTitle,// заголовок окна
            WS_OVERLAPPEDWINDOW,//стиль
            10,//х координата
            10, //у коорданата
            600,//ширина
            400, //вышина
            HWND_DESKTOP,//родители
            NULL,//меню
            hInst,//
            NULL//
            ) ;
        ShowWindow(hwnd,SW_SHOWNORMAL);//Вызов функции Windows показа окна
                /*Организуем цикл обнаружения сообщений*/
        while(GetMessage (&Msg,NULL, 0, 0) ) //Если есть сообщенР1е,  передать его нам
        {   
            DispatchMessage (&Msg) ; //и вызвать оконную процедуру WndProc
            TranslateMessage(&Msg);
        }   
        return 0;
    }
    catch(int a)
    {
        MessageBox (NULL, VibErr(a), "Ошибка", MB_OK | MB_ICONWARNING | MB_ICONHAND);
    }
    catch(...)
    {
        MessageBox (NULL, "Неизвестная ошибка", "КРИТИЧЕСКАЯ ОШИБКА", MB_OK | MB_ICONWARNING | MB_ICONHAND);
    }
 
}
 
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
    switch(msg)
    {//Переход по значению msg - номеру coo6mem>tx
    HANDLE_MSG(hwnd,WM_DESTROY, OnDestroy);
    HANDLE_MSG(hwnd,WM_PAINT,OnPaint);
    HANDLE_MSG(hwnd,WM_CREATE,OnCreate);
    HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);
    HANDLE_MSG(hwnd,WM_RBUTTONDOWN,OnRBottonDown);
 
    
    default://В случае всех остальных сообщений Windows обработка
        return(DefWindowProc (hwnd,msg, wParam, lParam) );//их по умолчанию
    }//Конец оператора switch
}//Конец функции WndProc 
bool OnCreate(HWND hwnd,LPCREATESTRUCT)
{
    hRedPen=CreatePen(PS_SOLID,4,RGB(150,0,0));
    hGreenPen=CreatePen(PS_SOLID,4,RGB(0,150,0));
    hBluePen=CreatePen(PS_SOLID,4,RGB(0,0,150));
 
    hRedBrush=CreateSolidBrush(RGB(255,120,100));
    hGreenBrush=CreateSolidBrush(RGB(120,250,100));
    hBlueBrush=CreateSolidBrush(RGB(120,120,255));
 
 
    //создание структуры шрифтов 
    LOGFONT lf;
    ZeroMemory(&lf,sizeof(lf));
    // создание шрифта
    lf.lfHeight=60;
    strcpy(lf.lfFaceName,"Times New Roman Cyr");
    lf.lfEscapement=0; // угол наклона 0.0 град
    lf.lfItalic=1; // курсивом 
    hFont1=CreateFontIndirect(&lf);
 
    
    //панель инструментов
    TBBUTTON tbb[3];
    
    for(int i=0; i<3; i++)
    {
    memset(&tbb[i],0,sizeof(tbb[i]));
    tbb[i].iBitmap=i;
    tbb[i].idCommand=300+i;
    tbb[i].fsState=TBSTATE_ENABLED;
    }
    CreateToolbarEx(hwnd,-1,WS_CHILD|WS_BORDER|WS_VISIBLE,3,hI,ID_BTNS,tbb,3,16,16,16,16,sizeof(TBBUTTON));
 
 
    
    return TRUE;
}
 
 
void OnDestroy(HWND)
{
     PostQuitMessage(0);//вызвать функцию Windows завершения приложения
}
void OnPaint(HWND hwnd)
{
    char szText[]="строка текста:";
    PAINTSTRUCT ps; //строуктура для рисования в рабочей области
    RECT r; // прямоугольник для надписей
    TEXTMETRIC tm; // получение характеристек шрифтов
    HDC hdc=BeginPaint(hwnd,&ps);
    SetBkMode(hdc,TRANSPARENT);  //прозрачный текст
    SetTextColor(hdc,RGB(100,100,225));
    TextOut(hdc,5,10,szText,strlen(szText));
 
    
    Rectangle (hdc,90,120,550,320);
    SetTextColor(hdc,RGB(128,0,0));
    HFONT hOldFont=SelectFont(hdc,hFont1);
    GetTextMetrics(hdc,&tm);
    r.left=0;
    r.right=600;
    r.top=10;
    r.bottom=400;
    
    DrawText(hdc,"Абж А б ж",strlen("Абж А б ж"),&r,DT_CENTER);
 
    if (sw==1)
        FillRect(hdc,&ps.rcPaint,hBlueBrush);
    if (sw==2)
        FillRect(hdc,&ps.rcPaint,hGreenBrush);
 
 
      //Рисование
 
    
    Rectangle(hdc,10,40,110,140);// Квадрат инструментами по умолчанию
    SelectPen(hdc,hRedPen);//Выберем в контекст новое перо
    SelectBrush(hdc,hRedBrush); //и новую кисть
    Ellipse(hdc,130,40,230,140);//Круг новыми инструментами
    SelectPen(hdc,hGreenPen);//Выберем новое перо
    SelectBrush(hdc,hGreenBrush); //и новую кисть
    Pie(hdc,250,40,350,140,350,140,250,140);//Сектор опять новыми инструментами
    SelectPen(hdc,hBluePen);//Выберем новое перо
    SelectBrush(hdc,hBlueBrush);//и новую кисть
    Chord(hdc,370,40,470,140,470,125,370,125);//Сегмент
 
 
 
    // везде абж)
    for(int i=10;i<1000;i+=10)
    {
        r.right+=i;
        r.top+=i;
        DrawText(hdc,"Абж А б ж",strlen("Абж А б ж"),&r,DT_CENTER);
    }
 
    
    
    EndPaint(hwnd,&ps);
 
}
 
 
 
 
 
void OnCommand(HWND hwnd,int id,HWND,UINT)
{
    switch(id)
    {
    case MI_BLUE:
        InvalidateRect(hwnd,NULL,TRUE);
        sw=1;
        break;
    case MI_GREEN:
        sw=2;
        InvalidateRect(hwnd,NULL,TRUE);
        break;
    case MI_EXIT:
        DestroyWindow(hwnd);
    case ID_1: // Нажали      на  кнопку    1  -  изменить    цвет 
        sw=1; 
        InvalidateRect(hwnd,NULL,TRUE); 
        break ; 
     case ID_2: // Нажали       на  кнопку   2  -  изменить    цвет 
         sw=2 ; 
         InvalidateRect(hwnd,NULL,TRUE); 
        break; 
     case ID_3: //Нажали       на  кнопку    3  -  завершить      приложение 
        DestroyWindow(hwnd); 
    }
}
 
 
void OnRBottonDown(HWND hwnd,BOOL,int x,int y,UINT)
{
    // ПЛАВУЮЩИе МЕНЮ
    char str1[]="ФoH: Синий"; 
    char str2[]="Фон: Зеленый";       
    char str3[]="Выход"; 
    RECT rect; 
    HMENU hPopupMenu=CreatePopupMenu(); 
    AppendMenu (hPopupMenu,  MF_STRING,  MI_BLUE,  str1) ; 
    AppendMenu(hPopupMenu,  MF_STRING,  MI_GREEN, str2); 
    AppendMenu  (hPopupMenu,  MF_SEPARATOR, 0,  NULL); 
    AppendMenu (hPopupMenu,  MF_STRING,  MI_EXIT, str3  ) ; 
    GetWindowRect(hwnd,&rect); 
    TrackPopupMenu  (hPopupMenu,  TPM_LEFTALIGN | TPM_LEFTBUTTON, Msg.pt.x,Msg.pt.y, 0,hwnd,NULL)  ; 
    // _____________________________________________________________________//
}
 
 
char* VibErr(const int a)
{
    char* ret;
    switch(a)
    {
    case 1:
        ret="Не созданно главное окно";
        break;
    case 2:
        ret="Ошибка рисования";
        break;
    default:
        ret="Неизвестная ошибка";
        break;
    }
    return ret;
}
Добавлено через 14 часов 12 минут
сори за up но все еще не решил
0
 Аватар для resource2008
111 / 112 / 18
Регистрация: 11.03.2011
Сообщений: 421
28.05.2011, 15:10
C++
1
2
TBBUTTON tbb[3];
memset(tbb,0,sizeof(TBBUTTON)*3);
попробуй так.
мне кажется, что амперсент там лишний перед tbb, т.к. это уже адрес памяти, точнее адрес начала массива (если указывать без индекса в квадратных скобках)
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
28.05.2011, 19:26  [ТС]
resource2008, не, таже ошибка
0
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
29.05.2011, 19:28  [ТС]
похооду придется жить без панели инструментов(
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
06.06.2011, 09:32
CreateToolBar.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
// CreateToolBar.cpp : Defines the entry point for the application.
//
 
#include "stdafx.h"
 
#include "CommCtrl.h"
#include "resource.h"
 
#pragma comment (lib, "comctl32.lib")
 
#define MAX_LOADSTRING 100
 
HINSTANCE hInst, g_hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
HWND hToolBar, hWndToolbar;
HWND CreateToolBar (HWND hwndParent);
 
ATOM            MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    MSG msg;
    HACCEL hAccelTable;
 
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_CREATETOOLBAR, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    if (!InitInstance (hInstance, nCmdShow)) 
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_CREATETOOLBAR);
 
    while (GetMessage(&msg, NULL, 0, 0)) 
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 
    return msg.wParam;
}
 
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX); 
 
    wcex.style      = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = (WNDPROC)WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon      = LoadIcon(hInstance, (LPCTSTR)IDC_CREATETOOLBAR);
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)CreateSolidBrush(RGB(239, 239, 239));
    wcex.lpszMenuName   = (LPCSTR)IDC_CREATETOOLBAR;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
 
    return RegisterClassEx(&wcex);
}
 
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    HWND hWnd;
    hInst = hInstance;
    g_hInst = hInstance;
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   return TRUE;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    RECT rect;
 
    switch (message) 
    {
    case WM_CREATE:
        hToolBar = CreateToolBar (hWnd);
        break;
    
    case WM_COMMAND:
        
        wmId = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
            break;
        
        case IDM_NULL:
            MessageBox (hWnd, "", "", MB_OK);
            break;
        
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
        
        case WM_SIZE:
            SendMessage (hToolBar, WM_SIZE, 0, 0);
            break;
        
        case WM_PAINT:
            
            hdc = BeginPaint(hWnd, &ps);
            GetClientRect (hWnd, &rect);
            SetBkColor (hdc, RGB(236,233,216));
            ExtTextOut (hdc, 0, 0, ETO_OPAQUE, &rect, NULL, 0, NULL);
            EndPaint(hWnd, &ps);
            break;
        
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_INITDIALOG:
        return TRUE;
    
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return TRUE;
        }
        break;
    }
    return FALSE;
}
 
HWND CreateToolBar (HWND hwndParent)
{
    TBBUTTON tbb[4];
    HIMAGELIST himlHot;
    HBITMAP hBitmapHot;
    INITCOMMONCONTROLSEX icex;
    
    InitCommonControlsEx(&icex);
    
    hWndToolbar = CreateWindowEx (0, TOOLBARCLASSNAME, (LPSTR)NULL,
        WS_CHILD | TBSTYLE_FLAT | WS_BORDER | CCS_NOMOVEY | TBSTYLE_TOOLTIPS,
        0, 0, 0, 0, hwndParent, (HMENU)IDR_TOOLBAR1, g_hInst, NULL);
    
    himlHot = ImageList_Create (24, 24, ILC_COLOR24 | ILC_MASK, 1, 256);
    hBitmapHot = LoadBitmap (g_hInst, MAKEINTRESOURCE(IDB_BITMAP1));
    ImageList_AddMasked (himlHot, hBitmapHot, RGB (255,0, 255));
    SendMessage (hWndToolbar, TB_SETIMAGELIST, 0, (LPARAM)himlHot);
    DeleteObject (hBitmapHot);
    
    SendMessage (hWndToolbar, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), 0);
    
    tbb[0].iBitmap = -1;
    tbb[0].idCommand = IDOK;
    tbb[0].fsState = TBSTATE_ENABLED;
    tbb[0].fsStyle = TBSTYLE_SEP;
    tbb[0].dwData = 0;
 
    tbb[1].iBitmap = 0;
    tbb[1].idCommand = IDM_EXIT;
    tbb[1].fsState = TBSTATE_ENABLED;
    tbb[1].fsStyle = TBSTYLE_BUTTON;
    tbb[1].dwData = 0;
    tbb[1].iString = (int)"Exit";
    
    tbb[2].iBitmap = 1;
    tbb[2].idCommand = IDM_NULL;
    tbb[2].fsState = TBSTATE_ENABLED;
    tbb[2].fsStyle = TBSTYLE_BUTTON;
    tbb[2].dwData = 0;
    tbb[2].iString = (int)":(";
    
    tbb[3].iBitmap = 2;
    tbb[3].idCommand = IDM_ABOUT;
    tbb[3].fsState = TBSTATE_ENABLED;
    tbb[3].fsStyle = TBSTYLE_BUTTON;
    tbb[3].dwData = 0;
    tbb[3].iString = (int)"About";
    
    SendMessage (hWndToolbar, TB_ADDBUTTONS, 4, (LPARAM)&tbb);
    SendMessage (hWndToolbar, TB_SETMAXTEXTROWS, 0, 0);
    ShowWindow (hWndToolbar, SW_SHOW);
    return hWndToolbar;
}

resource.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by CreateToolBar.rc
//
#define IDC_MYICON                      2
#define IDD_ABOUTBOX                    101
#define IDD_CREATETOOLBAR_DIALOG        102
#define IDS_APP_TITLE                   103
#define IDM_ABOUT                       104
#define IDM_EXIT                        105
#define IDS_HELLO                       106
#define IDI_CREATETOOLBAR               107
#define IDI_SMALL                       108
#define IDC_CREATETOOLBAR               109
#define IDR_TOOLBAR1                    110
#define IDB_BITMAP1                     111
#define IDR_MAINFRAME                   112
#define IDM_NULL                        32770
 
#define IDC_STATIC                      -1
 
// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        130
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           110
#endif
#endif

CreateToolBar.rc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
 
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "resource.h"
 
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
 
/////////////////////////////////////////////////////////////////////////////
// Russian resources
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
#ifdef _WIN32
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)
#endif //_WIN32
 
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
 
1 TEXTINCLUDE DISCARDABLE 
BEGIN
    "resource.h\0"
END
 
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
 
IDB_BITMAP1             BITMAP  DISCARDABLE     "bitmap.bmp"
#endif    // Russian resources
/////////////////////////////////////////////////////////////////////////////
 
 
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
 
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
 
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_CREATETOOLBAR       ICON    DISCARDABLE     "CreateToolBar.ICO"
IDI_SMALL               ICON    DISCARDABLE     "SMALL.ICO"
 
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
 
IDC_CREATETOOLBAR MENU DISCARDABLE 
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "E&xit",                       IDM_EXIT
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About ...",                  IDM_ABOUT
    END
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
 
IDC_CREATETOOLBAR ACCELERATORS MOVEABLE PURE 
BEGIN
    "?",            IDM_ABOUT,              ASCII,  ALT
    "/",            IDM_ABOUT,              ASCII,  ALT
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
 
IDD_ABOUTBOX DIALOG DISCARDABLE  22, 17, 230, 75
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About"
FONT 8, "System"
BEGIN
    ICON            IDI_CREATETOOLBAR,IDC_MYICON,14,9,16,16
    LTEXT           "CreateToolBar Version 1.0",IDC_STATIC,49,10,119,8,
                    SS_NOPREFIX
    LTEXT           "Copyright (C) 2011",IDC_STATIC,49,20,119,8
    DEFPUSHBUTTON   "OK",IDOK,195,6,30,11,WS_GROUP
END
 
 
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
 
2 TEXTINCLUDE DISCARDABLE 
BEGIN
    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
    "#include ""windows.h""\r\n"
    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
    "#include ""resource.h""\r\n"
    "\0"
END
 
3 TEXTINCLUDE DISCARDABLE 
BEGIN
    "\r\n"
    "\0"
END
 
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
 
STRINGTABLE DISCARDABLE 
BEGIN
    IDS_APP_TITLE           "CreateToolBar"
    IDS_HELLO               "Hello World!"
    IDC_CREATETOOLBAR       "CREATETOOLBAR"
END
 
#endif    // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
 
 
 
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
 
 
/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED
Вложения
Тип файла: rar others.rar (1.7 Кб, 84 просмотров)
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
06.06.2011, 13:07  [ТС]
Digit@ll, спасибо, чуть позже посмотрю, если все пойму в коде-отпишусь

Добавлено через 1 час 1 минуту
сначала он ругался на отсутствие библиотеки "stdafx.h", я заменил на #include <windows.h>
#include <windowsx.h>

но теперь такая ошибка

Code
1
2
3
4
5
6
7
1>Компиляция ресурсов...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>.\resource.h(31) : fatal error RC1004: unexpected end of file found
1>Журнал построения был сохранен в "file://c:\Documents and Settings\Лежик.АДМ\Мои документы\Visual Studio 2008\Projects\Project1\панель инструментов\панель инструментов\Debug\BuildLog.htm"
1>панель инструментов - ошибок 1, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
06.06.2011, 18:35
ЛеЖиК), не чуди, если надо stdafx.h, то не ищи ему какую-то замену. Его либо используют либо нет.
После последнего #endif сделай перевод строки. ...Простая банальность.
1
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
06.06.2011, 21:17  [ТС]
Цитата Сообщение от Digit@ll Посмотреть сообщение
После последнего #endif сделай перевод строки. ...Простая банальность
спасибо все работает



Цитата Сообщение от Digit@ll Посмотреть сообщение
ЛеЖиК), не чуди, если надо stdafx.h, то не ищи ему какую-то замену. Его либо используют либо нет.
начудил, за то работает)

а серьезно, по каким причинам он может не находить stdafx.h
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
06.06.2011, 22:36
Потому, что его просто нет. )
0
 Аватар для ЛеЖиК)
186 / 61 / 4
Регистрация: 29.04.2011
Сообщений: 641
07.06.2011, 11:07  [ТС]
логично)
просто когда я в VS2008 создаю не пустой проект, то он подключает эту библиотеку, и все работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 09.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru