Os controles ActiveX MFC: Usando imagens em um controle ActiveX
Este artigo descreve o tipo de imagem comuns e como implementá-lo em seu controle ActiveX.Os tópicos incluem:
Visão geral das propriedades da imagem personalizada
Implementação de 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 agrupar de tipos comuns a alguns controles ActiveX.O tipo de imagem manipula metarquivos, bitmaps ou ícones e permite que o usuário especifique uma figura para ser exibida em um controle ActiveX.Propriedades de imagens personalizadas são implementadas usando um objeto de imagem e as funções get/conjunto que permitem o acesso de usuário de controle à propriedade Picture.Os usuários do controle acessar a propriedade imagem personalizada usando o página de propriedades da imagem de estoque.
Com o tipo de imagem padrão, os tipos de fonte e cor também estão disponível.Para obter mais informações sobre o uso do tipo de fonte padrão no seu controle ActiveX, consulte o artigo Os controles ActiveX MFC: Usando fontes.
As classes de controle ActiveX fornecem vários componentes que você pode usar para implementar a propriedade da imagem dentro do controle.Esses componentes incluem:
The CPictureHolder classe.
Essa classe fornece acesso fácil ao objeto de imagem e funcionalidade para o item exibido pela propriedade Picture personalizada.
Suporte para propriedades do tipo LPPICTUREDISP, implementada com as funções get/conjunto.
Usando o modo de exibição de classe você pode adicionar rapidamente uma propriedade personalizada ou propriedades, que suporta o tipo de imagem.Para obter mais informações sobre a adição de propriedades do controle ActiveX com classe View, consulte o artigo Os controles ActiveX MFC: Propriedades.
Uma página de propriedades que manipula a propriedade imagem ou propriedades de um controle.
Esta página de propriedades é parte de um agrupar de páginas de propriedade das ações disponível para os controles ActiveX.Para obter mais informações sobre o controle ActiveX propriedade páginas, consulte o artigo Os controles ActiveX MFC: Usando ações propriedade páginas
Implementação de 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 seu usuário.O usuário pode alterar a imagem exibida usando uma página de propriedades que mostra a figura corrente e possui um botão Procurar que permite ao usuário selecionados diferentes imagens.
Uma propriedade personalizada da imagem é implementada usando um processo semelhante àquele utilizado para implementar outras propriedades, a principal diferença é que a propriedade personalizada deve suportar um tipo de imagem.Como o item da 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 implementada completamente.
Para implementar uma propriedade personalizada da imagem, faça o seguinte:
Adicione código ao seu projeto de controle.
Uma padrão imagem página ID de propriedade, um membro de dados do tipo CPictureHoldere uma propriedade personalizada de tipo LPPICTUREDISP com uma implementação de get/conjunto deve ser adicionado.
Modificar várias funções na sua classe de controle.
Essas modificações serão feitas várias funções que são responsáveis por desenho de seu controle ActiveX.
Adições ao seu projeto de controle
Para adicionar a ID da página de propriedades 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 do 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 na seção protegida da declaração da classe de controle em arquivo de controle de cabeçalho (.H):
CPictureHolder m_pic;
Não é necessário nomear seu dados membro m_pic; Nenhum nome será suficiente.
Em seguida, adicione uma propriedade personalizada que ofereça suporte a 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, expandir o nó de biblioteca do seu controle.
clicar com o botão direito do mouse no nó de interface para o seu controle (o segundo nó do nó biblioteca) para em em aberto o menu de atalho.
No menu de atalho, escolher Adicionar and then Adicionar propriedade.
No Nome da propriedade, digite o nome da propriedade.Por exemplo fins, ControlPicture é usado neste procedimento.
No Tipo da propriedade caixa de seleção IPictureDisp * para o tipo de propriedade.
For Tipo de implementação, clicar Obtém/define métodos.
Digite nomes exclusivos para seu get e conjunto funções ou aceite os nomes padrão.(Neste exemplo, o padrão nomes GetControlPicture e SetControlPicture são usados.)
Clique em Finish.
O Assistente para adicionar propriedade adiciona o seguinte código entre os comentários de MAP de expedição no arquivo de controle de cabeçalho (.H):
IPictureDisp* GetControlPicture(void);
void SetControlPicture(IPictureDisp* pVal);
Além disso, o seguinte código foi inserido no MAP de despacho do arquivo de controle implementação (.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 duas 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 para seu projeto de controle, você precisa modificar várias funções que afetam o renderização do seu controle ActiveX.Essas funções, OnResetState, OnDraw, e as funções get/conjunto de uma propriedade personalizada da imagem, estão localizados no arquivo de implementação do controle. (Observe que neste exemplo de classe de controle é chamada de CSampleCtrl, o CPictureHolder membro de dados é chamado m_pic, e o nome da propriedade Figura personalizada é ControlPicture.)
No controle OnResetState função, adicione a seguinte linha opcional após a telefonar para COleControl::OnResetState:
m_pic.CreateEmpty();
Define imagem do controle para uma figura em branco.
Para desenhar a imagem corretamente, faça uma telefonar para CPictureHolder::Render no controle OnDraw função. Modifique 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 de imagem personalizada do controle, adicione a seguinte linha:
return m_pic.GetPictureDispatch();
Na função conjunto da propriedade 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 time de design aparecerão em time de execução.Adicione a seguinte linha à COleControl-derivada da classe DoPropExchange função:
PX_Picture(pPX, _T("ControlPicture"), m_pic);
Observação: |
---|
Os 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 personalizada da imagem e teste contêiner para testar a nova propriedade.See Teste de propriedades e eventos com o contêiner de teste para obter informações sobre como acessar o contêiner de teste.