Ir ao conteúdo

Posts recomendados

Postado

Olá

Eu estou tentando utilizar a biblioteca windows.h junto com a linguagem C++ para APRENDER a desenvolver programa com janelas e gráficos. Depois de Aprender C, agora estou estudando C++ e também uma apostila do André Kishimoto chamado "Programação Windows: C e Win 32 API com ênfase em multimídia.

O compilador que uso é o DEV C++.

Agora estou tentando colocar alguns menus na janela seguindo a apostila mas quando eu compilo o código abre a janela sem nenhum menu. Veja o código abaixo:

#include <windows.h>

#include "PROG 03 - ARQ DE CABEÇALHO.h"

/* Declare Windows procedure */

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,

HINSTANCE hPrevInstance,

LPSTR lpszArgument,

int nFunsterStil)

{

HWND hwnd;

MSG messages;

WNDCLASSEX wincl;

/* The Window structure */

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */

wincl.style = CS_DBLCLKS; /* Catch double-clicks */

wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */

wincl.hIcon = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));

wincl.hIconSm = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));

wincl.hCursor = LoadCursor (hThisInstance, MAKEINTRESOURCE(IDC_MEUCURSOR));

HMENU hMenu = LoadMenu (hThisInstance, MAKEINTRESOURCE(IDM_MEUMENU));

wincl.lpszMenuName = MAKEINTRESOURCE(IDM_MEUMENU); /* No menu */

wincl.cbClsExtra = 0;

wincl.cbWndExtra = 0; /* structure or the window instance */

/* Use Windows's default color as the background of the window */

wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */

if (!RegisterClassEx (&wincl))

return 0;

/* The class is registered, let's create the program*/

hwnd = CreateWindowEx (

0, /* Extended possibilites for variation */

szClassName, /* Classname */

"Windows App", /* Title Text */

WS_OVERLAPPEDWINDOW, /* default window */

CW_USEDEFAULT, /* Windows decides the position */

CW_USEDEFAULT, /* where the window ends up on the screen */

544, /* The programs width */

375, /* and height in pixels */

HWND_DESKTOP, /* The window is a child-window to desktop */

hMenu, /* No menu */

hThisInstance, /* Program Instance handler */

NULL /* No Window Creation data */

);

/* Make the window visible on the screen */

ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */

while (GetMessage (&messages, NULL, 0, 0))

{

/* Translate virtual-key messages into character messages */

TranslateMessage(&messages);

/* Send message to WindowProcedure */

DispatchMessage(&messages);

}

/* The program return-value is 0 - The value that PostQuitMessage() gave */

return messages.wParam;

}

/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message) /* handle the messages */

{

case WM_DESTROY:

PostQuitMessage (0); /* send a WM_QUIT to the message queue */

break;

default: /* for messages that we don't deal with */

return DefWindowProc (hwnd, message, wParam, lParam);

}

return 0;

}

AQUI TEM O CÓDIGO DO ARQUIVO DE CABEÇALHO:

#define IDI_MEUICONE 121

#define IDC_MEUCURSOR 122

#define IDM_MEUMENU 123

E, FINALMENTE, AQUI TEM O CÓDIGO DO ARQUIVO DE RECURSOS:

#include "PROG 03 - ARQ DE CABEÇALHO.h"

IDI_MEUICONE ICON "meuicone2.ico"

IDC_MEUCURSOR CURSOR "meucursor.cur"

IDM_MEUMENU MENU

{

POPUP "menu1" , CHECKED

{

MENUITEM "item1", ID_DO_MENU1_ITEM1, CHECKED

MENUITEM "item2", ID_DO_MENU1_ITEM2, HELP

MENUITEM "itemX", ID_DO_MENU1_ITEMX, INACTIVE

}

}

O que será que está dando errado? Será que é o código? Ou o compilador? Ou a biblioteca? Eu fiz igualzinho o livro.

Agradeço a toda e qualquer ajuda.

Postado

Olá

Eu estou tentando utilizar a biblioteca windows.h junto com a linguagem C++ para APRENDER a desenvolver programa com janelas e gráficos. Depois de Aprender C, agora estou estudando C++ e também uma apostila do André Kishimoto chamado "Programação Windows: C e Win 32 API com ênfase em multimídia.

O compilador que uso é o DEV C++.

Agora estou tentando colocar alguns menus na janela seguindo a apostila mas quando eu compilo o código abre a janela sem nenhum menu. Veja o código abaixo:

#include <windows.h>

#include "PROG 03 - ARQ DE CABEÇALHO.h"

/* Declare Windows procedure */

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */

char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,

HINSTANCE hPrevInstance,

LPSTR lpszArgument,

int nFunsterStil)

{

HWND hwnd;

MSG messages;

WNDCLASSEX wincl;

/* The Window structure */

wincl.hInstance = hThisInstance;

wincl.lpszClassName = szClassName;

wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */

wincl.style = CS_DBLCLKS; /* Catch double-clicks */

wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */

wincl.hIcon = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));

wincl.hIconSm = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));

wincl.hCursor = LoadCursor (hThisInstance, MAKEINTRESOURCE(IDC_MEUCURSOR));

HMENU hMenu = LoadMenu (hThisInstance, MAKEINTRESOURCE(IDM_MEUMENU));

wincl.lpszMenuName = MAKEINTRESOURCE(IDM_MEUMENU); /* No menu */

wincl.cbClsExtra = 0;

wincl.cbWndExtra = 0; /* structure or the window instance */

/* Use Windows's default color as the background of the window */

wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */

if (!RegisterClassEx (&wincl))

return 0;

/* The class is registered, let's create the program*/

hwnd = CreateWindowEx (

0, /* Extended possibilites for variation */

szClassName, /* Classname */

"Windows App", /* Title Text */

WS_OVERLAPPEDWINDOW, /* default window */

CW_USEDEFAULT, /* Windows decides the position */

CW_USEDEFAULT, /* where the window ends up on the screen */

544, /* The programs width */

375, /* and height in pixels */

HWND_DESKTOP, /* The window is a child-window to desktop */

hMenu, /* No menu */

hThisInstance, /* Program Instance handler */

NULL /* No Window Creation data */

);

/* Make the window visible on the screen */

ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */

while (GetMessage (&messages, NULL, 0, 0))

{

/* Translate virtual-key messages into character messages */

TranslateMessage(&messages);

/* Send message to WindowProcedure */

DispatchMessage(&messages);

}

/* The program return-value is 0 - The value that PostQuitMessage() gave */

return messages.wParam;

}

/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{

switch (message) /* handle the messages */

{

case WM_DESTROY:

PostQuitMessage (0); /* send a WM_QUIT to the message queue */

break;

default: /* for messages that we don't deal with */

return DefWindowProc (hwnd, message, wParam, lParam);

}

return 0;

}

AQUI TEM O CÓDIGO DO ARQUIVO DE CABEÇALHO:

#define IDI_MEUICONE 121

#define IDC_MEUCURSOR 122

#define IDM_MEUMENU 123

E, FINALMENTE, AQUI TEM O CÓDIGO DO ARQUIVO DE RECURSOS:

#include "PROG 03 - ARQ DE CABEÇALHO.h"

IDI_MEUICONE ICON "meuicone2.ico"

IDC_MEUCURSOR CURSOR "meucursor.cur"

IDM_MEUMENU MENU

{

POPUP "menu1" , CHECKED

{

MENUITEM "item1", ID_DO_MENU1_ITEM1, CHECKED

MENUITEM "item2", ID_DO_MENU1_ITEM2, HELP

MENUITEM "itemX", ID_DO_MENU1_ITEMX, INACTIVE

}

}

O que será que está dando errado? Será que é o código? Ou o compilador? Ou a biblioteca? Eu fiz igualzinho o livro.

Agradeço a toda e qualquer ajuda.

Postado

Olha man, do jeito que você postou fica difícil de ler, use a tag code e coloque com a indentação o código pra ajudar quem tá lendo.

No mais, se você vai estudar a sério, prefira o gcc com netbeans/eclipse ou o visual c++ no visual studio express. Dev é muito ruim e permissivo.

Postado

Olha man, do jeito que você postou fica difícil de ler, use a tag code e coloque com a indentação o código pra ajudar quem tá lendo.

No mais, se você vai estudar a sério, prefira o gcc com netbeans/eclipse ou o visual c++ no visual studio express. Dev é muito ruim e permissivo.

  • Curtir 1
Postado
Olha man, do jeito que você postou fica difícil de ler, use a tag code e coloque com a indentação o código pra ajudar quem tá lendo.

No mais, se você vai estudar a sério, prefira o gcc com netbeans/eclipse ou o visual c++ no visual studio express. Dev é muito ruim e permissivo.


#include <windows.h>
#include "PROG 03 - ARQ DE CABEÇALHO.h"

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));
wincl.hIconSm = LoadIcon (hThisInstance, MAKEINTRESOURCE(IDI_MEUICONE));
wincl.hCursor = LoadCursor (hThisInstance, MAKEINTRESOURCE(IDC_MEUCURSOR));
HMENU hMenu = LoadMenu( hThisInstance, MAKEINTRESOURCE(IDM_MEUMENU));
wincl.lpszMenuName = MAKEINTRESOURCE(IDM_MEUMENU);
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Windows App", /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
hMenu, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}


/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);

case WM_KEYDOWN: //OBTÉM TECLA VIRTUAL
{
if (wParam == VK_F3) //VERIFICA SE A TECLA F3 FOI PRESSIONADA
SendMessage(hwnd, WM_SETTEXT, (WPARAM)0, (LPARAM)"F3 PRESSIONADA"); //ENVIA A MENSAGEM PARA A JANELA PRINCIPAL
return (0);
} break;
}

return 0;
}

ARQUIVO DE CABEÇALHO

#define IDI_MEUICONE 121
#define IDC_MEUCURSOR 122
#define IDM_MEUMENU 123

E O ARQUIVO DE RECURSO


#include "PROG 03 - ARQ DE CABEÇALHO.h"

IDI_MEUICONE ICON "meuicone.jpg"
IDC_MEUCURSOR CURSOR "meucursor.cur"

IDM_MEUMENU MENU
{
POPUP "menu1" , tipos (opcional)
{
MENUITEM "item1", ID_DO_MENU1_ITEM1, CHECKED
MENUITEM "item2", ID_DO_MENU1_ITEM2, HELP
MENUITEM "itemX", ID_DO_MENU1_ITEMX, INACTIVE
}

POPUP "menu2" , tipos (opcional)
{
MENUITEM "item1", ID_DO_MENU1_ITEM1, MENUBREAK
MENUITEM "item2", ID_DO_MENU1_ITEM2, MENUBARBREAK
MENUITEM "itemX", ID_DO_MENU1_ITEMX, HELP
}
}

  • Curtir 1
Postado

Cristhoferson,

Dei uma ajeitada no seu código. O problema era com o arquivo de recursos e depois foi necessário complementar o arquivo de cabeçalho. Outra coisa, para facilitar, evite usar nomes de arquivos complexos, com espaços, etc.

resource.h

#define IDI_MEUICONE 121
#define IDC_MEUCURSOR 122
#define IDM_MEUMENU 123
#define ID_DO_MENU1_ITEM1 124
#define ID_DO_MENU1_ITEM2 125
#define ID_DO_MENU1_ITEMX 126
#define ID_DO_MENU2_ITEM1 127
#define ID_DO_MENU2_ITEM2 128
#define ID_DO_MENU2_ITEMX 129

resource.rc

#include "resource.h"

IDI_MEUICONE ICON "meuicone.ico"
IDC_MEUCURSOR CURSOR "meucursor.cur"

IDM_MEUMENU MENU
{
POPUP "Menu &1"
{
MENUITEM "Item 1", ID_DO_MENU1_ITEM1, CHECKED
MENUITEM "Item 2", ID_DO_MENU1_ITEM2, HELP
MENUITEM "Item X", ID_DO_MENU1_ITEMX, INACTIVE
}

POPUP "Menu &2"
{
MENUITEM "Item 1", ID_DO_MENU2_ITEM1, MENUBREAK
MENUITEM "Item 2", ID_DO_MENU2_ITEM2, MENUBARBREAK
MENUITEM "Item X", ID_DO_MENU2_ITEMX, HELP
}
}

sample.c (o seu programa; altere onde aparece em negrito)

#include <windows.h>
[B]#include "resource.h"[/B]

/* Declare Windows procedure */

Dê uma olhada:

sample.png

Outra coisa, para o ícone da aplicação, use um .ICO.

:natal:

LNW

  • Curtir 1
Postado

Olha, sem querer ser chato de responder sua pergunta sem responder, mas já fazendo, por que você está usando a biblioteca nativa do windows? Use alguma cross plataform, além de, geralmente, serem mais bem feitas, são bem menos chatas que a do Windows, recomendo WxWidgets. Ah, e larga desse dev-cpp, use pelo menos CodeBlocks.

  • Curtir 2
Postado
Olha, sem querer ser chato de responder sua pergunta sem responder, mas já fazendo, por que você está usando a biblioteca nativa do windows? Use alguma cross plataform, além de, geralmente, serem mais bem feitas, são bem menos chatas que a do Windows, recomendo WxWidgets. Ah, e larga desse dev-cpp, use pelo menos CodeBlocks.

O negócio é o seguinte: eu não entendo absolutamente nada a respeito de interface gráfica para windows, linux , mac, nada.

