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

Прозрачный логотип bmp

18.09.2016, 00:21. Показов 1663. Ответов 11

Студворк — интернет-сервис помощи студентам
Доброе время суток, интересует такой вопрос: при запуске программы вылазиет черный сплешь с надписью, собствено надо сделать черный цвет прозрачным, можно ли это сделать ??
Вот сам код
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
BOOL CALLBACK SplashDialogProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    return 0;
}
static HWND hWndSplash = NULL;
void InitSplash( const TCHAR* Filename )
{
    guard(InitSplash);
    
    HBITMAP hBitmap    = NULL;
    INT     BitmapX    = 0;
    INT     BitmapY    = 0;
 
    FWindowsBitmap Bitmap(1);
 
    if( Filename )
    {
        verify(Bitmap.LoadFile(Filename) );
        hBitmap = Bitmap.GetBitmapHandle();
        BitmapX = Bitmap.SizeX;
        BitmapY = Bitmap.SizeY;
    }
    hWndSplash = TCHAR_CALL_OS(CreateDialogW(hInstance,MAKEINTRESOURCEW(IDDIALOG_Splash), NULL, SplashDialogProc),CreateDialogA(hInstance, MAKEINTRESOURCEA(IDDIALOG_Splash), NULL, SplashDialogProc) );
    if( hWndSplash )
    {
        HWND hWndLogo = GetDlgItem(hWndSplash,IDC_Logo);
        if( hWndLogo )
        {
            SetWindowPos(hWndSplash,HWND_TOPMOST,(GetSystemMetrics(SM_CXSCREEN)-BitmapX)/2,(GetSystemMetrics(SM_CYSCREEN)-BitmapY)/2,BitmapX,BitmapY,SWP_SHOWWINDOW);
            SetWindowPos(hWndSplash,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
            SendMessageX( hWndLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap );
            UpdateWindow( hWndSplash );
        }
    }
    unguard;
}
void ExitSplash()
{
    guard(ExitSplash);
    DestroyWindow( hWndSplash );
    unguard;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.09.2016, 00:21
Ответы с готовыми решениями:

Прозрачный фон *.bmp
Я компоненту TImage присвоил рисунок формата .bmp, но у него белый фон; Помогите сделать так, чтобы фон стал прозрачным.

Прозрачный цвет BMP.
void __fastcall TTest1Form::BitBtn2Click(TObject *Sender) { Graphics::TBitmap* gBitmap = new Graphics::TBitmap; ...

Почему прозрачный png в Visual Studio не прозрачный?
Можно ли с этим что-нибудь поделать?

11
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 01:02
Вырезанный по маске? SetWindowRgn()
Вырезанный по цвету или константная прозрачность? SetLayeredWindowAttributes()
Полноценная полупрозрачность? UpdateLayeredWindow()
0
0 / 0 / 2
Регистрация: 18.09.2016
Сообщений: 110
18.09.2016, 03:05  [ТС]
SetLayeredWindowAttributes()
ткните куда это вставит ))
я буквально только на днях начал этим интересоваться, поэтому извиняюсь за такие вопросы ((
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 04:21
Я вам написал три варианта, который вам нужен?
У окна должно быть WS_EX_LAYERED, можно добавить через SetWindowLong(), потом SetLayeredWindowAttributes(), возможно ещё потребуется SetWindowPos().
0
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
 Аватар для magirus
28049 / 15785 / 983
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
18.09.2016, 07:41
а бмп вообще имеет свойство прозрачности?
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 07:54

Не по теме:

Если ему надо "вырезанный по одному цвету или константная прозрачность" - то пофик. :)


Главное понять что точно требуется.
0
0 / 0 / 2
Регистрация: 18.09.2016
Сообщений: 110
18.09.2016, 12:32  [ТС]
мне надо вырезать по 1 цвету, что бы черного фона не было видно
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 12:48
Попробуйте примерно такое (писал прям тут на коленке):
C++
1
2
3
SetWindowLong(hWndSplash, GWL_EXSTYLE, GetWindowLong(hWndSplash, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hWndSplash, RGB(0, 0, 0), 255, LWA_COLORKEY);
// SetWindowPos(hWndSplash, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER);
0
0 / 0 / 2
Регистрация: 18.09.2016
Сообщений: 110
18.09.2016, 13:03  [ТС]
.\..\Engine\Inc\UnEngineWin.h(54) : error C2065: 'WS_EX_LAYERED' : undeclared identifier
..\..\Engine\Inc\UnEngineWin.h(54) : error C2297: '|' : illegal, right operand has type ''unknown-type''
..\..\Engine\Inc\UnEngineWin.h(55) : error C2065: 'SetLayeredWindowAttributes' : undeclared identifier
..\..\Engine\Inc\UnEngineWin.h(55) : error C2065: 'LWA_COLORKEY' : undeclared identifier

Видимо не получится (
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 13:41
Это в какой же этакой старой версии работаете, шо нету?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef WS_EX_LAYERED
#define WS_EX_LAYERED 0x00080000
#endif
#ifndef LWA_COLORKEY
#define LWA_COLORKEY 0x00000001
#endif
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(
HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes
HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
SetLayeredWindowAttributes = NULL;
SetLayeredWindowAttributes = (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
Добавлено через 2 минуты
Ещё такое нагуглил:
You must specifically enable Win2K functions by defining _WIN32_WINNT either in your project settings, or in stdafx.h above the standard Windows headers.

#define _WIN32_WINNT 0x0500
#include <windows.h>
#inclide <winuser.h>
0
0 / 0 / 2
Регистрация: 18.09.2016
Сообщений: 110
18.09.2016, 20:41  [ТС]
Короче толку 0
Работаю я в старой визуалке за 2002 год так как пилю старую программу
..\Inc\Window.h(94) : error C2146: syntax error : missing ';' before identifier 'HMODULE'
..\Inc\Window.h(94) : error C2065: '_T' : undeclared identifier
..\Inc\Window.h(95) : error C2501: 'SetLayeredWindowAttributes' : missing storage-class or type specifiers
..\Inc\Window.h(95) : error C2373: 'SetLayeredWindowAttributes' : redefinition; different type modifiers
..\Inc\Window.h(94) : see declaration of 'SetLayeredWindowAttributes'
..\Inc\Window.h(96) : error C2501: 'SetLayeredWindowAttributes' : missing storage-class or type specifiers
..\Inc\Window.h(96) : error C2373: 'SetLayeredWindowAttributes' : redefinition; different type modifiers
..\Inc\Window.h(94) : see declaration of 'SetLayeredWindowAttributes'
..\Inc\Window.h(96) : error C2440: 'initializing' : cannot convert from 'lpfnSetLayeredWindowAttributes' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
0
 Аватар для BOGG ART
592 / 459 / 147
Регистрация: 09.12.2013
Сообщений: 2,385
Записей в блоге: 2
18.09.2016, 21:37
Ну в 13 строке видимо потерялась ";" , этот "_T", может попробовать убрать или ещё какие-то вариации были, "L" что ли...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2016, 21:37
Помогаю со студенческими работами здесь

Прозрачный блок, внутри его не прозрачный
Скажите пожалуйста, можно ли сделать <div opacity 0.5 цвет белый> <div opacity 1 цвет красный размер 50 процентов> ...

Работа с BMP-файлами (класс "8 битное BMP изображение)
Написать класс "8 битное BMP изображение".Класс должен содержать 3 конструктора: конструктор по умолчанию, конструктор с параметрами и...

Изображение bmp, операция над ним, снова в bmp
Задание состоит в следующем: 1. Перевести изображение в матрицу. 2. Удалить определенные объекты(в матрице). 3. Вывести...

Создание монохромного bmp из одной из 24-х плоскостей 24-битного bmp
Здравствуйте. Стоит задача разбить 24-х битное bmp изображение на 24 плоскости с последующей возможностью генерации 24 монохромных...

Конвертер BMP 32 bit BGRA в BMP 8 bit c Palette
Добрый день! есть следующий вариант преобразования procedure TForm1.Button1Click(Sender: TObject); begin ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
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 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru