Controles de ActiveX MFC: Usando imagens em um controle ActiveX
Este artigo descreve o tipo de imagem comuns e como implementá-lo em seu controle de ActiveX.Os tópicos incluem:
Visão geral das propriedades da imagem personalizada
Implementando uma propriedade de imagem personalizada no seu controle ActiveX
Adições ao seu projeto de controle
Visão geral das propriedades da imagem personalizada
Um tipo de imagem é de um grupo de tipos comuns de alguns controles de ActiveX.O tipo de imagem manipula metarquivos, bitmaps ou ícones e permite ao usuário especificar uma imagem a ser exibida em um controle ActiveX.Propriedades personalizadas da imagem são implementadas usando um objeto de imagem e funções Get/Set que permitem o acesso de usuário de controle à propriedade Picture.Usuários de controle de acesso a propriedade imagem personalizada usando o estoque de página de propriedades de imagem.
Além do tipo de imagem padrão, tipos de fontes e cores também estão disponíveis.Para obter mais informações sobre como usar o tipo de fonte padrão no seu controle de ActiveX, consulte o artigo controles de ActiveX de MFC: usando fontes.
As classes de controle ActiveX fornecem vários componentes, que você pode usar para implementar a propriedade imagem dentro do controle.Esses componentes incluem:
O CPictureHolder classe.
Essa classe fornece acesso fácil para o objeto de imagem e funcionalidade para o item exibido pela propriedade de imagem personalizada.
Suporte para propriedades de tipo LPPICTUREDISP, implementada com funções Get/Set.
Usando o Class View, você pode adicionar rapidamente uma propriedade personalizada ou propriedades, que suporta o tipo de imagem.Para obter mais informações sobre como adicionar propriedades de controle de ActiveX com o modo de exibição de classe, consulte o artigo controles de ActiveX de MFC: propriedades.
Página de propriedades que manipula a propriedade Picture de um controle ou propriedades.
Esta página de propriedades é parte de um grupo de páginas de propriedades ações disponíveis para os controles de ActiveX.Para obter mais informações sobre páginas de propriedades do controle ActiveX, consulte o artigo controles de ActiveX de MFC: usando páginas de propriedades de ações
Implementando uma propriedade de imagem personalizada no seu controle ActiveX
Quando tiver concluído as etapas descritas nesta seção, o controle pode exibir imagens escolhidas pelo usuário.O usuário pode alterar a imagem exibida usando uma página de propriedade que mostra a imagem atual e tem um botão Procurar que permite ao usuário selecionados imagens diferentes.
Uma propriedade de imagem personalizada é implementada usando um processo semelhante ao usado para implementar outras propriedades, a principal diferença sendo que a propriedade personalizada deve oferecer suporte a um tipo de imagem.Porque o item de propriedade imagem deve ser desenhado pelo controle ActiveX, um número de adições e modificações deve ser feito para a propriedade antes de ser implementado completamente.
Para implementar uma propriedade de imagem personalizada, faça o seguinte:
Adicione código ao seu projeto de controle de.
Uma padrão propriedade página Identificação da foto, um membro de dados do tipo CPictureHoldere uma propriedade personalizada do tipo LPPICTUREDISP com um Get/Set implementação deve ser adicionada.
Modificar várias funções em sua classe de controle.
Essas modificações serão feitas várias funções que são responsáveis pelo desenho do controle ActiveX.
Adições ao seu projeto de controle
Para adicionar a identificação de página de propriedade para a página de propriedades de imagem padrão, insira a seguinte linha após o BEGIN_PROPPAGEIDS macro no arquivo de implementação de controle (.CPP):
PROPPAGEID(CLSID_CPicturePropPage)
Você também deve incrementar o parâmetro de contagem de seu BEGIN_PROPPAGEIDS macro por um.A linha a seguir ilustra isso:
BEGIN_PROPPAGEIDS(CMyAxPicCtrl, 2)
Para adicionar o CPictureHolder membro de dados para a classe de controle, insira a seguinte linha sob a seção protegida de declaração de classe de controle no arquivo de cabeçalho de controle (.H):
CPictureHolder m_pic;
Não é necessário nomear o membro de dados m_pic; qualquer nome será suficiente.
Em seguida, adicione uma propriedade personalizada que aceita um tipo de imagem:
Para adicionar uma propriedade de imagem personalizado usando o Assistente para adicionar propriedade
Carregar projeto do controle.
No modo de exibição de classe, expanda o nó da biblioteca do seu controle.
Botão direito do mouse no nó de interface para o seu controle (o segundo nó do nó biblioteca) para abrir o menu de atalho.
No menu de atalho, escolha Add e Adicionar propriedade de.
No O nome da propriedade , digite o nome da propriedade.Para fins de exemplo, ControlPicture é usado neste procedimento.
No Tipo de propriedade caixa, selecione IPictureDisp * para o tipo de propriedade.
Para O tipo de implementação, clique Métodos Get/Set.
Digite nomes exclusivos para seu Get e Set funções ou aceitar os nomes padrão.(Neste exemplo, os nomes padrão GetControlPicture e SetControlPicture são usados.)
Clique em Concluir.
O Assistente para adicionar propriedade adiciona o código a seguir entre os comentários de mapa de expedição no cabeçalho do controle (.H) arquivo:
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Além disso, o seguinte código foi inserido no mapa de expedição da implementação do controle (.Arquivo CPP):
DISP_PROPERTY_EX_ID(CMyAxPicCtrl, "ControlPicture", dispidControlPicture,
GetControlPicture, SetControlPicture, VT_PICTURE)
O Assistente para adicionar propriedade também adiciona as seguintes funções de dois stub no arquivo de implementação de controle:
IPictureDisp* CWizardGenCtrl::GetControlPicture(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your dispatch handler code here
return NULL;
}
void CWizardGenCtrl::SetControlPicture(IPictureDisp* /*pVal*/)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: Add your property handler code here
SetModifiedFlag();
}
Observação |
---|
Os nomes de classe e a função de controle podem diferir do exemplo acima. |
Modificações em seu projeto de controle
Depois de ter feito as inclusões necessárias ao seu projeto de controle, você precisará modificar várias funções que afetam o processamento do controle ActiveX.Essas funções, OnResetState, OnDraw, e as funções Get/Set de uma propriedade personalizada de imagem, estão localizadas no arquivo de implementação de controle.(Observe que, neste exemplo é chamada a classe de controle CSampleCtrl, o CPictureHolder é chamado de membro de dados m_pic, e o nome da propriedade imagem personalizada é ControlPicture.)
No controle de OnResetState função, adicione a seguinte linha opcional após a chamada para COleControl::OnResetState:
m_pic.CreateEmpty();
Isso define a imagem do controle para uma figura em branco.
Para desenhar a imagem corretamente, faça uma chamada para CPictureHolder::Render no controle de OnDraw função.Modificar sua função para se parecer com o exemplo a seguir:
void CMyAxPicCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
{
if (!pdc)
return;
m_pic.Render(pdc, rcBounds, rcBounds);
}
Na função Get da propriedade do controle imagem personalizada, adicione a seguinte linha:
return m_pic.GetPictureDispatch();
Na função de conjunto de propriedades de imagem personalizada do controle, adicione as seguintes linhas:
m_pic.SetPictureDispatch(pVal);
InvalidateControl();
A propriedade imagem deve ser feita persistente para que as informações adicionadas em tempo de design serão exibido em tempo de execução.Adicione a seguinte linha para o COleControl-derivada da classe DoPropExchange função:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Observação |
---|
Nomes de classe e a função podem diferir do exemplo acima. |
Depois de concluir as modificações, reconstrua seu projeto para incorporar a nova funcionalidade da propriedade imagem personalizada e use o contêiner de teste para testar a nova propriedade.Consulte testes de propriedades e eventos com o contêiner de teste do para obter informações sobre como acessar o contêiner de teste.