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

Вывод дочернего окна

07.05.2013, 15:43. Показов 2449. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разбираюсь с WinAPI и не могу вывести дочернее окно. Вроде сделал всё как в msdn ну всё равно не появляется
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
// 321.cpp: определяет точку входа для приложения.
//
 
#include "stdafx.h"
#include "321.h"
 
#define MAX_LOADSTRING 100
 
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
TCHAR ChildClassName[MAX_LOADSTRING]=_T("WinCild");
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    ChildProc(HWND,UINT,WPARAM,LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    // TODO: разместите код здесь.
    MSG msg;
    HACCEL hAccelTable;
 
    // Инициализация глобальных строк
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_MY321, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    // Выполнить инициализацию приложения:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY321));
 
    // Цикл основного сообщения:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 
    return (int) msg.wParam;
}
 
 
 
//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
 
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY321));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MY321);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
ATOM MyRegisteChildClass()
{
    WNDCLASSEX wc1ex={0};
    wc1ex.style = CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
    wc1ex.cbSize = sizeof(WNDCLASSEX);
    wc1ex.lpfnWndProc   = ChildProc;
    wc1ex.hInstance     = hInst;
    wc1ex.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc1ex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc1ex.lpszClassName = ChildClassName;
    return RegisterClassEx(&wc1ex);
 
}
 
//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   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;
   hWnd = CreateWindow(ChildClassName, szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,1,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd); 
    }
    return TRUE;
}
 
 
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND  - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY   - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
LRESULT CALLBACK ChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        // Нажата левая клавиша мыши в клиентской области окна.
        case WM_LBUTTONDBLCLK:
        {
            // Окно перемещается в правый нижний угол рабочей области экрана
            MoveWindow(hWnd,GetSystemMetrics(SM_CXSCREEN)-310,
                 GetSystemMetrics(SM_CYSCREEN)-GetSystemMetrics(SM_CYCAPTION)-310,
                 300,300,true); 
        }; break;
        
        // Нажата правая клавиша мыши в клиентской области окна.
        case WM_RBUTTONDBLCLK:
        {
            // Окно перемещается в левый верхний угол рабочей области экрана
            MoveWindow(hWnd,5,5,300,300,true); 
        }; break;
        // Пользователь удалил окно.
        case WM_DESTROY:
        {
            DestroyWindow(hWnd); 
        }; break;
 
        // Необработанные сообщения передаем в стандартную
        // функцию обработки сообщений по умолчанию.
        default: return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
 
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.05.2013, 15:43
Ответы с готовыми решениями:

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое "убегает" от курсора мыши в пределах родительского окна. я создала главное окно,и дочернее,...

Закрытие дочернего окна приводит к закрытию основного окна
Суть задания "После нажатия левой кнопки мышки в области окна в левом углу окна создать временное окно размером в чверть основного окна....

Открытие дочернего окна
Здрасьте. Подскажите что я не так делаю. Хочу открыть окно по нажатию кнопки. Я открывал, просто создавая его по нажатию. А как его...

15
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 16:15
C++
1
2
3
4
5
6
7
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
....
return TRUE;
   hWnd = CreateWindow(ChildClassName, szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,1,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
....
}
что то мне подсказывает что после return вряд ли будет создаваться дочернее окно. ))
1
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 16:19  [ТС]
А без ретурн не запускается
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 16:31
вынеси последний CreateWindow() в LRESULT CALLBACK WndProc() главного окна и ,например , по сообщению WM_CREATE создавай дочернее окно, вообще вариантов тут 100500 ))
0
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 16:46  [ТС]
Не совсем понял, ну типа так?
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
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
WM_CREATE:
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    HWND hWnd;
 WM_CREATE:
    CreateWindow(ChildClassName, szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,1,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd); 
    }
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 16:50
попробуй так, но почитай так же о флагах,которые принимает CreateWindow
0
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 16:51  [ТС]
Не так нельзя создавать... Не получается
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 16:51
http://msdn.microsoft.com/en-u... 85%29.aspx
0
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 16:54  [ТС]
Блин стиль WS_CHILDWINDOW WS_CHILD уже пробовал но тоже фигня
0
 Аватар для Игорь с++
500 / 474 / 63
Регистрация: 26.01.2011
Сообщений: 2,033
07.05.2013, 17:06
Vadim8063, первое что бросается в глаза это то что у себя сохранение всех дескрипторов в одной hWnd
0
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 17:09  [ТС]
Смысл не поменяло даже так
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
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   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);
 
  
   HWND   hWndChild = CreateWindow(ChildClassName, szTitle,WS_CHILDWINDOW,WS_CHILDWINDOW,1,WS_CHILDWINDOW,0,NULL,NULL,hInstance,NULL);
    if(!hWnd)
    {
        return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd); 
    }
    return TRUE;
}
Добавлено через 1 минуту
И так
C++
1
2
3
4
5
6
7
8
9
   HWND   hWndChild = CreateWindow(ChildClassName, szTitle,WS_CHILDWINDOW,WS_CHILDWINDOW,1,WS_CHILDWINDOW,0,NULL,NULL,hInstance,NULL);
    if(!hWndChild)
    {
        return FALSE;
ShowWindow(hWndChild,nCmdShow);
UpdateWindow(hWndChild);    
    }
    return TRUE;
}
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 17:15
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
....
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
....
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    HWND childhWnd = NULL;
    switch (message)
    {
    case WM_CREATE:
        childhWnd = CreateWindowW(L"button", L"Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
            10, 10, 80, 30, hWnd, NULL,  hInst, NULL);
        break;
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
 
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
тупо создается дочернее окно класса button на клиентской области главного окна.
0
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 17:18  [ТС]
Да с этим я не спорю, но мне надо создавать и вызывать окно не через LRESULT главного окна
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 17:24
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
   HWND childhWnd  = CreateWindowW(L"button", L"Press me", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
       40, 40, 80, 30, hWnd, NULL,  hInst, NULL);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
}
можно и так
1
1 / 1 / 0
Регистрация: 17.01.2012
Сообщений: 130
07.05.2013, 17:28  [ТС]
А в чём магия? Чем отличается
C++
1
2
3
4
5
6
 HWND childhWnd  = CreateWindow(L"button", L"Press me", WS_CHILD | WS_VISIBLE | WS_CAPTION,
       40, 40, 80, 30, hWnd, NULL,  hInst, NULL);
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
от
C++
1
2
3
4
5
6
7
8
9
10
HWND   hWndChild = CreateWindow(ChildClassName,"CHILDWINDOW",WS_CHILDWINDOW|
WS_CAPTION|WS_MINIMIZEBOX| WS_MAXIMIZEBOX, 150, 150, 250, 250, hWnd, NULL, hInstance, NULL
);
    if(!hWndChild)
    {
        return FALSE;
ShowWindow(hWndChild,nCmdShow);
UpdateWindow(hWndChild);    
    }
    return TRUE;
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
07.05.2013, 17:35
магия в msdn ))) почитай о регистрации класса окна , флагах, процедурах и т.д. и все станет на свои места.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2013, 17:35
Помогаю со студенческими работами здесь

Масштабирование дочернего окна
Всем доброе время суток Вот создаю дочернее окно, а как сделать так, что бы при изменение рабочеuо окна так же менялось и дочернее. ...

Меню у дочернего окна
Всем привет.Помогите пожалуйста,у меня есть два окна:родительское и дочернее. При создании родительского окна я также создаю для него меню....

Закрытие дочернего окна
Привет всем !!! Есть программа на WinApi состоящая из родительского и дочернего окон (hWnd и hWnd1 ). Когда мы открываем это дочернее окно...

Изменение дочернего окна
Здравствуйте! Пишу программу, но возникла проблема. Есть главное окно hWnd, в которое через формы был добавлен Combo-box и три кнопки....

Создание дочернего окна
Доброго времени суток. У меня есть главное окно с 3 кнопками. Я хочу чтобы после нажатие на кнопку , открывалось дочернее окно и...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Философия технологии
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 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru