0

Windows 7 を使用しており、コンテキスト メニューに透明なアイコンを表示しようとしていますが、機能しません。

私はこのように LoadImage を使用しようとしています:

    m_hMenuBmp = (HBITMAP)::LoadImage(g_hInst, L"C:\\Users\\nicolas\\AppData\\Roaming\\MyApp\\icon.bmp", IMAGE_BITMAP, 16, 16, LR_LOADFROMFILE | LR_LOADTRANSPARENT );

私の icon.bmp は背景に白( 255, 255, 255 )の256色に設定されています...なぜこれが機能しないのかわかりません...

Raymon Chen の ARGB メソッドを試しましたが、うまくいきませんでした。

int cx = GetSystemMetrics(SM_CXSMICON);
int cy = GetSystemMetrics(SM_CYSMICON);


BITMAPINFO bmi = {0};
bmi.bmiHeader.biSize =sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth = cx;
bmi.bmiHeader.biHeight = cy;
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;

DWORD *pBits;
m_hMenuBmp = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, (void **)&pBits, NULL , 0);

if (m_hMenuBmp)
{
    for (int y = 0; y < cy ; y++ )
    {
        for (int x = 0; x < cx; x++)
        {
            BYTE bAlpha = x * x * 255 / cx / cx;
            DWORD dv = (bAlpha << 24) | (bAlpha << 16) | bAlpha ;
            pBits[y *cx + x] - dv;
        }
    }
}

そして、理由はわかりません...この方法ではアイコンが表示されません..

4

2 に答える 2

1

これを機能させることができました:

HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, "C:\\moo\\res\\bitmap1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS);
m_pic.SetBitmap(hBitmap);

そのトリックは、LR_LOADMAP3DCOLORS と LR_LOADTRANSPARENT を組み合わせたものでした。ちなみに、これはダイアログボックス用でした。LR_LOADMAP3DCOLORS がなければ、私の白い背景は白のままでした。

于 2013-02-26T18:11:42.167 に答える