Ir ao conteúdo
  • Cadastre-se

Colocar uma janela em um codigo simples?


Posts recomendados

Estou cursando gestão em ti, 2º semestre, neste semestre inicio a area de programção, meu professor me passou um desafio com o enunciado descrito no codigo abaixo.

 

Gostaria de deixar estre simples programa com uma interface mais bonita, depois de compilado deixar ele com uma janela do windows, como um programda mais profissional digamos kk

Mais como sou novo nesta area nao conheco codigos e tudo mais.

Gostaria de ajuda para pegar este codigo e colocar ele em uma janela.

Segue o codigo abaixo:

 

/*Um pedreiro necessita preencher uma parede com azulejos, desenvolva 
um programa que fale quantos azulejos serão necessários para preencher a parede.*/


#include <stdio.h>
#include <stdlib.h>

 

int main(){
    float azulejo,azulejol,azulejoa,paredel,paredea,parede,total;
    
    printf("Informe a largura do azulejo: ");
    scanf("%f", &azulejol);
    printf("Informe a altura do azulejo: ");
    scanf("%f", &azulejoa);
    printf("Informe a largura da parede: ");
    scanf("%f", &paredel);
    printf("Informe a altura da parede: ");
    scanf("%f", &paredea);
    
    azulejo=azulejol*azulejoa;
    parede=paredel*paredea;
    total=parede/azulejo;
    
    printf("Sera necessario %.0f azulejos para completar a parede de %.0f metros.", total,parede);
    printf("\n\n");
    system ("pause");
    
    }

    

Obrigado desde ja.
    

 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

se com 6 meses você conseguir desenhar uma aplicação grafica certamente você será o maior guru da programação. Levo aprendendo C/C++ ja faz mais de 2 anos e ainda nem me atrevi. >_<

Mas se quer que lhe indique o caminho muito bem....
Primeiro que dizer que C/C++ não possui nenhuma biblioteca de desenho de interfaces de forma nativa, C/C++ são linguagens que foram criados para computadores sem interfaces, por essa razão programamos em CMD até hoje. Não obstante, por sorte, C/C++ são linguagens altamente expansíveis através de bibliotecas, motivo pelo qual fará que estejam com nós muitos anos mais. Sendo assim o único que devemos fazer é escolher uma biblioteca que nos permita fazer uma interface.

 

O segundo é informar que a única forma de construir uma interface é mediante o uso de uma API, quem proporciona essa API é o próprio sistema. Em windows a API se chama WimAPI, com ela construiremos a Interface Gráfica de Úsuario, é dizer que faremos chamadas a funções especificas do sistema para criar a tal "janela", porém é algo muito mais complexo do que você possa imaginar.
Para entender como funciona preste atenção nesse esquema:
[programador] ->[linguagem de programação]->[API(biblioteca)]->[sistema(hardware)]

você através do seu programa se comunica com a API do sistema, e ela é quem se comunica com o hardware, pode que esteja me esquecendo de mais "camadas" porém as mais relevantes para nós são essas, não faz falta você ficar quimando a cabeça, você só tem que entender que sim ou sim você tem que fazer uso da api.

 

porém não tudo que brilha é ouro... essa forma de programar sobre a API do sistema também tem algumas "desvantagens", uma grande desvantagem é que você uma vez aprenda a usar a API saiba que cada sistema(sistema operativo) tem sua própria API. Se aprender a usar a API de Windows, saiba que em Linux o buraco é mais embaixo, nada do que você aprender sobre API do Windows(Conhecida também como WinAPI ou Win32API) vai lhe servir em Linux, isso quebra por completo o propósito de algumas linguagens de programação que é a portabilidade(Habilidade de levar o mesmo código a diferentes sistemas). Para nossa sorte alguns programadores inventarão algumas bibliotecas que se comunicam com as APIs por nós, dessa forma podemos criar uma janela com um comando na maioria das vezes idêntico para qualquer sistema operativo, isso ajuda bastante o programador ja que você em vez de ter que aprender 2 ou mais APIs, somente aprendemos a usar essa biblioteca, e é ela quem se encarrega de "averiguar" em que sistema estamos e fazer a chamada a API correta, fazendo assim seu programa mais "portável". Nesse caso o diagrama ficaria assim:
[programador] ->[linguagem de programação]->[Biblioteca]->API(biblioteca)]->[sistema(hardware)]

Agora sabendo tudo o que lhe expliquei depende de você decidir se quer aprender a programar em uma API ficando assim "atado" a um só sistema operativo, ou prefere buscar uma "biblioteca mais amigável" para o programador.

 

Muitas vezes as bibliotecas dão muita facilidade para o programador, criar uma janela com uma biblioteca de terceiros pode ser bem mais fácil que programa-la diretamente sobre a API do sistema, porém algumas bibliotecas possuem tantas funções que pode chegar a ser muito mais complexo aprende-la, mais que o próprio linguagem de programação empregado, se você levar 2 anos para aprender a programar pode levar outros 2 em dominar a biblioteca, o problema é que programando sobre API pode demorar muito também. >_<
Deixo constância que ambos são bibliotecas, tanto a API como outra qualquer, a diferencia é que uma é proporcionada pelo próprio sistema e outras bibliotecas são proporcionadas por terceiros.

Bom... agora lhe passo os dados do que você precisa buscar conforme o que você decidir.


Quero lhe informar também, antes que nada... que a maioria das bibliotecas e interfaces gráficas hoje em dia estão programadas em algum linguagem orientado a objetos, não se usa muito C para o fim de programar interfaces gráficas, porém ainda existem algumas bibliotecas para C.

Vamos lá.
Se você decidiu por usar API do sistema é só buscar no google
tutorial ou livro sobre API de Linux ou Windows ou qualquer sistema desejado, por exemplo "tutorial API windows C/C++", ponha isso no google. Visual C++ é bastante bom para isso.

Se decidiu por usar alguma biblioteca de terceiros algumas dessas podem ser Qt(possivelmente a melhor de todas), wxwidgets(muito portavel) e GTK. Primeiro investigue se te atrai e funcione em todos os sistemas operativos que desejes, certamente existem mais bibliotecas, é coisa de pesquisar.


Se decidir usar wxwidgets saiba que ele se íntegra perfeitamente com codeblocks.

Para o resto use google se quiser saber mais sobre o tema. "Eu só tenho que lhe mostrar a porta Neo... você é quem tem que atravessa-la". >_<

fui! Não peça para lhe ensinar comandos a ninguém que certamente ninguém sabe. JAJA En vez disso busque um bom tutorial. Comece buscando "interfaces gráficas em C++".

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

@Guilherme R. Anzollin      seu código está bom , só ficou faltando  mostrar o resultado ,  então fiz uma modificação e seu código poderia ser assim  :

#include <windows.h>
#include <stdlib.h>

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

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance     = hThisInstance;
    wincl.lpszClassName = "WindowsApp";
    wincl.lpfnWndProc   = WindowProcedure;
    wincl.style         = CS_DBLCLKS;
    wincl.cbSize        = sizeof (WNDCLASSEX);

    wincl.hIcon         = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm       = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor       = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName  = NULL;
    wincl.cbClsExtra    = 0;
    wincl.cbWndExtra    = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    if (! RegisterClassEx ( &wincl ))
        return 0;

    hwnd = CreateWindowEx (
        0,
        "WindowsApp",
        "Calculadora",
        WS_OVERLAPPEDWINDOW,
        350,/*pos x da tela de 0 ate 1280 tamanho da tela*/
        50, /*pos y da tela de 0 ate 720 tamanho da tela */
        800,/*largura da janela criada largura da tela   */
        600,/*altura da janela criada  altura da tela    */
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
        );

    ShowWindow (hwnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
}

#define ID_BUTTON_resultado 1001

HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditNum3,EditNum4,EditTotal,ButtonMais,ButtonMenos,ButtonVezes,ButtonDividir;

