Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
 Аватар для rolandas
23 / 12 / 2
Регистрация: 20.04.2011
Сообщений: 382

Как установить картинку на фон формы?

26.12.2017, 00:12. Показов 8423. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот минимальный шаблон оконной формы из DEV C++
в той же папке с файлами проекта и картинка фона 1.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        
        case WM_DESTROY: {
            PostQuitMessage(0);
            break;
        }
        
    default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; 
    HWND hwnd; 
    MSG msg; 
 
    memset(&wc,0,sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc   = WndProc; 
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); 
 
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","GlazoVyvorotka",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* width */
        480, /* height */
        NULL,NULL,hInstance,NULL);
 
    if(hwnd == 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;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.12.2017, 00:12
Ответы с готовыми решениями:

Как загрузить картинку на фон
Помогите пожалусто, я самоучка и немогу понять как добавить картинку на фон.

Как поставить на фон диалога картинку?
Доброго времени суток, такой вопрос. Как сделать картинку фоном для диалога? Цвет менять диалога я видел как, а вот картинку не могу...

Как установить на фон формы картинку?
Как установить на фон формы картинку?

8
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
26.12.2017, 18:44
rolandas, замените у себя на
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
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    static HBITMAP hImageBitmap;
    static HBITMAP hImageOldBitmap;
    static HDC hImageDC;
    static BITMAP bm;
    switch(Message) {
        
        case WM_DESTROY: {
            if (hImageBitmap)
            {
                DeleteObject (SelectObject (hImageDC, hImageOldBitmap));
                DeleteDC (hImageDC);
            }
            PostQuitMessage(0);
            break;
        }
        
        case WM_CREATE: {
            hImageBitmap = (HBITMAP) LoadImage (NULL, "1.bmp", 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
            if (hImageBitmap)
            {
                GetObject (hImageBitmap, sizeof (BITMAP), &bm);
                HDC hDC = GetDC (hwnd);
                hImageDC = CreateCompatibleDC (hDC);
                hImageOldBitmap = (HBITMAP) SelectObject (hImageDC, hImageBitmap);
                ReleaseDC (hwnd, hDC);
            }
            break;
        }
        
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint (hwnd, &ps);
            if (hImageBitmap)
                BitBlt (hDC, 0, 0, bm.bmWidth, bm.bmHeight, hImageDC, 0, 0, SRCCOPY);
            EndPaint (hwnd, &ps);
            break;
        }
        
    default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
Цитата Сообщение от rolandas Посмотреть сообщение
картинка фона 1.bmp
24-разрядная должна быть
0
 Аватар для rolandas
23 / 12 / 2
Регистрация: 20.04.2011
Сообщений: 382
28.12.2017, 01:48  [ТС]
спасибо, но не пракатило
ошибка:
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\libmingw32.a(lib64_libmingw3 2_a-crt0_c.o) In function `main':
18 C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c undefined reference to `WinMain'
C:\Users\kirvo\Desktop\cpp\bg2\collect2. exe [Error] ld returned 1 exit status
25 C:\Users\kirvo\Desktop\cpp\bg2\Makefile. win recipe for target 'Project1.exe' failed

решил методом удаляя из найденого исходника кучу кода.
вот такой работает:

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
#include <windows.h>
#define WM_SETFONT 0x0030
 
HWND hwnd01, label01;
HBITMAP hBitmap01 = NULL;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                LPSTR lpCmdLine, int nCmdShow )
{
MSG  msg ;
WNDCLASS wc = {0};
wc.lpszClassName = TEXT( "Keisti Fona" );
wc.hInstance     = hInstance ;
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
wc.lpfnWndProc   = WndProc ;
wc.hCursor       = LoadCursor(0, IDC_ARROW);
 
RegisterClass(&wc);
hwnd01 = CreateWindow( wc.lpszClassName, TEXT("фиг знает что"),
            WS_VISIBLE | WS_SYSMENU,
               GetSystemMetrics(SM_CXSCREEN)/2-400, 
    GetSystemMetrics(SM_CYSCREEN)/2-300, 
    800,600,NULL,NULL,hInstance,NULL);
            
        TCHAR* string01 = new TCHAR[300];
        GetWindowText(label01, string01, 300);
        hBitmap01 = (HBITMAP)LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
            
while( GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
 
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch(msg)
{
case WM_CREATE:
{
 
    CreateWindow(TEXT("STATIC"),TEXT("Просто Текст"),
        WS_VISIBLE | WS_CHILD | SS_CENTER,
        20,20,90,18, 
        hwnd,(HMENU)3,NULL,NULL
        );
 
    CreateWindow(TEXT("button"), TEXT("Закончить"),
                 WS_VISIBLE | WS_CHILD ,
                 680, 520, 80, 25,
                 hwnd, (HMENU) 2, NULL, NULL);
 
    break;
}
 
  case WM_COMMAND:
 
    if (LOWORD(wParam) == 2) {
           PostQuitMessage(0);
  }
 
case WM_PAINT:
{
    PAINTSTRUCT     ps01;
    HDC             hdc01;
    BITMAP          bitmap01;
    HDC             hdcMem01;
    HGDIOBJ         oldBitmap01;
 
    hdc01 = BeginPaint(hwnd01, &ps01);
 
    hdcMem01 = CreateCompatibleDC(hdc01);
    oldBitmap01 = SelectObject(hdcMem01, hBitmap01);
 
    GetObject(hBitmap01, sizeof(bitmap01), &bitmap01);
    BitBlt(hdc01, 0, 0, bitmap01.bmWidth, bitmap01.bmHeight, hdcMem01, 0, 0, SRCCOPY);
 
    SelectObject(hdcMem01, oldBitmap01);
    DeleteDC(hdcMem01);
 
    EndPaint(hwnd01, &ps01);
 
    break;
}
 
  case WM_DESTROY:
  {
     PostQuitMessage(0);
     break;
  }
}
return DefWindowProc(hwnd, msg, wParam, lParam);
}
Миниатюры
Как установить картинку на фон формы?  
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
28.12.2017, 10:57
Цитата Сообщение от rolandas Посмотреть сообщение
спасибо, но не пракатило
Значить неправильно сделали.
Цитата Сообщение от rolandas Посмотреть сообщение
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\libmingw32.a(lib64_libmingw3 2_a-crt0_c.o) In function `main':
18 C:\crossdev\src\mingw-w64-v3-git\mingw-w64-crt\crt\crt0_c.c undefined reference to `WinMain'
Вы что оконное приложение компилировали как консольное?
Цитата Сообщение от rolandas Посмотреть сообщение
решил методом удаляя из найденого исходника кучу кода.
вот такой работает:
Это такой же код как с второго поста (по идее) но намного хуже. Например не освобождается память:
Цитата Сообщение от rolandas Посмотреть сообщение
C++
1
hBitmap01 = (HBITMAP)LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Цитата Сообщение от rolandas Посмотреть сообщение
C++
1
TCHAR* string01 = new TCHAR[300];
0
 Аватар для rolandas
23 / 12 / 2
Регистрация: 20.04.2011
Сообщений: 382
28.12.2017, 12:00  [ТС]
но неработает, вот ваш код:
и ошибка:


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
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    static HBITMAP hImageBitmap;
    static HBITMAP hImageOldBitmap;
    static HDC hImageDC;
    static BITMAP bm;
    switch(Message) {
        
        case WM_DESTROY: {
            if (hImageBitmap)
            {
                DeleteObject (SelectObject (hImageDC, hImageOldBitmap));
                DeleteDC (hImageDC);
            }
            PostQuitMessage(0);
            break;
        }
        
        case WM_CREATE: {
            hImageBitmap = (HBITMAP) LoadImage (NULL, "1.bmp", 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
            if (hImageBitmap)
            {
                GetObject (hImageBitmap, sizeof (BITMAP), &bm);
                HDC hDC = GetDC (hwnd);
                hImageDC = CreateCompatibleDC (hDC);
                hImageOldBitmap = (HBITMAP) SelectObject (hImageDC, hImageBitmap);
                ReleaseDC (hwnd, hDC);
            }
            break;
        }
        
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint (hwnd, &ps);
            if (hImageBitmap)
                BitBlt (hDC, 0, 0, bm.bmWidth, bm.bmHeight, hImageDC, 0, 0, SRCCOPY);
            EndPaint (hwnd, &ps);
            break;
        }
        
    default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
Миниатюры
Как установить картинку на фон формы?  
0
Software Developer
 Аватар для fastb1t
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,336
28.12.2017, 14:12
Цитата Сообщение от rolandas Посмотреть сообщение
но неработает, вот ваш код:
Перед тем как программировать на WinAPI, прочтите хоть одну книгу.
Я что сказал
Цитата Сообщение от decrement Посмотреть сообщение
rolandas, замените у себя на
*заменить, а вы что сделали...
Как-то так
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
#include <windows.h>
 
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    static HBITMAP hImageBitmap;
    static HBITMAP hImageOldBitmap;
    static HDC hImageDC;
    static BITMAP bm;
    switch(Message) {
        
        case WM_DESTROY: {
            if (hImageBitmap)
            {
                DeleteObject (SelectObject (hImageDC, hImageOldBitmap));
                DeleteDC (hImageDC);
            }
            PostQuitMessage(0);
            break;
        }
        
        case WM_CREATE: {
            hImageBitmap = (HBITMAP) LoadImage (NULL, "1.bmp", 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
            if (hImageBitmap)
            {
                GetObject (hImageBitmap, sizeof (BITMAP), &bm);
                HDC hDC = GetDC (hwnd);
                hImageDC = CreateCompatibleDC (hDC);
                hImageOldBitmap = (HBITMAP) SelectObject (hImageDC, hImageBitmap);
                ReleaseDC (hwnd, hDC);
            }
            break;
        }
        
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint (hwnd, &ps);
            if (hImageBitmap)
                BitBlt (hDC, 0, 0, bm.bmWidth, bm.bmHeight, hImageDC, 0, 0, SRCCOPY);
            EndPaint (hwnd, &ps);
            break;
        }
        
    default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc; 
    HWND hwnd; 
    MSG msg; 
 
    memset(&wc,0,sizeof(wc));
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.lpfnWndProc   = WndProc; 
    wc.hInstance     = hInstance;
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = "WindowClass";
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION); 
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION); 
 
    if(!RegisterClassEx(&wc)) {
        MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
        return 0;
    }
 
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","GlazoVyvorotka",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, /* x */
        CW_USEDEFAULT, /* y */
        640, /* width */
        480, /* height */
        NULL,NULL,hInstance,NULL);
 
    if(hwnd == 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;
}
1
 Аватар для rolandas
23 / 12 / 2
Регистрация: 20.04.2011
Сообщений: 382
28.12.2017, 16:44  [ТС]
вот теперь работает. спасибо.
на русском пособие именно DEV C++ Windows Forms подробно не нашел
есть конечно отдельные уроки но совсем не много.
одно замечание - делал бы и с Visual Studio 2010
но на этом приложении скомпилированые программы не работает на компах
где не установлены библиотеки Visual Studio 2010
а сделанные на DEV C++ Windows Form - работает.
ещё лучше на Borland Delphi - на этом скомпилированые программы работает
даже на Windows98. Но на экзамен информатики надо C++
так что DEV C++ Windows Form.
0
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
29.12.2017, 16:48
rolandas, если класс окна используешь разный для каждой формы, то можно поступить и так.
C++
1
2
3
WNDCLASSEX wc;
//...
wc.hbrBackground = CreatePatternBrush((HBITMAP)LoadImage(NULL, TEXT("1.bmp"), 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION));
Или изменить фон во время исполнения приложения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HBRUSH setClassBackground(HWND hwnd, HBRUSH hbr){
    HBRUSH prev;
#ifdef _WIN64
    prev = (HBRUSH)SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)hbr);
#else
    prev = (HBRUSH)SetClassLong(hwnd, GCL_HBRBACKGROUND, (LONG)hbr);
#endif
    return prev;
}
 
//...
 
//ну и под каким-либо событием изменяешь фон
HBRUSH hbr = setClassBackground(hwnd, CreatePatternBrush((HBITMAP)LoadImage(NULL, TEXT("1.bmp"), 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION)));
if(hbr != NULL)
    DeleteObject(hbr);
InvalidateRect(hwnd, NULL, TRUE);
1
 Аватар для rolandas
23 / 12 / 2
Регистрация: 20.04.2011
Сообщений: 382
29.12.2017, 16:58  [ТС]
вот за это:
C++
1
wc.hbrBackground = CreatePatternBrush((HBITMAP)LoadImage(NULL, TEXT("1.bmp"), 0, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION));
Особое спасибо, одной строчкой вставил фон!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2017, 16:58
Помогаю со студенческими работами здесь

Как установить картинку на фон формы
Народ подскажите как в PascalABC.NET установить картинку, именно КАРТИНКУ на фон, точнее в правую часть окна? Желательно код с...

Неполучается установить картинку как фон
не могу растерожировать картинку как фон , выходит каша. Где ошибка ?

Как установить картинку из ресурсов на фон окна
В общем нужно установить картинку фоном окна как то так this.Background = &quot;тут как то указать путь к файлу внутри ресурсов&quot; ...

Как поставить картинку на фон формы?
Нашел на одном сайте: У меня нет BackgroundImage

Как установить фон на все формы сразу, а не по одной
как установить фон на все формы сразу а не по одной???и вообще реально это?)


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru