Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Este artigo descreve as etapas necessárias para criar programaticamente um cursor ou ícone que contém bits alfa. Para fins deste artigo, esses tipos de cursores ou ícones são conhecidos como "alfa combinada cursores" ou "alfa combinada ícones." Alfa combinada cursores e ícones combinadas alfa só têm suporte no Microsoft Windows XP.
Para criar um cursor combinada alfa ou ícone, crie uma seção DIB que contém valores alfa e chamar a função CreateIconIndirect com essa seção DIB. Embora o bitmap de máscara na estrutura de ICONINFO não seja necessário, você deve criar um bitmap monocromático vazio para enviar para a função CreateIconIndirect como o bitmap de máscara. Os bits alfa para cada pixel no bitmap de seção DIB determina a visibilidade para cada pixel no cursor ou ícone que é criado.
Siga estas etapas para criar um cursor combinada alfa ou ícone:
Concluir uma estrutura BITMAPV5HEADER , como no exemplo de código seguindo estas etapas, para definir um 32 bits por pixel (BPP) alfa combinada DIB.
Chame a função CreateDIBSection para criar uma seção DIB baseada na estrutura de BITMAPV5HEADER que foram concluídos.
Use as informações alfa e bitmap que você deseja para seu cursor combinada alfa ou ícone conclua a seção DIB.
Conclua uma estrutura ICONINFO .
Coloque um bitmap monocromático vazio no campo hbmMask e coloque a seção DIB combinada alfa no campo hbmColor .
Chame a função CreateIconIndirect para criar o cursor combinada alfa ou ícone.
O código Microsoft Visual C++ a seguir demonstra como criar um cursor combinado alfa. Você pode usar o mesmo código para criar um ícone combinado alfa, alterando o membro fIcon da estrutura ICONINFO como TRUE:
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;
}
A informação contida neste artigo aplica-se a:
Microsoft Platform Software Development Kit-January 2000 Edition nas seguintes plataformas
the operating system: Microsoft Windows XP
Microsoft Windows XP Professional
the operating system: Microsoft Windows XP 64-Bit Edition
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 318876
(http://support.microsoft.com/kb/318876/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.