Um método que pode ser usado para exibir informações dinamicamente sobre o sistema, muito útil (^_^)
As informações do arquivo de ajuda de palavras-chave exibem o nome do autor original, Qi Gao, e a fonte original do artigo.
Introdução: A maioria dos arquivos de ajuda geral do sistema usa um formulário estático para exibir o conteúdo na interface ao exibir informações de ajuda. Como desta vez sou responsável pelo desenvolvimento do projeto, sempre sinto que é muito monótono, então em cada Depois de pesquisar o. site, encontrei uma boa classe de controle (classe de controle de exibição de fonte), então a expandi e completei algumas funções de exibição dinâmica. Após a conclusão, as várias informações de ajuda a serem exibidas podem ser exibidas dinamicamente como um filme. Agora vou anotar o processo de produção, o código e o efeito de demonstração. Espero que seja útil para quem pesquisou nesta área ou está procurando um bom método.
Ao mesmo tempo, você pode modificar as informações de texto exibidas no código deste artigo conforme necessário.
Quando o texto principal exibe o arquivo de ajuda, eu uso o método de exibição em tela inteira, mas se eu usar o método VIEW em tela cheia, sempre acho que é muito feio, então primeiro colo uma imagem de fundo com base no completo tela e, em seguida, carregá-lo na imagem de fundo. Basta exibir uma função. Na verdade, o método simples é criar dinamicamente um controle CSTATIC diretamente na imagem de fundo. uma caixa de diálogo , adote a forma de uma caixa de diálogo sem janela restrita e mova-a para o local especificado após ser criada.
Etapas de produção:
Inicie o VC, crie uma única função de documento baseada em CVIEW e mantenha o restante com as configurações padrão.
Não continuei com o conceito de tela inteira como na forma tradicional. Em vez disso, movi o quadro principal MoveWindow para a resolução da tela e, em seguida, removi a barra de título, barra de menu, barra de ferramentas, barra de status, etc. quase um efeito de tela inteira e, em seguida, basta colar a imagem de fundo nele. Talvez isso não possa ser considerado um conceito de tela inteira (^_^).
Modifique a função InitInstance() do APP da seguinte forma:
// A única janela foi inicializada, então mostre-a e atualize-a.
m_pMainWnd->SetMenu(NULL);//Remove o menu
m_pMainWnd->ModifyStyle(WS_THICKFRAME|WS_CAPTION,NULL);//Modifica propriedades do formulário
m_pMainWnd->MoveWindow(CRect(0,0,::GetSystemMetrics(SM_CXSCREEN),
::GetSystemMetrics(SM_CYSCREEN)),TRUE);//Move o formulário para a resolução da tela
m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);//Não há necessidade de explicar isso
m_pMainWnd->UpdateWindow();
Em seguida, modifique a função do membro da classe MainFrame para remover a barra de ferramentas e a barra de status. Modifique a função PreCreateWindow(CREATESTRUCT& cs) da seguinte maneira:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
retornar -1;
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_HIDE);//Ocultar a barra de tarefas. Se não estiver oculto, essa coisa sempre aparecerá em momentos inadequados e afetará o efeito geral.
retornar 0;
}
As etapas acima ocultam a barra de tarefas do WINDOWS, portanto, devemos restaurá-la quando o programa for encerrado. Não queremos vê-la após o término do programa. Como o programa precisa enviar uma mensagem WM_CLOSE ao sair, podemos interceptar a mensagem WM_CLOSE. do MainFrame, aqui Para restaurar a barra de status, o código é o seguinte:
void CMainFrame::OnClose()
{
// TODO: Adicione seu código de manipulador de mensagens aqui e/ou chame default
FindWindow("Shell_TrayWnd",NULL)->ShowWindow(SW_SHOW);//Restaura a barra de tarefas
CFrameWnd::OnClose();
}
Neste ponto, concluímos o trabalho básico de preparação. A próxima tarefa é colar o bitmap de fundo e criar a caixa de diálogo exibida.
Cole o bitmap de fundo: carregue o bitmap de fundo, mapeie a mensagem WM_PAITN de VIEW, cole o bitmap de fundo, mapeie a mensagem WM_EARSEBKGND ao mesmo tempo e remova o trabalho de apagamento de tela. Basta modificar a instrução de retorno para: retornar TRUE.
void CAboutDemoView::OnPaint()
{
// TODO: Adicione seu código de manipulador de mensagens aqui
CPaintDC dc(this); // contexto do dispositivo para pintura
HBITMAP hbitmap;
hbitmap=::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BACKBMP));
HDC hMenDC=::CreateCompatibleDC(NULL);
SelectObject(hMenDC,hbitmap);
::StretchBlt(dc.m_hDC,0,0,1024,768,hMenDC,0,0,1024,768,SRCCOPY);
::DeleteDC(hMenDC);
::DeleteObject(hbitmap);
// Não chama CView::OnPaint() para pintar mensagens
}
Crie um recurso de caixa de diálogo para exibir informações relevantes, modifique as propriedades da caixa de diálogo, Estilo->Popup, Borda->Nenhum e crie uma classe de caixa de diálogo CShowAboutDlg e depois coloque um controle CSTATIC na caixa de diálogo e ajuste sua posição.
Crie esta caixa de diálogo sem janela restrita em VIEW e exiba:
CShowAboutDlg *m_pAboutDlg;
CRreto;
m_pAboutDlg = new CShowAboutDlg();
m_pAboutDlg->Criar(IDD_ABOUT);
m_pAboutDlg->MoveWindow(CRect(18,18,::GetSystemMetrics(SM_CXSCREEN)-13,::GetSystemMetrics(SM_CYSCREEN)-16),TRUE); //Como a imagem de fundo tem uma borda, essa posição deve ser reservada aqui;
m_pAboutDlg->GetClientRect(&rect);
m_pAboutDlg->m_AboutCtrl.MoveWindow(rect,TRUE);//Este controle PIC ocupa a área do cliente da caixa de diálogo
m_pAboutDlg->ShowWindow(SW_SHOW);
A seguir está o arquivo para adicionar a classe de controle de exibição de fonte Adicione ZgMemDC, ZgDraw.h, ZgDraw.cpp, TitleShow.h, TitleShow.cpp, PublicClass.cpp, PublicClass.h ao projeto e, em seguida, adicione AutoFont.h e Escusado será dizer que a função desta classe foi introduzida no artigo anterior. Com base na pessoa que forneceu a classe de controle de exibição de fonte, modifiquei uma quantidade apropriada de código e fiz modificações na exibição de texto, porque o. classe original A fonte não é adequada para os requisitos de exibição do nosso sistema atual (^_^).
Depois basta carregar e exibir a mensagem na classe de diálogo.
Defina o objeto de exibição da classe CSTATIC TitleShow e adicione seu conteúdo de exibição de informações na inicialização:
****
Outra etapa é interceptar o retorno de carro e as teclas ESC para sair da caixa de diálogo.
BOOL CShowAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Adicione seu código especializado aqui e/ou chame a classe base
if(pMsg->mensagem == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
caso VK_RETURN:
retorne VERDADEIRO;
caso VK_ESCAPE:
retorne VERDADEIRO;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
Neste ponto, o trabalho básico do programa foi concluído. Compile e execute seu projeto para ver o efeito.
Expandir