powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
25 сообщений из 25, страница 1 из 1
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37188428
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работаем с native API image list, есть примерно такой код:

Код: plaintext
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.
Public Type IMAGELISTDRAWPARAMS
    cbSize As Long
    himl As Long
    i As Long
    hdcDst As Long
    x As Long
    y As Long
    cx As Long
    cy As Long
    xBitmap As Long '        // x offest from the upperleft of bitmap
    yBitmap As Long '        // y offset from the upperleft of bitmap
    rgbBk As Long
    rgbFg As Long
    fStyle As Long
    dwRop As Long
    fState As Long
    Frame As Long
    crEffect As Long
End Type
' image list states (fState field in IMAGELISTDRAWPARAMS)
Public Const ILS_ALPHA As Long = &H8&
Public Declare Function ImageList_DrawIndirect Lib "COMCTL32.DLL" (pimldp As IMAGELISTDRAWPARAMS) As Long

Public Sub DrawImageAlpha( _
        ByVal vKey As Variant, _
        ByVal hdc As Long, _
        ByVal xPixels As Integer, _
        ByVal yPixels As Integer, _
        ByVal btAlpha As Byte _
    )
Dim idp As IMAGELISTDRAWPARAMS
Dim iImgIndex As Long

   iImgIndex = flItemIndex(vKey)

   idp.cbSize = Len(idp)
   idp.himl = m_hIml
   idp.hdcDst = hdc
   idp.x = xPixels
   idp.y = yPixels
   idp.i = iImgIndex
   idp.fState = ILS_ALPHA
   idp.Frame = btAlpha
   
   ImageList_DrawIndirect idp
End Sub

В Vista/Win7 рисует иконку полупрозрачной без проблем, а вот в WinXP - какой-то серо-бурый прямоугольник вместо иконки. Что надо поправить чтобы этот же подход работал в WinXP? Или может есть ещё идеи как эффективно нарисовать иконку из стандартного image list полупрозрачной на заданном DC?
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37188454
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gdi+ надо использовать, примеры поищи
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37188561
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем для этого стандартный? У нет ни единого преимущества перед апишным.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37189598
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Под "стандартным" я имел не визуальный ImageList control, поставляемый в составе MS Commont Controls (MSCOMCTL6.OCX), а стандартный WinAPI image list, создаваемый такой функцией:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
HIMAGELIST ImageList_Create(
    int cx,
    int cy,
    UINT flags,
    int cInitial,
    int cGrow
);

(пускай и из classic VB6)

GDI+ однозначно не катит, т.к. есть большой проект, в котором всё построено на API image list, и надо решить задачу в пределах выбранной технологии, т.е. чисто нейтивными API-функциями.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37189725
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда включаем голову хотя бы на минимальных оборотах .
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190326
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy , прежде чем обвинять оппонента в безысходной тупости, посмотрите хотя бы на это .

Вы что думаете, я поиск не использовал как первое средство помощи страждущим? Как видите, я даже спецпосты на других форумах и ресурсах для девелоперов создавал.

Если у Вас есть готовое решение а не флуд типа "поди поищи" - тогда пишите, а так нечего мусорить на форуме.

Если кому кажется, что я задачу сформулировал некорректно, вот альтернативная формулировка: надо нарисовать иконку, которая хранится в Windows API image list, как прозрачную с заданной степенью прозрачности. Речь идёт не о том, чтобы 32-битные иконки с альфа-каналом выводить, а чтобы вообще ко всей иконке применить эффект прозрачности. Посмотрите на приаттаченный скриншот. Всё работает "чики-пики" в Windows 7, но не в XPюше - смотрите как одна и та же иконка фотоаппарата с разной степенью прозрачности выводится, а у неё ещё и свой альфа-канал по краям изображения есть.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190587
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идёт не о том, чтобы 32-битные иконки с альфа-каналом выводить, а чтобы вообще ко всей иконке применить эффект прозрачности.Теперь понятно.
GDI+
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190609
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя не очень. Как это выглядит в XP? Пример неправильной отрисовки можете выложить?
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190631
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста:
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190692
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерчик бы еще.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37190705
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя не надо. Этот пример у меня под XP работает.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37193030
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy, Вы снова невнимательны.

В указанном Вами примере используются эффекты типа cut и selected, но это не то же самое что нарисовать икону с заданной прозрачностью от 0 до 255.

Да и если бы Вы в код заглянули, то увидели бы, что сам автор Steve McMahon закомментарил неработающие строки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
      
      ' saturate (only ever seems to result in unsaturated image?)
      idp.y = idp.y + (m_cIml.IconSizeY +  4 )
      idp.fState = ILS_SATURATE
      idp.Frame = - 128 
      ImageList_DrawIndirect idp
            
      ' glow (does not appear to work)
      'idp.x = idp.x + (m_cIml.IconSizeX + 2)
      'idp.fState = ILS_GLOW
      'idp.crEffect = &HFFFFFF
      'ImageList_DrawIndirect idp
      
      ' shadow (does not appear to work)
      'idp.x = idp.x + (m_cIml.IconSizeX + 2)
      'idp.fState = ILS_SHADOW
      'idp.crEffect = &HFF0000
      'ImageList_DrawIndirect idp
      
      ' alpha (does not appear to work)
      'idp.x = idp.x + (m_cIml.IconSizeX + 2)
      'idp.fState = ILS_ALPHA
      'idp.Frame = 128
      'ImageList_DrawIndirect idp

Нам как раз эффект ILS_ALPHA нужен...
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37193351
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каюсь, реально невнимателен, код формы не посмотрел и показалось, что картинки полупрозрачные.
Остается GDI+

авторGDI+ однозначно не катит, т.к. есть большой проект, в котором всё построено на API image list, и надо решить задачу в пределах выбранной технологии, т.е. чисто нейтивными API-функциями.GDI+ это тоже native api. ImageList можно оставить в качестве хранилища рисунков.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37193912
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, я готов использовать GDI+ (gdiplus.dll) как API-функции через Declare в VB, но как их применить для моей конкретной задачи? Ещё раз напоминаю: мне надо нарисовать на форме или любом другом API DC заданную иконку из image list с заданным уровнем прозрачности.

Пример, который Вы дали (alpha.zip), делает прозрачной целую форму (целый заданный hwnd), и делает это посредством превращения её сначала в т.н. "многослойное" окно (layered window):

Код: plaintext
Call SetWindowLong(Me.hwnd, GWL_EXSTYLE, lOldLong Or WS_EX_LAYERED)

, а потом через вызов UpdateLayeredWindow с флагом ULW_ALPHA делает ВСЁ окно полупрозрачным:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub SetAlpha(Optional Alpha As Byte =  255 )
    With BF
        .AlphaFormat = AC_SRC_ALPHA
        .BlendFlags =  0 
        .BlendOp = AC_SRC_OVER
        .SourceConstantAlpha = Alpha
    End With
    Call UpdateLayeredWindow(Me.hwnd, Me.hdc, PAD, SZ, hCDC, PAS,  0 , BF, ULW_ALPHA)
End Sub

Может, я чего-то не понимаю? Как это применить к выводу конкретного изображения? Уже обыскал весь Интернет. Если знаете - подскажите хотя бы функцию(и), которыми это делается.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37193982
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рисовать можно в любом DC, все необходимые функции в примере.
Во вложении оригинальный пример.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194011
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если уж говорить про GDI+, вот сейчас нашёл ещё такой пример . Вроде делает то, что нужно (см. раздел "Transparency"), но конечно там такие классы наворочены как friendly "обёртки", что без пол-литра сразу не разберёшься как это вытянуть как отдельную функциональность и потом к image list привязать. Насколько я понял из беглого просмотра кода, там такие преобразования через специальную матрицу делаются.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194072
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В MSDN конечно документация по GDI+ native API совсем скудная. Еслик ому надо - вот здесь нашёл поприличней доку:

GDI+ Flat API Reference
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194080
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Antonariy , Ваш пример xaser.rar хорош, и показывает подход как нарисовать с помощью GdipDrawImageRect картинку на форме. Однако он сразу перестаёт работать как отключаем превращение формы в layered window.

Чтобы Вы напрасно не тратили время, лучше выложите (или дайте ссылку) на пример, в котором делается то, что мне надо, с помощью GDI+.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194104
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wisekatЕсли уж говорить про GDI+, вот сейчас нашёл ещё такой пример .Мощный пример, со своим я так и не смог вывести картинку в PictureBox. Но в нем действительно много лишнего.
wisekatНасколько я понял из беглого просмотра кода, там такие преобразования через специальную матрицу делаются. Нет там матриц, есть байтовый массив.

Вытащить функционал не сложно в пошаговом режиме. Вся суть в процедуре cGDIpRenderer.RenderImageClassToDC.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194118
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wisekat Antonariy , Ваш пример xaser.rar хорош, и показывает подход как нарисовать с помощью GdipDrawImageRect картинку на форме. Однако он сразу перестаёт работать как отключаем превращение формы в layered window.

Чтобы Вы напрасно не тратили время, лучше выложите (или дайте ссылку) на пример, в котором делается то, что мне надо, с помощью GDI+.У меня был только этот пример (к тому же он глючит — IDE через какое-то время после остановки проекта вылетает), ваш лучше, он стоит того, чтобы разобрать его на кусочки.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37194721
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wisekat,

всё же приложили бы минимальный тестовый проект и (особенно) данные, чтобы было что щупать. Вполне вероятно, что AlphaBlend() (родная для Win98 и выше) справится.

Документация по GDI+ Flat API читается специфическим образом: смотрится для flat API-шки в таблице соответствия объектный аналог и читается описание к нему.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37197727
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикту и всем :)

При независимых раскопках вопроса нашёл вот такую потрясную статью на RSDN:

Прозрачность - это просто

Автор тоже клонит к AlphaBlend.

Пока попробую сам что-то подобное в проекте сварганить - и затем отпишусь о результатах. Главное, чтобы это сработало с любым типом иконки из image list, а не только с 32-битным каналом.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37198226
wisekat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изучил вот статью про прозрачность на RSDN + решил воспользоваться советом Бенедикта и попробовать сделать всё на AlphaBlend.

Статья кончено была хороша, но что в ней не понравилось - это то, что автор начал с image list, а закончил выводом классических битмапов через AlphaBlend. А вот промежуточного и самого главного звена - как перейти от иконы из image list к нужному битмапу там и нет...

Хотя автор всё-таки даёт общий теоретический совет: сделайте из необходимого изображения 32-битный битмап и маску с помощью функции CreateDIBSection, а затем используйте всё это хозяйство в AlphaBlend. Даже примерный код даёт:

Код: plaintext
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.
void CTranspBitmapsDoc::CreateDIB()
{
	BITMAPINFO bmi;
	BITMAP bm;
	int sx, sy;

	HDC tempDC = GetDC( 0 );
	m_fgBmp.GetBitmap(&bm);
	sx = bm.bmWidth;
	sy = bm.bmHeight;
	bmi.bmiHeader.biSize = sizeof bmi.bmiHeader;
	bmi.bmiHeader.biWidth = sx;
	bmi.bmiHeader.biHeight = sy;
	bmi.bmiHeader.biPlanes =  1 ;
	bmi.bmiHeader.biBitCount =  32 ;
	bmi.bmiHeader.biCompression = BI_RGB;
	bmi.bmiHeader.biSizeImage =  0 ;
	RGBQUAD *buffer, pixel;
	RGBTRIPLE *t1, *t2;
	HBITMAP hDIB = CreateDIBSection(tempDC, &bmi, DIB_RGB_COLORS, 
									(void**)&buffer,  0 ,  0 );
	bmi.bmiHeader.biBitCount= 24 ;
	bmi.bmiHeader.biClrUsed= 0 ;
	int widthBytes = sx* 3  + (sx* 3 )% 4 ;
	char* bits1 = new char[widthBytes*sy];
	char* bits2 = new char[widthBytes*sy];
	GetDIBits(tempDC, m_fgBmp,  0 , sy, bits1, &bmi, DIB_RGB_COLORS);		
	GetDIBits(tempDC, m_bgBmp,  0 , sy, bits2, &bmi, DIB_RGB_COLORS);		
	for (int i= 0 ; i<sy; i++) 
	{
		t1 = (RGBTRIPLE*)(bits1+widthBytes*i);
		t2 = (RGBTRIPLE*)(bits2+widthBytes*i);
		for (int j= 0 ; j<sx; j++)
		{
			if(isWhite(t1))
			{
				BYTE alpha=isWhite(t2)? 0 : 255 -intensity(t2)/ 2 ;
				pixel.rgbBlue  = alpha?t2->rgbtBlue/ 2 : 0 ;
				pixel.rgbGreen = alpha?t2->rgbtGreen/ 2 : 0 ;
				pixel.rgbRed   = alpha?t2->rgbtRed/ 2 : 0 ;
				pixel.rgbReserved = alpha;
			}
			else
			{
				pixel.rgbBlue  = t1->rgbtBlue;
				pixel.rgbGreen = t1->rgbtGreen;
				pixel.rgbRed   = t1->rgbtRed;
				pixel.rgbReserved =  255 ;
			}
			*buffer++ = pixel;
			t1++; t2++;
		}
	}
	m_alphaBmp.Attach(hDIB);
	ReleaseDC( 0 , tempDC);
	delete[] bits1;
	delete[] bits2;
}


Но функция всё равно работает с оригиналом-битмапом, в котором пикселы какого-то определённого цвета принимаются за прозрачный.

*************************************

Ладно, как я вывернулся, и нутром чую что это правильно, хотя надо всё же доказать математически. Нужная икона из image list рисуется полупрозрачной вот так:

Код: plaintext
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.
Dim hdcAlphaBlend As Long
Dim hbmpImageTemp As Long
Dim hbmpAlphaBlendOld As Long

' Prepare temp drawing surface
hdcAlphaBlend = CreateCompatibleDC(hdc)
hbmpImageTemp = CreateCompatibleBitmap(hdc, m_lImageWidth, m_lImageHeight)
hbmpAlphaBlendOld = SelectObject(hdcAlphaBlend, hbmpImageTemp)

' First copy the real part of hdc we will draw to
BitBlt hdcAlphaBlend,  0 ,  0 , m_lImageWidth, m_lImageHeight, _
   hdc, xPixels, yPixels, SRCCOPY
   
' Put the icon into the temp drawing surface
ImageList_Draw _
    m_hIml, _
    iImgIndex, _
    hdcAlphaBlend, _
     0 , _
     0 , _
    ILD_TRANSPARENT

' Blending the icon with global transparent effect onto the dest surface
Dim Blendfunc As BLENDFUNCTION
Blendfunc.BlendOp = AC_SRC_OVER
Blendfunc.SourceConstantAlpha = btAlpha
Dim lBF As Long
CopyMemory lBF, Blendfunc,  4 

AlphaBlend hdc, xPixels, yPixels, m_lImageWidth, m_lImageHeight, _
   hdcAlphaBlend,  0 ,  0 , m_lImageWidth, m_lImageHeight, lBF

 
' Cleanup code
SelectObject hdcAlphaBlend, hbmpAlphaBlendOld
DeleteObject hbmpImageTemp
DeleteDC hdcAlphaBlend

Я всё думал как правильно "прикрутить" AlphaBlend к тому, что я имею. Придумал вот как: я сначала копирую во временный буфер изображение с экрана, затем вывожу на него иконку, у которой есть своя маска полупрозрачности, а затем через AlphaBlend накладываю всё это "временное" хозяйство на исходный участок на экране, но уже применяя общий заданный уровень прозрачности при этой операции.

Надо конечно доказать чисто математически что получается то же самое как если бы сделать вывод полупрозрачным на нужный DC учитывая полупрозрачные пиксели иконки. Разницу уловили? Вместо создания спец-32-битного-битмапа с маской и его выводом напрямую через AlphaBlend я рисую в копии реального экрана, а затем уже вывожу эту копию полупрозрачной.

Я предполагаю, что операция полупрозрачного вывода является транзитивной, т.е. независимо от того, в каком порядке её применили, получаем один и тот же результат. По крайней мере, я это не опроверг путём попиксельного анализа скриншотов в Photoshop. Я взял и тупо сравнил характерные пиксели, полученные моим методом, и через "стандартный" ILS_ALPHA в ImageList_DrawIndirect. Результат совпадает в обоих случаях. Я сравнивал 3 категории пикселей: из области где в иконке былая полная прозрачность, из полупрозрачной области (в скриншотах выше это края фотоаппарата), и из области непрозрачных пикселей иконки. Результат: всё сошлось один-в-один по RGB показателям и точным координатам пикселей.

Прошу знающих людей отписаться по данному решению и хотя бы даже подтвердить что я всё делаю правильно чтобы мне было спокойней на душе. Как будет время - постараюсь найти математику и строго всё доказать сам для полного успокоения моей души.

И ещё. Предложенный метод будет работать в Win9x начиная с 98-й, а WinNT - с 2000-й Винды. И даже есть такая информация, что будет работать шустро, т.к. внутри Винда может использовать DirectX при работе AlphaBlend. И ещё добавлю, что метод получается универсальным - он будет действовать даже для 8-б 16- и 24-битных иконок, которые про понятие прозрачности и не слыхали :)
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37243892
Dignat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с такое же проблемой. Решение нашел тут
http://www.codeproject.com/KB/miscctrl/AlphaImageImagelist.aspx

Нужен манифест
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
      version="1.0.0.0"
      processorArchitecture="X86"
      name="My.App.Name"
      type="win32"
/>
<description>Description of my app.</description>
<dependency>
      <dependentAssembly>
            <assemblyIdentity
                  type="win32"
                  name="Microsoft.Windows.Common-Controls"
                  version="6.0.0.0"
                  processorArchitecture="X86"
                  publicKeyToken="6595b64144ccf1df"
                  language="*"
            />
      </dependentAssembly>
</dependency>
</assembly>

код примерно такой

Код: plaintext
1.
2.
list = ImageList_Create(width, height, ILC_COLOR32  or  ILC_MASK,  1 ,  1 );
ImageList_AddIcon(list, ico);

В данной иконке картинка имеет глубину 32 бита, а маска - 8 бит. А она в свою очередь была программно конвертирована из png.
...
Рейтинг: 0 / 0
Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
    #37243897
Dignat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В манифесте надо только не забыть поменять имя программы My.App.Name на свое.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как нарисовать иконку из стандартного image list полупрозрачной (ImageList_DrawIndirect)?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]