Ir ao conteúdo

Posts recomendados

Postado

 Galera peguei um código de uma interface em C de um tutorial e estudei um pouco as funções para poder modificar e deixar a interface como eu quero!

 Ela funciona perfeitamente,mais então no menu principal eu fiz um botão que leva pra segunda janela e essa janela ta dando um erro que pra eu que sou iniciante é algo extremamente estranho.

 É o seguinte,ele da erro em partes especificas do código,mais se eu adiciono um ; e depois compilo ele da erro mais a baixo faço a mesma coisa e o erro some e funciona normal!

 Mais se eu modifico algo ou fecho e reabro ele da o mesmo erro e tenho que fazer o mesmo processo de novo.

 O que pode estar errado? 

 

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
#define btn 1
#define ctn 1
//HWND do controles
HWND bot1;
HWND bot2;

LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;
HWND hwnd;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
//wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.lpfnWndProc=WinProc;
wc.lpszClassName="Janela";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,"Janela","EXEMPLO 1",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam ;

}
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){  
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_CREATE: //Processo de criação da janela
bot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,window,(HMENU)1,0,0); //Cria botão
bot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,80,120,20,window,(HMENU)2,0,0);
break;
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão
 ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
 break;
 
 case 2:
 #include "teste/area2.c" // <~~ Aqui ta executando a segunda tela (caso não seja essa a forma correta favor me avisem)
 break;
} 
break;
default:
return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}

Essa é a segunda tela que está no arquivo.c,é o mesmo código porque estava recebendo erro em qualquer código que eu colocava e tinha chaves {}, então coloquei o mesmo código pra tentar descobrir o erro!

 

 

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
#define xtn 1
#define ztn 1
//HWND do controles
HWND xot1;
HWND zot2;

LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain2(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd){; // <~~ Aqui da o 1º. erro
MSG message;
HWND hwnd;
WNDCLASSEX wc;
wc.cbClsExtra=0;
wc.cbSize=sizeof(wc);
wc.cbWndExtra=0;
wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.lpfnWndProc=WinProc2;
wc.lpszClassName="Janela";
wc.lpszMenuName=NULL;
wc.style=0;
RegisterClassEx(&wc);
hwnd = CreateWindowEx(0,"Janela","EXEMPLO 1",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam ;

}
LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);{ // ~~ Aqui da o 2º. erro
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_CREATE: //Processo de criação da janela
xot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,window,(HMENU)1,0,0); //Cria botão
zot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,80,120,20,window,(HMENU)2,0,0);
break;
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão
 ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
 break;
 
 case 2:
 //goto area2;
 MessageBox (0,"SUCESSO","",0);
} 
break;
default:
return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}

 

 Alguém sabe qual o erro? Caso o erro esteja na forma que estou puxando a segunda tela (#include teste/area2.c) favor me falem a forma certa.

 Ia usar goto, mas, goto na mesma tela me da erro e puxando pra segunda tela também da o mesmo erro (ex: area2...faço normal e ele me fala que não declarei a area2;)

 Desculpem se tiver ficado meio confuso,alguém sabe o que pode ser?  

 

Segue um print

 

 

pr.png

  • Curtir 1
Postado
10 minutos atrás, Xaws disse:

O que pode estar errado? 

Também sou iniciante neste código, porém sugiro que pode ser problema no seu compilador... Poderia descrever o programa/compilador que utiliza? 

  • Curtir 1
Postado
1 minuto atrás, Ian Rossi disse:

Também sou iniciante neste código, porém sugiro que pode ser problema no seu compilador... Poderia descrever o programa/compilador que utiliza? 

 Acabei de att o post.
Uso o devc++

  • Curtir 1
Postado
2 minutos atrás, Xaws disse:

Uso o devc++

Pra ser sincero, acho esse compilador muito desatualizado para o seu Sistema Operacional... Reduzi problemas do tipo utilizando o Code Blocks... Caso tenha o mesmo problema, aí não sei como contornar kjjj. 

  • Curtir 1
Postado
1 minuto atrás, Ian Rossi disse:

Pra ser sincero, acho esse compilador muito desatualizado para o seu Sistema Operacional... Reduzi problemas do tipo utilizando o Code Blocks... Caso tenha o mesmo problema, aí não sei como contornar kjjj. 

 valeu por tentar ajudar,eu tinha instalado o code::blocks no meu computador mesmo (o atual é o do meu trabalho) mais ele me apresentou erros ao compilar um código que não tinha erro algum e nem usava nenhuma biblioteca que não fosse padrão.

 Talvez possa ser por causa que no meu pc eu uso windows 10, vou testar depois...
 O que eu não consigo entender é porque o mesmo código funciona normal mais ao ser puxado de um arquivo.c ele apresenta esses erros, isso ao meu ponto de vista é muito estranho :lol:

  • Curtir 1
Postado

@Xaws     No Dev c++, antes de tudo você precisa criar um projeto clicando em file / new / project / windows application   e  coloque o nome e clique ok, com isso vai abrir uma listagem, então selecione toda a listagem e delete ela e no lugar coloque o seu código, com isso pode compilar que vai funcionar, e quando for abrir novamente abra o arquivo tipo  dev c++ project file pois se você abrir o arquivo tipo c++ source file ele não roda mesmo não.    essa segunda janela é para fazer o que ?  pois esse include "teste/area2.c" não deu certo mesmo não.  

    experimente esse código aqui :

#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+5;

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

    hwnd = CreateWindowEx (
        0,
        "WindowsApp",
        "Duas Janelas",
        WS_OVERLAPPEDWINDOW,
        350,
        50,
        800,
        600,
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
        );

    ShowWindow (hwnd, nFunsterStil);

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

    return messages.wParam;
}
#define bot1 1001
#define bot2 1002

