Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Insurgent3

C++ Código com Menu em C++/Win32

Recommended Posts

 

Olá,

 

Alguém poderia me ajudar com um programa? 

 

Eu gostaria de fazer um menu, adicionar um menu, em um programa escrito em C++ e usando a API do windows Win32.

 

O tanto de opções que testei tentando fazer o menu aparecer está nos comentários no código. Se alguém souber como faço pra esse menu aparecer eu agradeço.

 

código:

/*
Editor de Mapas
*/

#include <windows.h>
#include <winuser.h>
#include <winbase.h>
#include "resource.h"

#define DEFAULT_BUTTON1_WIDTH 100
#define DEFAULT_BUTTON1_HEIGHT 20

HWND hwnd;
HWND bCreateWall;
HMENU Menu;

LPCTSTR szClassName = "ClassePadrao"; //const char *szClassName = "ClassePadrao"; //LPSTR szClassName = "ClassePadrao";   // Classe Padrão == "Janela Vazia" //LPSTR
LRESULT CALLBACK MyWndProc(HWND, UINT, WPARAM, LPARAM);
void Button1WMCommand(HWND, UINT , WPARAM , LPARAM);   // Declaração do Escopo da função que processa as mensagens do botão bCreateWall

// Escrevendo o Processamento de Mensagens separado para processar as mensagens do botão criado
void Button1WMCommand(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   if (lParam == (LPARAM)bCreateWall)
	{
	   MessageBox(hwnd,"bCreateWall Pressed","Congratulações",MB_OK);
	}
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
{

   
   WNDCLASSEX wnd;
   MSG msg;
   // Menu = LoadMenu(hInst, MAKEINTRESOURCE(IDM_MEU_MENU)); 
   Menu = LoadMenu(hInst, "IDM_MEU_MENU"); //LoadMenu(hInst, MAKEINTRESOURCE(IDM_MEU_MENU);
   wnd.cbSize = sizeof(WNDCLASSEX);
   wnd.style = CS_HREDRAW | CS_VREDRAW;
   wnd.lpfnWndProc = MyWndProc;
   wnd.cbClsExtra = 0;
   wnd.cbWndExtra = 0;
   wnd.hInstance = hInst;
   wnd.hIcon = LoadIcon(NULL, IDI_APPLICATION); // icone padrão
   wnd.hCursor = LoadCursor(NULL, IDC_ARROW);   // cursor do mouse padrão
   wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // (HBRUSH) (COLOR_BACKGROUND + 3); 
   wnd.lpszMenuName = MAKEINTRESOURCE(IDM_MEU_MENU);//MAKEINTRESOURCE(IDM_MEU_MENU); // "IDM_MEU_MENU";//MAKEINTRESOURCE(199); // (HMENU) LoadMenu(hInst, MAKEINTRESOURCE(IDM_MEU_MENU)); //   
   wnd.lpszClassName = szClassName;

   if(!RegisterClassEx(&wnd))
   {
      MessageBox(NULL, "Erro ao tentar registrar classe","Erro", MB_OK);
      return 0;
   }
   
   Menu = LoadMenu(hInst, MAKEINTRESOURCE(199));
   
   
   hwnd = CreateWindowEx(NULL,szClassName,
                       "Programa - Map Editor",
                       WS_OVERLAPPEDWINDOW,  // estilo da janela
                       CW_USEDEFAULT,        // poxicao X localizacao
                       CW_USEDEFAULT,        // posicao Y localizacao
                       300,                  // tamanho X
                       600,                  // tamanho Y
                       NULL,                 // sem janela parente
                       NULL, //MAKEINTRESOURCE(IDM_MEU_MENU),//LoadMenu(hInst, MAKEINTRESOURCE(IDM_MEU_MENU)), //,  // sem menu
                       hInst,
                       NULL);                // sem parametro adicional
   
   SetMenu(hwnd,Menu);
   ShowWindow(hwnd, iCmdShow);               // mostra a janela da tela
   UpdateWindow(hwnd);                       // confirma atualizacao da tela corretamente

   bCreateWall = CreateWindow("BUTTON",          // ClassName - Botão
	                           "Create Wall",   // Titulo do botão)
                              WS_CHILD,        // Estilos como WS_OVERLAPPEDWINDOW é desmantelado quando o parametro BUTTON é colocado
                              0,               // Coordenada X do botão
                              100,             // Coordenada Y do botão
                              DEFAULT_BUTTON1_WIDTH,   // Largura do botão
                              DEFAULT_BUTTON1_HEIGHT,  // Altura do botão
                              hwnd,
										NULL,
										hInst,
										NULL);            // Janela Parente

   ShowWindow(bCreateWall, SW_SHOWNORMAL);               // mostra a janela da tela
   UpdateWindow(bCreateWall);



   while(GetMessage(&msg, NULL, 0, 0))       // loop de mensagem
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }
   return (1);
}


LRESULT CALLBACK MyWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
   switch(msg)
   {
      case WM_DESTROY:
           PostQuitMessage(0);
           return 0;   // Finaliza a aplicação
      case WM_COMMAND:
      	 /* if (lParam == (LPARAM)bCreateWall)
	      {
	         MessageBox(hwnd,"bCreateWall Pressed","Congratulações",MB_OK);
	      }*/
    	  Button1WMCommand(hwnd, msg, wParam, lParam);
    	  break;
   }
   return DefWindowProc(hwnd, msg, wParam, lParam);
}

 

 

resource.h

// resource.h

#define IDM_MEU_MENU                      199
#define IDC_ARQUIVO_ABRIR                 200
#define IDC_ARQUIVO_SALVAR                201
#define IDC_ARQUIVO_FECHAR                202
#define IDC_EDITAR_RECORTAR               203
#define IDC_EDITAR_COPIAR                 204
#define IDC_EDITAR_COLAR                  205
#define IDC_VISUALIZAR_PADRAO             206
#define IDC_VISUALIZAR_CUSTOMIZADA        207
#define IDC_AJUDA                         208

 

resource.rc

 

#include "resource.h"
IDM_MEU_MENU MENU DISCARDABLE								
BEGIN
   POPUP "Arquivo"
    BEGIN
       MENUITEM "Abrir",  IDC_ARQUIVO_ABRIR
       MENUITEM "Salvar", IDC_ARQUIVO_SALVAR
       MENUITEM "Fechar", IDC_ARQUIVO_FECHAR
    END
   POPUP "Editar"
    BEGIN
       MENUITEM "Recortar", IDC_EDITAR_RECORTAR
       MENUITEM "Copiar",   IDC_EDITAR_COPIAR
       MENUITEM "Colar",    IDC_EDITAR_COLAR
    END
   POPUP "Visualizar"
    BEGIN
       POPUP "Barra de Ferramentas"
        BEGIN
           MENUITEM "padrão",      IDC_VISUALIZAR_PADRAO
           MENUITEM "Customizada", IDC_VISUALIZAR_CUSTOMIZADA
        END
    END
   MENUITEM "Ajuda",  IDC_AJUDA
END

 

 

Obrigado.

adicionado 8 minutos depois

Olá, consegui resolver.

 

Já havia tentado muita coisa, inclusive mexi em tudo que é opção do projeto tentando adicionar algo relacionado ao menu. Tentei também adicionar o arquivo de recursos ao projeto já que eu havia adicionar o arquivo de cabeçalhos mas não deu certo, falhou a adição do arquivo, então pensei que arquivos de recursos não precisavam ser adicionados ao projeto. Tentei novamente hoje e finalmente o menu apareceu. Eu precisa adicionar o arquivo de recursos também ao projeto.



Solução: Adicionar o arquivo de recursos ao projeto.

 

Obrigado.

Editado por Simon Viegas
Alterado tipo de CODE para C++

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×