Exemplo de itens de Menu de desenho proprietário
O exemplo neste tópico usa itens de menu owner-drawn em um menu. Os itens de menu Selecionar atributos de fonte específico, e o aplicativo exibe cada item de menu usando uma fonte que tenha o atributo correspondente. Por exemplo, o item de menu itálico é exibido em uma fonte em itálico. O nome do personagem menu na barra de menus abre o menu.
A barra de menus e no menu suspenso são definidos inicialmente por um recurso de modelo de menu estendido. Como um modelo de menu não pode especificar itens do desenho proprietário, o menu contém inicialmente quatro itens de menu de texto com as seguintes seqüências: "Regular", "negrito" "Itálico" e "Underline." Procedimento de janela do aplicativo alterações a itens do desenho proprietário quando ele processa a mensagem WM_CREATE . Quando ele recebe a mensagem WM_CREATE, o procedimento janela chama a função de OnCreate application-defined, que executa as seguintes etapas para cada item de menu
Aloca uma estrutura de MEUITEM definidas pelo aplicativo.
Obtém o texto do item de menu e salva-lo na estrutura de MEUITEM definidas pelo aplicativo.
Cria a fonte usada para exibir o item de menu e salva sua alça na estrutura de MEUITEM definidas pelo aplicativo.
Altera o tipo de item de menu para MFT_OWNERDRAW e salva um ponteiro para a estrutura MEUITEM application-defined dados de item.
Como um ponteiro para cada estrutura de MEUITEM definido pelo aplicativo é salvo como dados item, ele é passado para o procedimento de janela em conjunto com as mensagens WM_MEASUREITEM e WM_DRAWITEM para o item de menu correspondente. O ponteiro está contido no itemData membro das estruturas tanto o MEASUREITEMSTRUCT DRAWITEMSTRUCT.
Para cada item de menu owner-drawn a primeira vez que ele é exibido, é enviada uma mensagem WM_MEASUREITEM. Os processos de aplicação esta mensagem selecionando a fonte para o item de menu em um contexto de dispositivo e, em seguida, determinar o espaço necessário para exibir o texto item menu nesse tipo de letra. O texto do item de menu e fonte são especificados por estrutura de MEUITEM do item de menu (a estrutura definida pelo aplicativo). O aplicativo determina o tamanho do texto, usando o
função GetTextExtentPoint32.
O procedimento janela processa a mensagem WM_DRAWITEM exibindo o texto item menu na fonte adequada. O texto do item de menu e fonte são especificados pela estrutura de MEUITEM do item de menu. O aplicativo seleciona texto e plano de fundo cores adequadas ao Estado do item de menu.
O procedimento janela processa a mensagem WM_DESTROY para destruir fontes e memória livre. O aplicativo exclui o tipo de letra e libera a estrutura de MEUITEM definido pelo aplicativo para cada item de menu.
/ / Identificadores de item de menu para o menu de caracteres # define IDM_CHARACTER 10 # define IDM_REGULAR 11 # define IDM_BOLD 12 # define IDM_ITALIC 13 # define IDM_UNDERLINE 14 / / estrutura associado com menu itens typedef struct tagMYITEM {HFONT hfont;
} MEUITEM;
A seguir estão as partes relevantes do procedimento de janela do aplicativo e suas funções associadas.