HINSTANCE g_inst;
HWND mBot1;

void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
                mBot1 = CreateWindowEx (
                0,
                "BUTTON",
                "Area do Usuario",
                WS_VISIBLE|WS_CHILD,
                140, 40, 120, 20,
                hwnd,
                (HMENU)bot1,
                g_inst,
                NULL
                );
                mBot1 = CreateWindowEx (
                0,
                "BUTTON",
                "Area do Contador",
                WS_VISIBLE|WS_CHILD,
                140, 80, 120, 20,
                hwnd,
                (HMENU)bot2,
                g_inst,
                NULL
                );
}
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)){

                switch (LOWORD(wParam)){
                    case bot1:
                        ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
                    break;
                    case bot2:
                        /*#include "teste/area2.c"*/
                        MessageBox(NULL,"aqui a mensagem botão 2 ","Aqui o titulo",MB_OK | MB_ICONINFORMATION);
                    break;
                }
            }
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
        break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

 

  • Curtir 1
Postado
17 horas atrás, devair1010 disse:

@Xaws     No Dev c++, antes de tudo você precisa criar um projeto clicando em file / new / project / windows application   e  coloque o nome e clique ok, com isso vai abrir uma listagem, então selecione toda a listagem e delete ela e no lugar coloque o seu código, com isso pode compilar que vai funcionar, e quando for abrir novamente abra o arquivo tipo  dev c++ project file pois se você abrir o arquivo tipo c++ source file ele não roda mesmo não.    essa segunda janela é para fazer o que ?  pois esse include "teste/area2.c" não deu certo mesmo não.  

    experimente esse código aqui :


#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+5;

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

    hwnd = CreateWindowEx (
        0,
        "WindowsApp",
        "Duas Janelas",
        WS_OVERLAPPEDWINDOW,
        350,
        50,
        800,
        600,
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
        );

    ShowWindow (hwnd, nFunsterStil);

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

    return messages.wParam;
}
#define bot1 1001
#define bot2 1002

HINSTANCE g_inst;
HWND mBot1;

void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
                mBot1 = CreateWindowEx (
                0,
                "BUTTON",
                "Area do Usuario",
                WS_VISIBLE|WS_CHILD,
                140, 40, 120, 20,
                hwnd,
                (HMENU)bot1,
                g_inst,
                NULL
                );
                mBot1 = CreateWindowEx (
                0,
                "BUTTON",
                "Area do Contador",
                WS_VISIBLE|WS_CHILD,
                140, 80, 120, 20,
                hwnd,
                (HMENU)bot2,
                g_inst,
                NULL
                );
}
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)){

                switch (LOWORD(wParam)){
                    case bot1:
                        ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
                    break;
                    case bot2:
                        /*#include "teste/area2.c"*/
                        MessageBox(NULL,"aqui a mensagem botão 2 ","Aqui o titulo",MB_OK | MB_ICONINFORMATION);
                    break;
                }
            }
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
        break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}

 

 

 

   Eu sei,a segunda janela era mais pra aprendizado... Vou fazer um sistema de login depois.

 No caso a include area2.c seria o seguinte,fiz o código da segunda janela e salvei como area2.c...como não consegui jogar pra segunda janela com goto nem mesmo criando ela no mesmo código eu resolvi fazer isso e colocar #include area2.c pra puxar o código da segunda janela 

  • Curtir 1
