Desenhando imagens a partir de uma lista de imagens
Para desenhar uma imagem, use a função de membro CImageList::D raw. Você especificará um ponteiro para um objeto de contexto de dispositivo, o índice da imagem a ser desenhada, o local no contexto do dispositivo onde desenhar a imagem e um conjunto de sinalizadores para indicar o estilo de desenho.
Quando você especifica o estilo ILD_TRANSPARENT, Draw
usa um processo de duas etapas para desenhar uma imagem mascarada. Primeiro ele executa uma operação AND lógica nos bits da imagem e nos bits da máscara. Em seguida, ele executa uma operação XOR lógica nos resultados da primeira operação e nos bits em segundo plano do contexto do dispositivo de destino. Esse processo cria áreas transparentes na imagem resultante; ou seja, cada bit branco na máscara torna transparente o bit correspondente na imagem resultante.
Antes de desenhar uma imagem mascarada em uma tela de fundo de cor sólida, você deve usar a função de membro SetBkColor para definir a cor da tela de fundo da lista de imagens com a mesma cor do destino. Definir a cor elimina a necessidade de criar áreas transparentes na imagem e permite que Draw
simplesmente copie a imagem para o contexto do dispositivo de destino, resultando em um aumento significativo no desempenho. Para desenhar a imagem, especifique o estilo ILD_NORMAL ao chamar Draw
.
Você pode definir a cor da tela de fundo para uma lista de imagens mascaradas (CImageList) a qualquer momento para que ela seja desenhada corretamente em qualquer tela de fundo sólida. Definir a cor da tela de fundo como CLR_NONE faz com que, por padrão, as imagens sejam desenhadas de forma transparente. Para recuperar a cor da tela de fundo de uma lista de imagens, use a função de membro GetBkColor.
Os estilos ILD_BLEND25 e ILD_BLEND50 pontilham a imagem com a cor de realce do sistema. Esses estilos serão úteis se você for usar uma imagem mascarada para representar um objeto que o usuário pode selecionar. Por exemplo, você pode usar o estilo ILD_BLEND50 para desenhar a imagem quando o usuário a seleciona.
Uma imagem não mascarada é copiada para o contexto do dispositivo de destino usando a operação de varredura SRCCOPY
. As cores na imagem aparecem da mesma forma, independentemente da cor da tela de fundo do contexto do dispositivo. Os estilos de desenho especificados em Draw
também não têm efeito na aparência de uma imagem não mascarada.
Além da função de membro Desenhar, outra função, DrawIndirect, estende a capacidade de renderizar uma imagem. DrawIndirect
usa como parâmetro uma estrutura IMAGELISTDRAWPARAMS. Essa estrutura pode ser usada para personalizar a renderização da imagem atual, incluindo o uso de códigos ROP (operação de varredura). Para obter mais informações sobre códigos ROP, consulte Códigos de operação de varredura e bitmaps como pincéis no SDK do Windows.