Entrar    Registrar

Ajuda com Hello World

Programação C em geral

Moderadores: guest2003, 51

  • Autor
    Mensagem

Ajuda com Hello World

Mensagempor denis » 02 Set 2016 09:33

Bom dia pessoal,

Estou tentando alterar um programa em C/C++ utilizando Win32 API, minhas dúvidas são:

Colocar uma rotina no loop principal para enviar/receber dados da serial, estou acostumado em C
onde coloco tudo na "main" com um laço. Coloquei um breakpoint dentro do "while" e ele só acontece quando tenho
alguma atividade na minha janela, como fazer isso rodar constantemente?

Gostaria de atualizar a mensagem impressa, preciso criar um novo case na função "WndProc"? Como fazer isso?

Código: Selecionar todos
#include <windows.h>

const char g_szClassName[] = "myWindowClass";
LPSTR TextArray[] =    { "Hello World" };

// Step 4: the Window Procedure
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch(msg)
    {
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;

        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            TextOutA(hdc, 10, 10, TextArray[0], 5);
            EndPaint(hwnd, &ps);
        }
        break;

        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    static HWND hwnd;
    MSG Msg;
    static uint8_t count = 0;

    //Step 1: Registering the Window Class
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = g_szClassName;
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc))
    {
       MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
       return 0;
    }

    // Step 2: Creating the Window
    hwnd = CreateWindowEx(
        WS_EX_CLIENTEDGE,
        g_szClassName,
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
        MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
        return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

      // Step 3: The Message Loop
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    return Msg.wParam;
}



Qualquer ajuda é bem vinda.
Denis
denis
Byte
 
Mensagens: 176
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Ajuda com Hello World

Mensagempor andre_teprom » 02 Set 2016 12:13

Não está bem claro qual o compilador/IDE que voce tá usando, mas quando mexi com o Borland Builder, usava uma thread que ficava constantemente monitorando o buffer de recepção. Na verdade, como era dificil manipular esse buffer, coloquei o tamanho dele sendo = 1.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_teprom
Dword
 
Mensagens: 5264
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Ajuda com Hello World

Mensagempor denis » 02 Set 2016 13:28

Andre,

A rotina que envia/recebe dados da serial eu ja tenho pronta, eu queria saber onde colocar neste programa.
Precisava de algo que fica checando constantemente.
denis
Byte
 
Mensagens: 176
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Ajuda com Hello World

Mensagempor EDSONCAN » 02 Set 2016 14:58

Não entendi o motivo dessas chaves:
cpp code
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOutA(hdc, 10, 10, TextArray[0], 5);
EndPaint(hwnd, &ps);
}
break;


Em visualbasic uso um timer para ficar checando..

Characteristics of a Timer
The timer in VCL applications is made available through the TTimer class. To add it to your application at design time, from the System property page of the Component Palette, click Timer and click on the form......
EDSONCAN
Word
 
Mensagens: 873
Registrado em: 11 Out 2006 14:11

Re: Ajuda com Hello World

Mensagempor andre_teprom » 02 Set 2016 15:52

denis escreveu:A rotina que envia/recebe dados da serial eu ja tenho pronta, eu queria saber onde colocar neste programa.
Precisava de algo que fica checando constantemente.


Então, se voce colocar numa thread em separado, qualquer pooling em loop infinito não vai impactar no programa principal, que por sua vez apenas verificaria o status do flag de "pacote recebido" e leria o conteudo salvo, obviamente ressetando esse flag após a leitura.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_teprom
Dword
 
Mensagens: 5264
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Ajuda com Hello World

Mensagempor barboza » 02 Set 2016 20:21

EDSONCAN escreveu:Não entendi o motivo dessas chaves:
cpp code
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOutA(hdc, 10, 10, TextArray[0], 5);
EndPaint(hwnd, &ps);
}
break;




Para criar a variável local ps.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 943
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Re: Ajuda com Hello World

Mensagempor denis » 03 Set 2016 16:40

andre_teprom escreveu:
denis escreveu:A rotina que envia/recebe dados da serial eu ja tenho pronta, eu queria saber onde colocar neste programa.
Precisava de algo que fica checando constantemente.


Então, se voce colocar numa thread em separado, qualquer pooling em loop infinito não vai impactar no programa principal, que por sua vez apenas verificaria o status do flag de "pacote recebido" e leria o conteudo salvo, obviamente ressetando esse flag após a leitura.


Entendi, uma thread só para tratar os dados da serial.
denis
Byte
 
Mensagens: 176
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Re: Ajuda com Hello World

Mensagempor denis » 03 Set 2016 16:43

barboza escreveu:
EDSONCAN escreveu:Não entendi o motivo dessas chaves:
cpp code
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
TextOutA(hdc, 10, 10, TextArray[0], 5);
EndPaint(hwnd, &ps);
}
break;




Para criar a variável local ps.


Além de criar a variável local as vezes ajuda quando se tem um case muito grande também.
denis
Byte
 
Mensagens: 176
Registrado em: 06 Mar 2007 12:29
Localização: Americana - SP

Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes