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

Почему не работает LoadBitmap

16.11.2013, 02:07. Показов 10845. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.Написал по книжке код.Должен грузить картинку в окно.Должен работать.Но не работает.

C++
1
2
3
4
5
6
7
     case WM_PAINT:
   ...
    hBmp =LoadBitmap( NULL,L"IDB_AZ" ); или так   hBmp =LoadBitmap(  hInstance,L"IDB_AZ" );
    hMemDC = CreateCompatibleDC(hdc); // Создание совместимого контекста
    SelectObject(hMemDC,hBmp); // Помещение картинки в контекст  
    StretchBlt(hdc,xi-100,yi-100,200,200,hMemDC,0,0,wi,hi,SRCCOPY); 
    DeleteDC(hMemDC);
В файле .rc :
C++
1
            IDB_AZ                BITMAP                 "3346974_358.bmp"
Загрузка картинки с LoadImage работает ,а с LoadBitmap нет.
Подскажите,пожалуйста.Почему?Есть особенности?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.11.2013, 02:07
Ответы с готовыми решениями:

Bitmap cImage = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BITMAP1) error
переменная cImage имеет тип Bitmap, необходимо в нее загрузить изображение .bmp, функция LoadBitmap() возвращает HBITMAP, как избежать...

Не ищется функция LoadBitmap
Всем доброго времени суток, Проблема такая: не ищется функция LoadBitmap из gdi32.lib отрывок из программы extern...

Как считать картинку из файла и вывести её на весь экран?(LoadBitmap,SetBitmap?)
Есть картинка 1.bmp.Как её считать и вывести на весь экран?

7
Заблокирован
16.11.2013, 02:12
Но LoadBitmap() загружает изображения из ресурсов, а не из файлов.
И здесь об этом написано.
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
16.11.2013, 09:13  [ТС]
Да из ресурсов.В файле описания ресурсов поместил нужную строчку(см .выше) ,изображение bmp поместил в папку с файлом .rc.Дальше компиляция.Файл .res создается автоматически в VS.Вроде все.Должно работать.Но не работает.Подскажите,как загрузить картинку из ресурсов.Заранее спасибо.
0
21 / 10 / 5
Регистрация: 07.01.2013
Сообщений: 222
16.11.2013, 14:50
Из ресурсов картинку можно загрузить вот так к примеру:
C++
1
hBmp = LoadBitmap(GetModuleHandle(0), MAKEINTRESOURCE(IDB_BITMAP1))
0
 Аватар для FreeMan108
121 / 121 / 32
Регистрация: 04.03.2013
Сообщений: 370
16.11.2013, 14:55
Вот пример

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
#define UNICODE
#define _UNICODE
#include <windows.h>
 
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
 
wchar_t szClassName[ ] = L"WindowsApp";
HINSTANCE hInst;
 
int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;
    MSG msg;
    WNDCLASSEX wincl;
 
    wincl.hInstance = hInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WndProc;
    wincl.style = CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
 
    wincl.hbrBackground = (HBRUSH) (HBRUSH) (COLOR_WINDOW + 1);;
 
    if (!RegisterClassEx (&wincl))
        return 0;
    
    hInst = hInstance;
 
    hwnd = CreateWindowEx (
           0,
           szClassName,
           L"Windows App",
           WS_OVERLAPPEDWINDOW,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           CW_USEDEFAULT,
           HWND_DESKTOP,
           NULL,
           hInstance,
           NULL
           );
 
    ShowWindow (hwnd, nFunsterStil);
 
    while (GetMessage (&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        static int cxClient, cyClient;
        
        static HBITMAP hBmp;
        static BITMAP  bmp;
        
        HDC hPaintDC, hMemDC;
        PAINTSTRUCT ps;
        HGDIOBJ hOld;
    switch (message)
    {
        case WM_CREATE:
             //hBmp = (HBITMAP)LoadImage (hInst, L"IDB_AZ", IMAGE_BITMAP, 0, 0, LR_COPYFROMRESOURCE);
             hBmp = LoadBitmap (hInst, L"IDB_AZ");
             GetObject (hBmp, sizeof (BITMAP), &bmp);
             break;
        case WM_PAINT:
             hPaintDC = BeginPaint (hwnd, &ps);
             hMemDC = CreateCompatibleDC (hPaintDC);
             hOld = SelectObject (hMemDC, hBmp);
             
             StretchBlt (
             hPaintDC,
             0, 0, 
             cxClient, cyClient,
             hMemDC,
             0, 0, 
             bmp.bmWidth, bmp.bmHeight,
             SRCCOPY );
             
             SelectObject (hMemDC, hOld);
             DeleteDC (hMemDC);
             EndPaint (hwnd, &ps);
             break;
        case WM_SIZE:
             cxClient = LOWORD (lParam);
             cyClient = HIWORD (lParam);
             break;
        case WM_DESTROY:
             DeleteObject (hBmp);
            PostQuitMessage (0);
            break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}
Цитата Сообщение от aznvsk Посмотреть сообщение
hBmp =LoadBitmap( NULL,L"IDB_AZ" ); или так hBmp =LoadBitmap( hInstance,L"IDB_AZ" ); hMemDC = CreateCompatibleDC(hdc); // Создание совместимого контекста SelectObject(hMemDC,hBmp); // Помещение картинки в контекст StretchBlt(hdc,xi-100,yi-100,200,200,hMemDC,0,0,wi,hi,SRCCOPY); DeleteDC(hMemDC);
1. Нельзя загружать картинку при каждой перерисовке окна. Неэффективно.
2. Нет DeleteObject (см. WM_DESTROY). Типичная утечка памяти.
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
18.11.2013, 15:38  [ТС]
Добрый вечер.Спасибо за ответ.Попробовал,как посоветовали.По всякому.
Компилируется.Но не работает.Странно.Может надо подключать дополнительные файлы в visual studio,или что-то с добавлением ресурса(но вроде все правильно).Со строчкой 2-работает,с 1-не работает.Компилируется,но не работает.

Ведь меняется только функция получения hBmp.


1) hBmp = LoadBitmap(hInstance,L"IDB_AZ");// не работает

2) hBmp = (HBITMAP)LoadImage(NULL,L"C:\\Documents and Settings\\Admin\\My Documents\\Загрузки\\Картинки разные\\3346974_358.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);// работает


hMemDC = CreateCompatibleDC(hdc);
SelectObject (hMemDC, hBmp);
BitBlt(hdc,xi,yi,100,100,hMemDC,0,0,SRCC OPY);

DeleteDC(hMemDC);
Может кто знает в чем причина.Заранее спасибо.

Добавлено через 11 часов 32 минуты
Заметил,что не только картинка не грузится, но и иконка из ресурсов не грузится.
DrawIcon(hdc,300,200,LoadIcon........... ......не работает
DrawIcon(hdc,300,300,(HICON)LoadImage... ............работает,
но w.hIcon =LoadIcon(hInstance,...)......работает


По моему,что-то с ресурсами.Или надо что-то добавить,или флаг установить,или функцию в код добавить.
0
26 / 26 / 8
Регистрация: 14.05.2011
Сообщений: 242
18.11.2013, 16:34
тебе же уже написали, добавляешь файл в ресурсы и потом из ресурсов его получаешь методом MAKEINTRESOURCE()

тоесть если у тебя проект в мультибайтовой кодировке то будет выглядеть так:
C++
1
hBmp = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1))
а если юникод кодировка то:
C++
1
hBmp = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDB_BITMAP1))
не забывай использовать MAKEINTRESOURCE
0
4 / 4 / 2
Регистрация: 17.10.2013
Сообщений: 131
18.11.2013, 17:14  [ТС]
Спасибо.
Заработало.
Все дело в кодировке,точнее в букве W (MAKEINTRESOURCEW).
Не знал.
Ве время писал без буквы,т.е. RESOURCE.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2013, 17:14
Помогаю со студенческими работами здесь

Почему смена текста работает только один раз? Что неправильно в коде и почему?
Нужно чтобы при щелчке мыши на поверхности кнопки текст метки Label изменялся на текст окна редактора текста (TextBox). partial class...

Почему выводится в виде таблицы и почему не работает сортировка
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Ноутбук работает только с Wi Fi роутера дома, в кафе не работает и везде. Почему?
Подскажите пожалуйста, почему у меня ноутбук с виндой 7, работает вай фай только дома с роутера. А когда я прихожу в кафе или в парк, у...

Не работает удаление пробелов в строке! Подскажите пожалуйста, почему не работает?
Здравствуйте! Скажите пожалуйста, почему не работает данный код; должно брать строку, которую ввёл пользователь, удалять из неё все...

Почему один и тот-же код в WindowsForms работает, а в Web не работает?
Здравствуйте, подскажите почему один и тот-же код в WindowsForms работает, а в Web не работает. Код WindowsForms: namespace...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru