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 os passos necessários criar programaticamente um cursor ou ícone contém bits alpha. Para efeitos deste artigo, estes tipos de cursores ou ícones são referidos como "alfa conjuntas cursores" ou "alfa conjuntas ícones." Alfa conjuntas cursores e ícones mista alfa só são suportados no Microsoft Windows XP.
Para criar um ícone ou alfa cursor mista, crie uma secção DIB que contém valores alfa e invocar a função CreateIconIndirect com essa secção DIB. Embora o mapa de máscara de bits na estrutura de ICONINFO não seja necessário, terá de criar um mapa de bits monocromático vazio para enviar para a função CreateIconIndirect como mapa de bits da máscara de. Os bits alfa para cada pixel no mapa de bits DIB secção determina a visibilidade para cada pixel no cursor ou ícone que é criado.
Siga estes passos para criar um alfa mista cursor ou ícone:
Concluir uma estrutura BITMAPV5HEADER , como no exemplo de código seguindo estes passos, para definir a 32 bits por pixel (BPP) alfa conjuntas DIB.
Chame a função CreateDIBSection para criar uma secção DIB baseada na estrutura de BITMAPV5HEADER tiver concluído.
Utilize as informações alfa e mapa de bits que pretende para o seu cursor mista alfa ou ícone conclua a secção DIB.
Conclua uma estrutura ICONINFO .
Coloque um mapa de bits monocromático vazio no campo hbmMask e, em seguida, coloque a secção DIB mista alfa no campo hbmColor .
Chame a função CreateIconIndirect para criar o alfa mista cursor ou ícone.
O seguinte código Microsoft Visual C++ demonstra como criar um cursor alfa mista. Pode utilizar o mesmo código para criar um ícone mista alfa alterando o membro fIcon da estrutura ICONINFO para 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 Edition
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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/
)
Qual foi o esforço que despendeu pessoalmente para utilizar este artigo?
Muito baixo
Baixo
Moderado
Elevado
Muito elevado
Diga-nos porquê e o que podemos fazer para melhorar estas informações
Obrigado! Os seus comentários são utilizados para ajudar-nos a melhorar o conteúdo do nosso suporte. Para obter mais opções de assistência, visite a Home Page de Ajuda e Suporte.