void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx (
        WS_EX_CLIENTEDGE,
        "EDIT",
        " ",
        WS_VISIBLE|WS_CHILD|WS_BORDER ,
        220, 10, 50, 20,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

    CreateWindowEx (
        0,
        "STATIC",
        "Altura    Do Azuleijo em CM",
        WS_VISIBLE|WS_CHILD,
        20,10,190, 20,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

    EditNum2 = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", " ",
        WS_VISIBLE|WS_CHILD|WS_BORDER,
        220, 40, 50, 20,
        hwnd, NULL, g_inst, NULL );

        CreateWindowEx (
        0,
        "STATIC",
        "Largura Do Azuleijo em CM",
        WS_VISIBLE|WS_CHILD,
        20, 40, 190, 20,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

    EditNum3 = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", " ",
        WS_VISIBLE|WS_CHILD|WS_BORDER,
        220, 70, 50, 20,
        hwnd, NULL, g_inst, NULL );

    CreateWindowEx (
        0,
        "STATIC",
        "Altura    Da Parede   em CM",
        WS_VISIBLE|WS_CHILD,
        20, 70, 190, 20,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

    EditNum4 = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", " ",
        WS_VISIBLE|WS_CHILD|WS_BORDER,
        220, 100, 50, 20,
        hwnd, NULL, g_inst, NULL );

    CreateWindowEx (
        0,
        "STATIC",
        "Largura Da Parede   em CM",
        WS_VISIBLE|WS_CHILD,
        20, 100, 190, 20,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

    ButtonMais = CreateWindowEx (
        0,
        "BUTTON",
        "Resultado",
        WS_VISIBLE|WS_CHILD,
        20,200, 200, 30,
        hwnd,
        (HMENU)ID_BUTTON_resultado,
        g_inst,
        NULL
        );

        CreateWindowEx (
        0,
        "STATIC",
        "Total De Azuleijos =",
        WS_VISIBLE|WS_CHILD,
        20, 250, 150, 30,
        hwnd,
        NULL,
        g_inst,
        NULL
        );

     EditTotal = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", "",
        WS_VISIBLE|WS_CHILD|WS_BORDER,
        180, 250, 80, 30,
        hwnd, NULL, g_inst, NULL );

      SendMessage((HWND) EditNum1,
        (UINT) WM_SETFONT,
        (WPARAM) GetStockObject(DEFAULT_GUI_FONT),
        (LPARAM) lParam
        );

    SendMessage((HWND) EditNum2, (UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditNum3, (UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditNum4, (UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);

    SendMessage(
        (HWND) ButtonMais,
        (UINT) WM_SETFONT,
        (WPARAM) GetStockObject(DEFAULT_GUI_FONT),
        (LPARAM) lParam
        );

}

char s_valor1[20] = "0", s_valor2[20] = "0",s_valor3[20] = "0", s_valor4[20] = "0", s_total[20] = "0";
int valor1, valor2,valor3, valor4, total;

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
            DesenharObjectos(hwnd,message,wParam,lParam);
        break;
        case WM_COMMAND:

            if ((HIWORD(wParam) == BN_CLICKED))
            {

                SendMessage(
                    (HWND) EditNum1,
	                (UINT) EM_GETLINE,
	                (WPARAM) 1,
	                (LPARAM) &s_valor1
                    );

                SendMessage((HWND)EditNum2,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &s_valor2);
                SendMessage((HWND)EditNum3,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &s_valor3);
                SendMessage((HWND)EditNum4,(UINT)EM_GETLINE,(WPARAM)1,(LPARAM) &s_valor4);

               	valor1 = atoi(s_valor1);
                valor2 = atoi(s_valor2);
                valor3 = atoi(s_valor3);
                valor4 = atoi(s_valor4);

                switch (LOWORD(wParam))
                {
                    case ID_BUTTON_resultado:
                        if(valor4!=0&&valor3!=0)total = valor4/valor2 * valor3/valor1;
                    break;

                }

                itoa (total,s_total,10);

                DesenharObjectos(hwnd,message,wParam,lParam);

                SendMessage(
	                (HWND) EditTotal,
	                (UINT) WM_SETTEXT,
	                (WPARAM) 0,
	                (LPARAM) &s_total
                    );

            }
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
        break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!