Postado

Consegui arrumar,mais estou com o seguinte problema... Quando puxo a segunda tela em vez de ela vir em branco ele aparece o botão da primeira tela (isso depois de apagar os botões na janela 2 e modificar as funções tipo WinProc pra WinProc2,wc pra wc e etc...

 

 Alguma ideia?

Desculpe se não podia reviver o tópico assim rs

  • Curtir 1
Postado
12 horas atrás, devair1010 disse:

@Xaws     posta o código para podermos ver como está,  também estou estudando sobre interface e gostaria de ver como você resolveu .

 Amigo é o mesmo código,sabe o que tava dando errado? 

 Quando eu modifico algo na segunda tela e vou pra primeira eu tenho que por tipo um a e depois apagar antes de compilar...Não sei porque esse era o erro,o problema agora é esse que a segunda tela aparece o botão da primeira em vez de aparecer o da segunda ou nenhum.

 Se quiser nois pode se juntar pra se ajudar sobre isso

  • Curtir 1
Postado

@Xaws    testei seu código da segunda listagem e ele funciona e aparece uma janela com dois botões, quando clica no primeiro ele abre uma janela do google chrome e no segundo mostra uma janela com mensagem, não vi essa segunda janela que você disse, como você está colocando esse include teste/area2 ? você salvou o código com esse nome ?  e quando ele encontra esse include no código ele roda os comandos que estão nesse arquivo ?

   esse seu código aqui está funcionando bem ,  experimente ele aí :

estou usando o DEV c++  versão 4.9.9.2 :

#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
#define xtn 1
#define ztn 11
//HWND do controles
HWND xot1;
HWND zot2;

LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd){; // <~~ Aqui da o 1º. erro
    MSG message;
    HWND hwnd;
    WNDCLASSEX wc;
    wc.cbClsExtra=0;
    wc.cbSize=sizeof(wc);
    wc.cbWndExtra=0;
    wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.lpfnWndProc=WinProc2;
    wc.lpszClassName="Janela";
    wc.lpszMenuName=NULL;
    wc.style=0;
    RegisterClassEx(&wc);
    hwnd = CreateWindowEx(0,"Janela","EXEMPLO 1",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
    ShowWindow(hwnd,SW_SHOW);
    UpdateWindow(hwnd);
    while(GetMessage(&message,0,0,0)){
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return message.wParam ;
}
LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){ // ~~ Aqui da o 2º. erro
    switch(msg){
        case WM_CLOSE:
            PostQuitMessage(0);
            break;
        case WM_CREATE: //Processo de criação da janela
            xot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                                  140,40,120,20,window,(HMENU)1,0,0); //Cria botão
            zot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                                  140,80,120,20,window,(HMENU)2,0,0);
            break;
        case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
            switch(wParam){ //Verifica parâmetro{
                case 1: //Se for o botão
                    ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
                    break;
                case 2:
                    //goto area2;
                    MessageBox (0,"SUCESSO","",0);
            }
            break;
    }
    return DefWindowProc(window,msg,wParam,lParam);
}

 

  • Curtir 1
Postado
7 minutos atrás, devair1010 disse:

@Xaws    testei seu código da segunda listagem e ele funciona e aparece uma janela com dois botões, quando clica no primeiro ele abre uma janela do google chrome e no segundo mostra uma janela com mensagem, não vi essa segunda janela que você disse, como você está colocando esse include teste/area2 ? você salvou o código com esse nome ?  e quando ele encontra esse include no código ele roda os comandos que estão nesse arquivo ?

   esse seu código aqui está funcionando bem ,  experimente ele aí :

estou usando o DEV c++  versão 4.9.9.2 :


#include <windows.h>
#include <stdio.h>
#include <shellapi.h>
#define xtn 1
#define ztn 11
//HWND do controles
HWND xot1;
HWND zot2;

LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd){; // <~~ Aqui da o 1º. erro
    MSG message;
    HWND hwnd;
    WNDCLASSEX wc;
    wc.cbClsExtra=0;
    wc.cbSize=sizeof(wc);
    wc.cbWndExtra=0;
    wc.hbrBackground=GetSysColorBrush(COLOR_BTNFACE);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.lpfnWndProc=WinProc2;
    wc.lpszClassName="Janela";
    wc.lpszMenuName=NULL;
    wc.style=0;
    RegisterClassEx(&wc);
    hwnd = CreateWindowEx(0,"Janela","EXEMPLO 1",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
    ShowWindow(hwnd,SW_SHOW);
    UpdateWindow(hwnd);
    while(GetMessage(&message,0,0,0)){
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    return message.wParam ;
}
LRESULT CALLBACK WinProc2(HWND window,UINT msg, WPARAM wParam,LPARAM lParam){ // ~~ Aqui da o 2º. erro
    switch(msg){
        case WM_CLOSE:
            PostQuitMessage(0);
            break;
        case WM_CREATE: //Processo de criação da janela
            xot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                                  140,40,120,20,window,(HMENU)1,0,0); //Cria botão
            zot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                                  140,80,120,20,window,(HMENU)2,0,0);
            break;
        case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
            switch(wParam){ //Verifica parâmetro{
                case 1: //Se for o botão
                    ShellExecute (NULL,"open","www.google.com",NULL,NULL,NULL);
                    break;
                case 2:
                    //goto area2;
                    MessageBox (0,"SUCESSO","",0);
            }
            break;
    }
    return DefWindowProc(window,msg,wParam,lParam);
}

 

 

 Sim você não entendeu,a primeira janela tem 2 botões o 1 leva pro google e o 2 pra segunda janela (que está em area2.c)

na segunda janela que dava o problema de aparecer os botões da primeira mais já arrumei,agora só falta arrumar as ações ^^
 Quando eu conseguir eu posto aqui e explico o erro pra te ajudar 

  • Curtir 1
Postado

@devair1010  Então cara,consegui fazer com que ao puxar a segunda tela os botões da primeira sumam. 

Problema agora é que na segunda tela não aparece botão :@ 

Segue o código pra você tentar também

 

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define btn 1
#define ctn 1
//HWND do controles
HWND bot1;
HWND bot2;
HWND bot3;
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;
HWND hwnd;
WNDCLASSEX wc2;
wc2.cbClsExtra=0;
wc2.cbSize=sizeof(wc2);
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc2.lpfnWndProc=WinProc;
wc2.lpszClassName="Janela";
wc2.lpszMenuName=NULL;
wc2.style=0;
RegisterClassEx(&wc2);
hwnd = CreateWindowEx(0,"Janela"," JANELA TESTE 1",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
bot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,hwnd,(HMENU)1,0,0); //Cria botão
bot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,80,120,20,hwnd,(HMENU)2,0,0);
bot3 = CreateWindowEx(0,"BUTTON","SAIR" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,120,120,20,hwnd,(HMENU)3,0,0);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}

LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);

break;
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão
 system ("start www.google.com");
 break;
 
 case 2:
#include "area2.c" //Aqui está puxando a segunda tela que está em um arquivo .c
break;
 
 case 3:
 exit(0);
} 
break;
default:
return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}




 

Postado

@devair1010  Só criar um arquivo novo e na hora de salvar você coloca a extensão como .c,você salva na mesma pasta onde ta salvando sua interface.

 Nesse arquivo você coloca o código da sua interface,eu apenas copiei a mesma e colei lá kk

 

Segue...

 

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define dtn 1
#define etn 1
//HWND do controles
HWND bot1;
HWND bot2;
HWND bot3;
HWND bot4;
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd);
{
MSG message;
HWND hwnd2;
WNDCLASSEX wc2;
wc2.cbClsExtra=0;
wc2.cbSize=sizeof(wc2);
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc2.lpfnWndProc=WinProc;
wc2.lpszClassName="Janela2";
wc2.lpszMenuName=NULL;
wc2.style=0;
RegisterClassEx(&wc2);
hwnd2 = CreateWindowEx(0,"Janela2"," xxxxxxxx",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL); 
bot1 = CreateWindowEx(0,"BUTTON2","teste" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,120,120,20,NULL,(HMENU)1,0,0);
ShowWindow(hwnd2,SW_SHOW);
UpdateWindow(hwnd2);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam ;
}
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
bot1 = CreateWindowEx(0,"BUTTON","teste" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,window,(HMENU)1,0,0); //Cria botão
break;
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão
 system ("start www.google.com");
 break;
 
 case 2:
//#include "area2.c"
break;
 
 case 3:
 exit(0);
} 
break;
default:
return DefWindowProc(window,msg,wParam,lParam);
}
return 0;
}




 

  • Curtir 1
Postado

 Consegui,vou postar os códigos pra quem quiser e dar uma pequena explicada!!!

