Ir ao conteúdo
  • Cadastre-se

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


Insurgent3

Posts recomendados

 

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.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...