Eu estudei lógica de programação, já utilizei o pascal zim, para aprender, estudei dois livros a respeito da linguagem C e vária apostilas, e estou estudando C++ pelo Deitel de forma que as linguagens são relativamente tranquilas pra mim. E nesses estudos eu usei o compilador DEV-CPP

Porém eu fiquei aguniado porque depois de ler tudo isso, não queria fazer somente aqueles programas de MS-DOS com linha de comando. Eu quero fazer programas com gráficos para windows. Então dei uma pesquisada e nas primeiras pesquisas vieram muitos termos que eu não entendia. Mas como eu vi que tinha a biblioteca do windows (windows.h) com o DEV-CPP, achei que seria mais fácil e comecei a pesquisar. E já comecei a estudar o livro que o Edmorte indicou.

Outro problema é que eu não faço faculdade, estudo por conta, sozinho, só conto com a ajuda da internet. E por não saber nem os termos que existem fico com dificuldade de perguntar o que eu quero com clareza. Mas a única coisa que eu quero é, em primeiro lugar desenvolver programas MUITO simples com interface gráfica e ir aumentando a complexidade deles, e em segundo lugar, da mesma forma, desenvolver jogos simples e depois ir aumentando a complexidade conforme vou aprendendo.

A única coisa que eu quero é ajuda para dar o ponta-pé-inicial, entende?, a direção inicial de alguém que tenha experiência.

Ainda mais agora que estou começando na interface gráfica.

Para você ter ideia eu nem sei o que é "cross plataform" que você citou.

  • Curtir 1
Postado
O negócio é o seguinte: eu não entendo absolutamente nada a respeito de interface gráfica para windows, linux , mac, nada.

Eu estudei lógica de programação, já utilizei o pascal zim, para aprender, estudei dois livros a respeito da linguagem C e vária apostilas, e estou estudando C++ pelo Deitel de forma que as linguagens são relativamente tranquilas pra mim. E nesses estudos eu usei o compilador DEV-CPP

Porém eu fiquei aguniado porque depois de ler tudo isso, não queria fazer somente aqueles programas de MS-DOS com linha de comando. Eu quero fazer programas com gráficos para windows. Então dei uma pesquisada e nas primeiras pesquisas vieram muitos termos que eu não entendia. Mas como eu vi que tinha a biblioteca do windows (windows.h) com o DEV-CPP, achei que seria mais fácil e comecei a pesquisar. E já comecei a estudar o livro que o Edmorte indicou.

Outro problema é que eu não faço faculdade, estudo por conta, sozinho, só conto com a ajuda da internet. E por não saber nem os termos que existem fico com dificuldade de perguntar o que eu quero com clareza. Mas a única coisa que eu quero é, em primeiro lugar desenvolver programas MUITO simples com interface gráfica e ir aumentando a complexidade deles, e em segundo lugar, da mesma forma, desenvolver jogos simples e depois ir aumentando a complexidade conforme vou aprendendo.

A única coisa que eu quero é ajuda para dar o ponta-pé-inicial, entende?, a direção inicial de alguém que tenha experiência.

Ainda mais agora que estou começando na interface gráfica.

Para você ter ideia eu nem sei o que é "cross plataform" que você citou.

Eu também sou autodidata, não fiz faculdade nem curso algum, conheço bem essa dificuldade, crossplatform, ou multiplataforma, é um programa que possui código portável para múltiplas plataformas, ou seja, ele pode ser compilado em windows, mac e linux(geralmente, mas não obrigatoriamente). Mas de fato pode ser importante você aprender a biblioteca Windows, um dia você pode se deparar com um código feito nela e precisar saber usa-la. ^.^

  • Curtir 1
  • 5 meses depois...
Postado

O comentário do Eventide faz sentido principalmente porque você não está programando C++, mas em C "puro" usando diretamente a API nativa do Windows.

 

Se quiser programar em C++, sugiro que você procure criar seus aplicativos usando algum framework como MFC do Visual C++, OWL (antigo mas é bem poderoso) da Borland, etc.

 

Aí sim poderá explorar mais os recursos de POO do C++

  • Curtir 1
  • 4 anos depois...
Postado

sou novo  na linguagens de programação, já dei olhada no Pascal, VB, etc, mas o que me tocou mesmo é a linguagem C, e quero ser mesmo capaz de resolver vários problemas com est´a mesma linguagem.

 

a minha questão é seguinte>

será que alguém pode direcionar-me um livro em formato pdf para programar as interfaces gráficos pois estou cansado de programar apenas em consolo

  • Curtir 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!