Vamos lá,primeira tela (no caso seria a tela principal)

 

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
//SERÁ OS BOTÕES,FUNCIONA SEM NOME TAMBÉM,USE COM NOMES ASSIM PRA EVITAR SE PERDER!
HWND bot1;
HWND bot2;
HWND bot3;
HWND bot4;
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
MSG message;
HWND hwnd;
WNDCLASSEX wc2;
wc2.cbClsExtra=0;
wc2.cbSize=sizeof(wc2);
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc2.lpfnWndProc=WinProc;
wc2.lpszClassName="Janela";
wc2.lpszMenuName=NULL;
wc2.style=0;
RegisterClassEx(&wc2);
hwnd = CreateWindowEx(0,"Janela"," AQUI O NOME DA SUA JANELA",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL); 
bot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,hwnd,(HMENU)1,0,0);
bot2 = CreateWindowEx(0,"BUTTON","Area do Contador" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,80,120,20,hwnd,(HMENU)2,0,0);
bot3 = CreateWindowEx(0,"BUTTON","SAIR" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,120,120,20,hwnd,(HMENU)3,0,0);
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg, WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_CREATE: //Processo de criação da janela
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão 
 system ("start www.google.com");
 break;
 
 case 2:
#include "area2.c"

 case 3:
 exit(0);
 
 case 4:
system ("start www.youtube.com");
break;
} 
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}

 

 Crie aquelas funções pros botões como eu fiz pra evitar se perder (bot1,bot2...etc)

bot1 = CreateWindowEx(0,"BUTTON","Area do Usuario" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,hwnd,(HMENU)1,0,0);

Veja que no final do código do botão tem esses números 1,0,0); <~~ Sempre que criar um botão novo você tem que mudar esse número pro número da case da ação dele!

exemplo: você criou o primeiro botão (o mesmo do meu exemplo acima) a função que ele vai executar vai ser a que está aqui:

switch(wParam) //Verifica parâmetro
{
case 1:
 system ("start www.google.com");
 break;

 Que no caso é a case 1:

 As ações dos botões da segunda tela são colocada na primeira tela (foi o único jeito que consegui)

 

 Agora a segunda tela (a que fica em um arquivo com extensão .c)
PS: usei a extensão .c mais você pode usar outras...

segue...

 

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
//HWND do controles
HWND bot1;
HWND bot2;
HWND bot3;
HWND bot4;
LRESULT CALLBACK WinProc(HWND window,UINT msg, WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd);
{
MSG message;
HWND hwnd;
WNDCLASSEX wc2;
wc2.cbClsExtra=0;
wc2.cbSize=sizeof(wc2);
wc2.cbWndExtra=0;
wc2.hbrBackground=(HBRUSH) COLOR_BACKGROUND;
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc2.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
wc2.lpfnWndProc=WinProc;
wc2.lpszClassName="Janela";
wc2.lpszMenuName=NULL;
wc2.style=0;
RegisterClassEx(&wc2);
hwnd = CreateWindowEx(0,"Janela"," L&A Contábil",WS_OVERLAPPED|WS_SYSMENU,300,100,900,400,NULL,NULL,NULL,NULL);
bot1 = CreateWindowEx(0,"BUTTON","TESTE 1" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,hwnd,(HMENU)4,0,0); //Cria botão
ShowWindow(hwnd,SW_SHOW);
UpdateWindow(hwnd);
while(GetMessage(&message,0,0,0)){
TranslateMessage(&message);
DispatchMessage(&message);
}
return message.wParam;
}

LRESULT CALLBACK WinProc(HWND hwnd,UINT msg, WPARAM wParam,LPARAM lParam);
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
break;
case WM_CREATE: //Processo de criação da janela
//bot4 = CreateWindowEx(0,"BUTTON","teste" ,WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,140,40,120,20,hwnd,(HMENU)4,0,0); //Cria botão
case WM_COMMAND: //Mensagem enviada quando um controle é clicado:
switch(wParam) //Verifica parâmetro
{
case 1: //Se for o botão
 system ("start www.google.com");
 break;
 
 case 2:
break;

 case 3:
 exit(0);
 
 case 4:
system ("start www.youtube.com");
break;
} 
break;
default:
return DefWindowProc(hwnd,msg,wParam,lParam);
}
return 0;
}

 

  Se algum profissional em programação souber um jeito mais simples por favor poste pros novatos como eu =)
PS: Aceito dicas de como iniciar a outra janela no lugar da primeira (ou seja sem abrir outra tela,coisa que o código atual está fazendo)

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

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!