Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 2

Не создаётся Кнопка с Изображением

22.10.2021, 22:25. Показов 2416. Ответов 2

Студворк — интернет-сервис помощи студентам
Нужно вывести кнопки с картинка, картинки загружаю как через ресурсы так и через просто путь (оба не работают) везде пишут про SendMessage, он тоже не работает, BS_BITMAP не забыл, и на вид всё учтено , но все равно не работает. С изображениями самими по себе всё в порядке, они неполоманые.

Помогите найти причину почему кнопки грузятся без ищображений.

Полный код:
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
#include <windows.h>
#include "resource.h"
 
WNDCLASSEX window_class; 
HWND window_handler; 
 
WNDCLASSEX wc_btn1;
HWND Button1;
HWND Button2;
HWND Button3;
 
HBITMAP img1, img2, img3;
 
 
LRESULT CALLBACK Btn1Proc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    MSG msg; 
 
    memset(&window_class,0,sizeof(window_class));
    window_class.cbSize         = sizeof(WNDCLASSEX);
    window_class.lpfnWndProc    = WndProc; 
    window_class.hInstance      = hInstance;
    window_class.hCursor        = LoadCursor(NULL, IDC_ARROW);
    window_class.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    window_class.lpszClassName  = "WindowClass";
    window_class.hIcon          = LoadIcon(NULL, IDI_APPLICATION); 
    window_class.hIconSm        = LoadIcon(NULL, IDI_APPLICATION); 
    
    memset(&wc_btn1, 0, sizeof(wc_btn1));
    wc_btn1.cbSize          = sizeof(WNDCLASSEX);
    wc_btn1.lpfnWndProc     = Btn1Proc; 
    wc_btn1.hInstance       = hInstance;
    wc_btn1.hbrBackground   = (HBRUSH)(COLOR_WINDOW+2);
    wc_btn1.lpszClassName   = "Button 1";
 
    if(!RegisterClassEx(&wc_btn1)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    wc_btn1.lpszClassName   = "Button 2";
    
    if(!RegisterClassEx(&wc_btn1)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    wc_btn1.lpszClassName   = "Button 3";
    
    if(!RegisterClassEx(&wc_btn1)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    
    if(!RegisterClassEx(&window_class)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
    
    window_handler = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        "WindowClass",
        "Caption",
        WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, 
        CW_USEDEFAULT,
        820, 
        320, 
        NULL,
        NULL,
        hInstance,
        NULL);
    
    
    SendMessage(Button1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)img1);
    
 
    if(window_handler == NULL) {
        MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    while(GetMessage(&msg, NULL, 0, 0) > 0) { 
        TranslateMessage(&msg); 
        DispatchMessage(&msg); 
    }
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        
        case WM_CREATE: {
            Button1 = CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "Button 1",
                NULL,
                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_BITMAP,
                50, 35,
                200, 200,
                hwnd,
                NULL,
                GetModuleHandle(NULL),
                NULL
            );
            Button2 = CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "Button 2",
                NULL,
                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_BITMAP,
                300, 35,
                200, 200,
                hwnd,
                NULL,
                GetModuleHandle(NULL),
                NULL
            );
            Button3 = CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "Button 3",
                NULL,
                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_BITMAP,
                550, 35,
                200, 200,
                hwnd,
                NULL,
                GetModuleHandle(NULL),
                NULL
            );
            img1 = (HBITMAP)LoadImage(GetModuleHandle(NULL), 
                "A:\\img1.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
            img2 = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IMAGE2));
            SendMessage(Button1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)img1);
            SendMessage(Button2, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)img2);
            break;
        }
            
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        
        
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
LRESULT CALLBACK Btn1Proc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        
        case WM_CREATE: {
            break;
        }
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        
        
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
Главная чатсь кода:
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
...
 
case WM_CREATE: {
            Button1 = CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "Button 1",
                NULL,
                WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON | BS_BITMAP,
                50, 35,
                200, 200,
                hwnd,
                NULL,
                GetModuleHandle(NULL),
                NULL
            );
 
...
 
img1 = (HBITMAP)LoadImage(GetModuleHandle(NULL), 
                "A:\\img1.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
            img2 = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IMAGE2));
            SendMessage(Button1, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)img1);
            SendMessage(Button2, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,(LPARAM)img2);
 
...
Файл рес. :
.rc:
Code
1
2
3
4
5
6
#include "resource.h"
#include <windows.h>
 
IMAGE1  BITMAP "img1.bmp"
IMAGE2  BITMAP "img2.bmp"
IMAGE3  BITMAP "img3.bmp"
.h:
C
1
2
3
#define IMAGE1  101
#define IMAGE2  102
#define IMAGE3  103
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2021, 22:25
Ответы с готовыми решениями:

Почему создаётся «промежность» под изображением?
Почему создаётся «промежность» под изображением?

кнопка с изображением
как загрузить файл чтобы на кнопке было его изображение? в книжке дан пример,(SBBrush-&gt;Gliph(&quot;4.Bmp&quot;)) но у меня прога...

Кнопка с изображением
Создал окно WinApi добавил изображение, 3 кнопки, на каждую с которых нужно добавить изображение, но не знаю как Вот код: #include...

2
0 / 0 / 0
Регистрация: 28.10.2018
Сообщений: 2
24.10.2021, 17:38  [ТС]
C
1
2
3
4
5
6
7
8
case WM_PAINT:
PAINTSTRUCT ps;
img1 = LoadBitmap(hInstance, MAKEINTRESOURCE(IMAGE1));
HDC hDC = BeginPaint(hwnd, &ps);
HDC hMemDC = CreateCompatibleDC(hDC);
SelectObject(hMemDC, img1);
BitBlt(hDC, 0, 0, 400, 400, hMemDC, 0, 0, SRCCOPY);
EndPaint(hwnd, &ps);
Только через это сработало
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.10.2021, 10:07
Цитата Сообщение от Albion1488 Посмотреть сообщение
wc_btn1.lpszClassName   = "Button 1";
Это не стандартные классы кнопок, а ваши личные классы кнопок.

Стандартные классы кнопок не нужно регистрировать, они называются "BUTTON", их код обрабатывает система.

Если же вы регистрируете свои классы окон, то соответственно сами должны обрабатывать все нужные вам сообщения по отрисовке (и установке картинок).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2021, 10:07
Помогаю со студенческими работами здесь

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

Кнопка с изображением и текстом
Доброго времени суток. Задача: сделать стиль кнопок для приложения. Вместо фона кнопки использую заранее подготовленные изображения. ...

Кнопка с изображением и текстом
Что-то не могу разобраться как сделать кнопку, фон которой изображение? Делаю так &lt;button type=&quot;button&quot;...

Не создается кнопка
... WNDCLASSEX ShotMenu_class; ShotMenu_class.cbClsExtra = 0; ShotMenu_class.cbSize = sizeof(WNDCLASSEX); ...

Не создается кнопка
При клике на button-2 должно создаться еще одно меню с кнопками @bot.message_handler(commands=) def welcome(message): #KeyBoard ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru