Makale numarası: 318876 - Son Gözden Geçirme: 12 Şubat 2007 Pazartesi - Gözden geçirme: 1.5

Işaretçi veya simge Windows XP'de bir alfa oluşturma korunmalarında

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Özet

Bu makalede, program aracılığıyla bir imleç alfa bit içeren bir simge oluşturmak gereken adımları açıklar. Bu makalenin amacıyla, bu türde işaretçiler ve simgeler için "alpha imleçler korunmalarında" veya "alfa simgeleri korunmalarında." olarak adlandırılır Alfa imleçler korunmalarında ve alfa karıştırılmış simgeleri, yalnızca Microsoft Windows XP'de desteklenir.

Daha fazla bilgi

Alfa karıştırılmış imleç ya da simge oluşturmak için <a0></a0>, alfa değerleri içeren bir DIB bölümü oluşturun ve bu DIB bölümüyle CreateIconIndirect işlevini çağırın. Maske bit eşlem ICONINFO yapısında gerekli olmasa da, CreateIconIndirect işlevi maskesi bit eşlem olarak göndermek için boş bir tek renkli bitmap oluşturmanız gerekir. Alfa bitlerin DIB bit eşlem bölüm her piksel için oluşturulan bir simge veya imleç her piksel için görünürlük belirler.

Alfa karıştırılmış imleç ya da simge oluşturmak için şu adımları izleyin:
  1. Bir BITMAPV5HEADER yapısı'nı tamamlamak için bir 32 bit / piksel (BPP) tanımlamak için aşağıdaki adımları gibi kod örneği, DIB alfa korunmalarında.
  2. DIB, tamamlanan BITMAPV5HEADER yapısını temel alan bölüm oluşturmak için CreateDIBSection işlevini çağırın.
  3. DIB bölümünü tamamlamak için alfa karıştırılmış imleç veya simge için istediğiniz bit eşlem ve alfa bilgileri kullanın.
  4. Bir ICONINFO yapısı'nı tamamlayın.
  5. HbmMask alanında boş bir tek renkli bit eşlem koyun ve alfa karıştırılmış DIB bölümü hbmColor alana yerleştirin.
  6. Alfa karıştırılmış bir işaretçi veya simge oluşturmak için CreateIconIndirect işlevini çağırın.
Aşağıdaki Microsoft Visual C++ kodu, bir alfa karıştırılmış imleç oluşturulması gösterilmiştir. ICONINFO yapısını fIcon üyesi DOğRU olarak değiştirerek alfa karıştırılmış simge oluşturmak için aynı kodu kullanabilirsiniz:

HCURSOR CreateAlphaCursor(void)
{
    HDC hMemDC;
    DWORD dwWidth, dwHeight;
    BITMAPV5HEADER bi;
    HBITMAP hBitmap, hOldBitmap;
    void *lpBits;
    DWORD x,y;
    HCURSOR hAlphaCursor = NULL;

    dwWidth  = 32;  // width of cursor
    dwHeight = 32;  // height of cursor

    ZeroMemory(&bi,sizeof(BITMAPV5HEADER));
    bi.bV5Size           = sizeof(BITMAPV5HEADER);
    bi.bV5Width           = dwWidth;
    bi.bV5Height          = dwHeight;
    bi.bV5Planes = 1;
    bi.bV5BitCount = 32;
    bi.bV5Compression = BI_BITFIELDS;
    // The following mask specification specifies a supported 32 BPP
    // alpha format for Windows XP.
    bi.bV5RedMask   =  0x00FF0000;
    bi.bV5GreenMask =  0x0000FF00;
    bi.bV5BlueMask  =  0x000000FF;
    bi.bV5AlphaMask =  0xFF000000; 

    HDC hdc;
    hdc = GetDC(NULL);

    // Create the DIB section with an alpha channel.
    hBitmap = CreateDIBSection(hdc, (BITMAPINFO *)&bi, DIB_RGB_COLORS, 
        (void **)&lpBits, NULL, (DWORD)0);

    hMemDC = CreateCompatibleDC(hdc);
    ReleaseDC(NULL,hdc);

    // Draw something on the DIB section.
    hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
    PatBlt(hMemDC,0,0,dwWidth,dwHeight,WHITENESS);
    SetTextColor(hMemDC,RGB(0,0,0));
    SetBkMode(hMemDC,TRANSPARENT);
    TextOut(hMemDC,0,9,"rgba",4);
    SelectObject(hMemDC, hOldBitmap);
    DeleteDC(hMemDC);

    // Create an empty mask bitmap.
    HBITMAP hMonoBitmap = CreateBitmap(dwWidth,dwHeight,1,1,NULL);

    // Set the alpha values for each pixel in the cursor so that
    // the complete cursor is semi-transparent.
    DWORD *lpdwPixel;
    lpdwPixel = (DWORD *)lpBits;
    for (x=0;x<dwWidth;x++)
       for (y=0;y<dwHeight;y++)
       {
           // Clear the alpha bits
           *lpdwPixel &= 0x00FFFFFF;
           // Set the alpha bits to 0x9F (semi-transparent)
           *lpdwPixel |= 0x9F000000;
           lpdwPixel++;
       }

    ICONINFO ii;
    ii.fIcon = FALSE;  // Change fIcon to TRUE to create an alpha icon
    ii.xHotspot = 0;
    ii.yHotspot = 0;
    ii.hbmMask = hMonoBitmap;
    ii.hbmColor = hBitmap;

    // Create the alpha cursor with the alpha DIB section.
    hAlphaCursor = CreateIconIndirect(&ii);

    DeleteObject(hBitmap);          
    DeleteObject(hMonoBitmap); 

    return hAlphaCursor;
}
				

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Platform Software Development Kit - Ocak 2000 Sürümü, Ne zaman ne ile kullanilir:
    • the operating system: Microsoft Windows XP
  • Microsoft Windows XP Professional Edition
  • the operating system: Microsoft Windows XP 64-Bit Edition
Anahtar Kelimeler: 
kbmt kbdswgdi2003swept kbcursor kbgdi kbhowto KB318876 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:318876  (http://support.microsoft.com/kb/318876/en-us/ )