Exemplo do DYNAMENU: Atualiza dinamicamente os menus
A amostra DYNAMENU ilustra modificação dinâmica de menus e barras de status independentemente de manipulação de comandos conhecidos em time de compilar.DYNAMENU ilustra os seguintes recursos:
Atualizando dinamicamente a lista de itens em um menu.
Implementando o equivalente a ON_COMMAND e ON_UPDATE_COMMAND_UI manipuladores de comandos de menu cujos IDs não são conhecidos em time de compilar. Esta ilustração pode ser aplicada para casos mais complexos, sistema autônomo menus configuráveis pelo usuários.
Atualizando o BAR de status aviso de comando para comandos cujos IDs não são conhecidos no momento da compilar.
Observação de segurança: |
---|
Este código de exemplo é fornecido para ilustrar um conceito e não deve ser usado em aplicativos ou sites da Web, pois ele não pode ilustrar sistema autônomo práticas de codificação mais seguras.Microsoft sistema autônomo sumes nenhuma responsabilidade por danos incidentais ou conseqüenciais deve o código de exemplo ser usado para fins diferentes de sistema autônomo se destina. |
Para obter exemplos e instruções para instalá-los:
Sobre o Visual Studio Ajuda menu, clicar Exemplos.
Para obter mais informações, consulte Localizando arquivos de exemplo.
A versão mais recente e a lista completa das Exemplos está disponível online a partir de O Visual Studio 2008 Exemplos página.
Você também pode localizar exemplos no disco rígido do seu computador.Por padrão, exemplos e um arquivo Leiame são copiados para uma pasta sob \programa Files\Visual Studio 9.0\Samples\.Para edições Express do Visual Studio, todos os exemplos estão localizados online.
Criando e executando o exemplo
Para criar e executar a amostra DYNAMENU
Abra a solução dynamenu.sln.
Sobre o Compilação menu, clicar Compilação.
No menu Debug, clique em Start Without Debugging.
DYNAMENU inicialmente exibe uma janela com o texto: "Esse texto é exibido na cor corrente." Você pode alterar a cor do texto exibido, selecionando uma das quatro itens oferecido inicialmente o Cor menu: Preto, vermelho, roxo ou azul.
Como para utilizar o recurso de atualização dinâmica do menu de DYNAMENU, clicar Alterar opções on the Cor menu, que abre um Alterar opções de cor caixa de diálogo.Caixas de seleção para preto, vermelho, roxo e azul permitem que você escolher quais cores dinamicamente são oferecidas no Cor menu.Por exemplo, se você desmarcar Red e o roxo e retornar para o Cor menu, somente os itens de preto e azul serão oferecidos no menu.
Observe como a BAR de status exibe, por exemplo, "conjunto corrente texto colorido para preto," quando o foco está no item preto aCor menu.
Atualizar dinamicamente a lista de itens em um menu
De classeCDynaMDIChildWnd implementa a atualização dinâmica de itens a na mdichild.cppCor menu.Quando a lista de cores disponível é atualizada, ou quando, em seguida, a janela filho MDI for ativada, a CDynaMDIChildWnd::RefreshColorMenu chamadas de função CMenu::DeleteMenu Para excluir cada cor do item de menu e, em seguida, adiciona as cores disponível no momento usando o menu CMenu::AppendMenu.
Implementar manipuladores de comandos para itens de menu dinâmico
DYNAMENU poderia foram implementadas pelo reservando uma lista fixa de IDs de comando para as cores: ID_COLOR_BLACK, ID_COLOR_RED e assim por diante.Nesse caso, ON_COMMAND e ON_UPDATE_COMMAND_UI manipuladores poderiam foram implementados para sistema autônomo comandos de cor sistema autônomo de costume. Isso seria a maneira mais simples de implementar DYNAMENU.
No entanto, para fins de ilustração, DYNAMENU não usa IDs de comando fixo.Em vez disso, DYNAMENU atribui dinamicamente IDs de comando não conhecido ou associados a itens de menu em time de compilar.Esta ilustração pode ser aplicada para casos mais complexos, sistema autônomo menus configuráveis pelo usuários.
O equivalente a ON_COMMAND e ON_UPDATE_COMMAND MAP da mensagem tratamento é implementado na substituir do documento de CCmdTarget::OnCmdMsg. Se o OnCmdMsg a função é chamada com um ponteiro nulo para o AFX_CMDHANDLERINFO * parâmetro, isso significa que nenhuma entrada de MAP de mensagens foi encontrada para o comando.Nesse caso, a substituir de OnCmdMsg verifica se a ID de comando, passada sistema autônomo o primeiro parâmetro é um de número do comando atribuído dinamicamente para sistema autônomo itens de menu cor. Nesse caso, a substituir de chamadas em um manipulador de comandos (DoSelectColor) ou o comando manipulador de interface do usuário (DoUpdateSelectColor), dependendo se o segundo parâmetro passado para OnCmdMsg é definido o MFC CN_COMMAND or CN_UPDATE_COMMAND_UI.
Atualizando BAR de status aviso de comando para itens de menu dinâmico
Em DYNAMENU, a janela filho MDI (CDynaMDIChildWnd) possui o BAR de status.A implementação padrão de CFrameWnd::GetMessageString usa a ID de comando mostrado no momento (para o item que atualmente tem o foco no menu) para obter o recurso de seqüência de caracteres correspondente para o comando e exibi-lo no primeiro painel da BAR de status. DYNAMENU substitui GetMessageString Para exibir um aviso de comando para os comandos definidos dinamicamente.
Palavras-chave
Este exemplo demonstra as seguintes palavras-chave:
AfxFormatString1 AfxGetMainWnd CCmdTarget::OnCmdMsg; CDialog::DoModal; CDialog::OnInitDialog; CDocument::GetFirstViewPosition; CDocument::GetNextView; CDocument::OnNewDocument; CDocument::UpdateAllViews; CFrameWnd::criar; CFrameWnd::GetActiveDocument; CFrameWnd::GetMessageString; CFrameWnd::LoadFrame; CMenu::AppendMenu; CMenu::DeleteMenu; CMenu::GetMenuItemCount; CMenu::GetMenuItemID; CMenu::GetSubMenu; CObject::AssertValid; CObject::despejo; CObject::Serialize; CString::LoadString; CView::DoPreparePrinting; CView::GetDocument; CView::OnBeginPrinting; CView::OnDraw; CView::OnEndPrinting; CView::OnPreparePrinting; CWinApp::AddDocTemplate; CWinApp::EnableShellOpen; CWinApp::InitInstance; CWinApp::LoadStdProfileSettings; CWinApp::RegisterShellFileTypes; CWnd::CenterWindow; CWnd::DoDataExchange; CWnd::GetClientRect; CWnd::GetDlgItem; CWnd::GetMenu; CWnd::GetParentFrame; CWnd::OnCreate; CWnd::SetWindowText; CWnd::ShowWindow; CWnd::UpdateWindow; DragAcceptFiles; DrawText; LoadBitmap; RGB; SetBkMode; SetTextColor
Observação: |
---|
Alguns exemplos, sistema autônomo esta, não foram modificados para refletir sistema autônomo alterações nos assistentes, bibliotecas e compilador Visual C++, mas ainda Demonstre sistema autônomo concluir a tarefa desejada. |