Ir ao conteúdo

Posts recomendados

Postado

Esto desenvolvendo para fim didático uma interface que calcula um capacitor e indutor pra me dar o valor da frequência no código bota para fazer a transformação de string para ponto flutuante depois de volta para string no meu código vem esses erros

C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x433): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x46b): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x4a3): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x4db): undefined reference to `_imp__GetStockObject@4'
C:\Users\Kisne\AppData\Local\Temp\cc1sZSvM.o    Calculos eletronicos e eletricos.c:(.text+0x62f): undefined reference to `ftoa'
C:\Users\Kisne\Documents\Novos projetos c\collect2.exe    [Error] ld returned 1 exit status

 

aqui está meu código, pelo amor de Deus alguém pode me da um alô.

#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.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,      
        250,      
        320,               
        300,               
        HWND_DESKTOP,    
        NULL,              
        hThisInstance,      
        NULL                
        );

    ShowWindow (hwnd, nFunsterStil);

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

#define ID_BUTTONok 1001

HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;

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

    EditTotal = CreateWindowEx (
        WS_EX_CLIENTEDGE,"EDIT", "",       
        WS_VISIBLE|WS_CHILD|WS_BORDER, 
        160, 30, 100, 20,                
        hwnd, NULL, g_inst, NULL );

    CreateWindowEx (
        0,"STATIC","H",       
        WS_VISIBLE|WS_CHILD, 
        5, 30, 10, 20,                
        hwnd,NULL,g_inst,NULL);
           
    CreateWindowEx (
        0, "STATIC", "C",       
        WS_VISIBLE|WS_CHILD, 
        5, 50, 10, 20,             
        hwnd,NULL,g_inst, NULL);
           
    ButtonOk = CreateWindowEx (
        0, "BUTTON", "OK",       
        WS_VISIBLE|WS_CHILD, 
        120, 30, 40, 40,             
        hwnd,(HMENU)ID_BUTTONok, 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) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	
    
    SendMessage((HWND) ButtonOk,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);	       	
}

char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0";
float valor1, valor2, 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);
                 
               	valor1 = atof(s_valor1);
                valor2 = atof(s_valor2); 
                 
                switch (LOWORD(wParam))
                {
                    case ID_BUTTONok:  
                        total = (1/(6.28*(sqrt(valor1 * valor2))));
                    break;
                   
                }    
                
                total = ftoa(s_total);
                     
                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;
}

 

  • Amei 1
Postado

Eu creio que o erro é na linha 141

                total = ftoa(s_total);

é que você estava tentando usar a função atof() da biblioteca stdlib.h, que seria assim

                total = atof(s_total);

 

  • Curtir 1
Postado

@kisne

3 horas atrás, kisne disse:

interface que calcula um capacitor e indutor pra me dar o valor da frequencia

Confuso...

Seria um circuito LC ou o que?

 

Aliás, é possível editar o texto de todas as editbox, inclusive a do resultado.

image.png.23edbff0681beed14ce163db86a083a4.png

Talvez você pudesse adicionar o estilo ES_READONLY para que o usuário não possa editar o que não deve.

Adicione também algumas informações aí na janela para saber de que se trata essa calculadora.

 

E como @kgin disse, chamou uma tal ftoa() em vez da atof().

 

3 horas atrás, kisne disse:

no meu código vem esses erros

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado :D

  • Curtir 1
Postado

Dei uma olhada aqui de novo é o programa está chamando a função GetStockObject() da biblioteca GDI sem acrescentar o cabeçalho gdi.h (isso depende do compilador, no freepascal é só gdi).

 

Fora que eu acho que tem que acrescentar algumas linhas na compilação, como -gdi, ou -gdi+, e -D UNICODE para evitar a codificação do Windows.

 

54 minutos atrás, Lucca Rodrigues disse:

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado 

Provavelmente usando o mingw, se você consegui compilar aí aproveite e passe a configuração do compilador que você usou para ele.

  • Curtir 1
Postado

@kisne    sim o erro é nessa função ftoa , que você colocou ,  creio que você está tentando converter um número com casas decimais , float  ou double , para char string ,  como nesse código originaL ,  desse site :

interface Gráfica em C

que usa a função   itoa  ,     mas nem todos os compiladores a aceitam , pois ela não faz parte da ANSI   , como é informado nesse link :

Função itoa em C++

então acrescente essa função criada pelo usuário  lá no início de seu programa , e ele vai compilar e rodar , porém  aqui ela não faz nada mesmo , pois precisa programar uma solução para realizar essa conversão de float para string , que você Quer  ,

char ftoa(float n, char str[], int b)
{
    char temp[100],ax;
    while( 1)
    {
        /// pegar cada digito do número
        /// e converter ele para um char 
        /// da tabela ASCII
        /// removendo 48 de seu valor
        /// e depois concatenar em outra string char
        /// usando strcat
        break;
    }
}

e faça a configuração do compilador para esses cabeçalhos  , aqui no codeblock :

codeblock.jpg.84a24fc556afc773a28bb3d2ab5feafb.jpg

Postado
18 minutos atrás, kgin disse:

Provavelmente usando o mingw, se você consegui compilar aí aproveite e passe a configuração do compilador que você usou para ele.

Pelo Code:Blocks, os comandos adicionados às opções de linker ao criar um projeto Win32 GUI Project são por padrão -lgdi32 -luser32 -lkernel32 -lcomctl32. Se há um diferencial, provavelmente seria este.

No mais, estou usando Debug mode, etc...

  • Curtir 2
Postado

@kisne     se você estiver usando o codeblock pode configurar o linker do compilador e usar esse seu código ,  junto com a função   "ftoa" que converte float para string , e mais algumas modificações :

#define _WIN32_WINNT 0x0500  /* tem ficar aqui na primeira linha */
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
/*
    para rodar e compilar bem coloque essas configurações
    no codeblock ou dev c++, em settings / linker
    -lgdi32
    -lws2_32

*/
#define  ID_BUTTONok 1001
#include <tchar.h>
#include <Windows.h>
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
char ftoa(float , char *, int);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0",
ret[100];
float valor1, valor2, total;
HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;
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 + 6;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx
    (
        0,
        "WindowsApp",
        "Calculadora LC",
        WS_OVERLAPPEDWINDOW,
        350,  /// pos coluna na tela
        250,  /// pos linha na tela
        400,  /// largura da janela
        300,  /// altura da janela
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
    );
    ShowWindow (hwnd, nFunsterStil);
    hwnd = GetConsoleWindow();
    ShowWindow( hwnd, SW_MINIMIZE );
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    ShowWindow( hwnd, SW_MAXIMIZE );
    return messages.wParam;
}
void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx   /// janala onde inserir o 1º numero
    (
        WS_EX_CLIENTEDGE,"EDIT","  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER|ES_CENTER,
        40, 30, 100, 30,
        hwnd,NULL,g_inst,NULL
    );
    EditNum2 = CreateWindowEx  /// janela onde inserir o 2º numero
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        40, 80, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    EditTotal = CreateWindowEx   //// janela onde apresentarah o resultado
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        200, 30, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    CreateWindowEx
    (
        0,"STATIC"," H ",
        WS_VISIBLE|WS_CHILD,
        5, 30, 30, 30,
        hwnd,NULL,g_inst,NULL
    );
    CreateWindowEx
    (
        0, "STATIC", " C ",
        WS_VISIBLE|WS_CHILD,
        5, 80, 30, 30,
        hwnd,NULL,g_inst, NULL
    );
    ButtonOk = CreateWindowEx
    (
        0, "BUTTON", " OK ",
        WS_VISIBLE|WS_CHILD,
        150, 40, 40, 40,
        hwnd,(HMENU)ID_BUTTONok,
        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) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonOk ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
}
LRESULT CALLBACK WindowProcedure
(
    HWND   hwnd   ,
    UINT   message,
    WPARAM wParam ,
    LPARAM lParam
)
{
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    switch ( message )
    {
    case WM_CREATE:
        DesenharObjectos(hwnd,message,wParam,lParam);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE){
            PostQuitMessage (0) ;
            return 0 ;
        }
        break;
    case WM_PAINT :
        HDC tela;
        PAINTSTRUCT ps ;
        tela = GetDC (hwnd) ;
        tela = BeginPaint (hwnd, &ps) ;
        TextOut(tela, 120, 240, frase, _tcslen(frase));
        EndPaint (hwnd, &ps) ;
        break;
    case WM_COMMAND:
        if ( ( HIWORD( wParam ) == BN_CLICKED ) )
        {
            SendMessage( ( HWND ) EditNum1,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor1 );/// getline pega o valor digitado
            SendMessage( ( HWND ) EditNum2,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor2 );/// getline pega o valor digitado
            valor1 = atof( s_valor1 );  /// converte de string para float
            valor2 = atof( s_valor2 );  /// converte de string para float
            switch (LOWORD(wParam))
            {
            case ID_BUTTONok:
                total = (1/(6.28*(sqrt(valor1 * valor2))));
                break;
            }
            ftoa(total,s_total,10); /// 3 parametros o numero  o buffer  em qual base: DecimaL  OctaL  HexadecimaL
            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;
}
char ftoa(float f, char *str, int b)
{

    int z=0,it = (int)f,
    vet[100],i,c=0;
    f -= it;
    while(it >= 10 )
    {
        vet[z] = it % 10;
        it /= 10;
        z++;
    }
    vet[z] = it;
    while(z >= 0)
    {
        str[c] = (char)(vet[z]+48);
        c++;
        z--;
    }
    str[c] = '.';       /// ponto como separador de casas decimais
    c++;
    for(i=0; i<10; i++) /// para dez casas decimais
    {
        f *= 10;
        it = (int)f;
        f -= it;
        str[c] = (char)(it+48);
        c++;
    }
    str[c] = '\0';
    return 0;
}

 

Postado
Em 29/07/2021 às 19:55, Lucca Rodrigues disse:

@kisne

Confuso...

Seria um circuito LC ou o que?

 

Aliás, é possível editar o texto de todas as editbox, inclusive a do resultado.

image.png.23edbff0681beed14ce163db86a083a4.png

Talvez você pudesse adicionar o estilo ES_READONLY para que o usuário não possa editar o que não deve.

Adicione também algumas informações aí na janela para saber de que se trata essa calculadora.

 

E como @kgin disse, chamou uma tal ftoa() em vez da atof().

 

Compilou usando o que?

Aqui funcionou normalmente, mas não entendi ainda o que está sendo calculado :D

um circuito oscilado usando capacitor e um indutor 

Em 31/07/2021 às 06:53, devair1010 disse:

@kisne     se você estiver usando o codeblock pode configurar o linker do compilador e usar esse seu código ,  junto com a função   "ftoa" que converte float para string , e mais algumas modificações :

#define _WIN32_WINNT 0x0500  /* tem ficar aqui na primeira linha */
#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif
/*
    para rodar e compilar bem coloque essas configurações
    no codeblock ou dev c++, em settings / linker
    -lgdi32
    -lws2_32

*/
#define  ID_BUTTONok 1001
#include <tchar.h>
#include <Windows.h>
#include <Windows.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
char ftoa(float , char *, int);
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
char s_valor1[20] = "0", s_valor2[20] = "0", s_total[20] = "0",
ret[100];
float valor1, valor2, total;
HINSTANCE g_inst;
HWND EditNum1,EditNum2,EditTotal,ButtonOk;
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 + 6;
    if (!RegisterClassEx (&wincl))
        return 0;
    hwnd = CreateWindowEx
    (
        0,
        "WindowsApp",
        "Calculadora LC",
        WS_OVERLAPPEDWINDOW,
        350,  /// pos coluna na tela
        250,  /// pos linha na tela
        400,  /// largura da janela
        300,  /// altura da janela
        HWND_DESKTOP,
        NULL,
        hThisInstance,
        NULL
    );
    ShowWindow (hwnd, nFunsterStil);
    hwnd = GetConsoleWindow();
    ShowWindow( hwnd, SW_MINIMIZE );
    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    ShowWindow( hwnd, SW_MAXIMIZE );
    return messages.wParam;
}
void DesenharObjectos(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    EditNum1 = CreateWindowEx   /// janala onde inserir o 1º numero
    (
        WS_EX_CLIENTEDGE,"EDIT","  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER|ES_CENTER,
        40, 30, 100, 30,
        hwnd,NULL,g_inst,NULL
    );
    EditNum2 = CreateWindowEx  /// janela onde inserir o 2º numero
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        40, 80, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    EditTotal = CreateWindowEx   //// janela onde apresentarah o resultado
    (
        WS_EX_CLIENTEDGE,"EDIT", "  ",
        WS_VISIBLE|WS_CHILD|WS_BORDER | ES_CENTER,
        200, 30, 100, 30,
        hwnd, NULL, g_inst, NULL
    );
    CreateWindowEx
    (
        0,"STATIC"," H ",
        WS_VISIBLE|WS_CHILD,
        5, 30, 30, 30,
        hwnd,NULL,g_inst,NULL
    );
    CreateWindowEx
    (
        0, "STATIC", " C ",
        WS_VISIBLE|WS_CHILD,
        5, 80, 30, 30,
        hwnd,NULL,g_inst, NULL
    );
    ButtonOk = CreateWindowEx
    (
        0, "BUTTON", " OK ",
        WS_VISIBLE|WS_CHILD,
        150, 40, 40, 40,
        hwnd,(HMENU)ID_BUTTONok,
        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) EditTotal,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
    SendMessage((HWND) ButtonOk ,(UINT) WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),(LPARAM) lParam);
}
LRESULT CALLBACK WindowProcedure
(
    HWND   hwnd   ,
    UINT   message,
    WPARAM wParam ,
    LPARAM lParam
)
{
    static TCHAR frase[] = _T("Tecle ESC Para Sair !");
    switch ( message )
    {
    case WM_CREATE:
        DesenharObjectos(hwnd,message,wParam,lParam);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE){
            PostQuitMessage (0) ;
            return 0 ;
        }
        break;
    case WM_PAINT :
        HDC tela;
        PAINTSTRUCT ps ;
        tela = GetDC (hwnd) ;
        tela = BeginPaint (hwnd, &ps) ;
        TextOut(tela, 120, 240, frase, _tcslen(frase));
        EndPaint (hwnd, &ps) ;
        break;
    case WM_COMMAND:
        if ( ( HIWORD( wParam ) == BN_CLICKED ) )
        {
            SendMessage( ( HWND ) EditNum1,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor1 );/// getline pega o valor digitado
            SendMessage( ( HWND ) EditNum2,( UINT )EM_GETLINE,( WPARAM )1,( LPARAM ) & s_valor2 );/// getline pega o valor digitado
            valor1 = atof( s_valor1 );  /// converte de string para float
            valor2 = atof( s_valor2 );  /// converte de string para float
            switch (LOWORD(wParam))
            {
            case ID_BUTTONok:
                total = (1/(6.28*(sqrt(valor1 * valor2))));
                break;
            }
            ftoa(total,s_total,10); /// 3 parametros o numero  o buffer  em qual base: DecimaL  OctaL  HexadecimaL
            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;
}
char ftoa(float f, char *str, int b)
{

    int z=0,it = (int)f,
    vet[100],i,c=0;
    f -= it;
    while(it >= 10 )
    {
        vet[z] = it % 10;
        it /= 10;
        z++;
    }
    vet[z] = it;
    while(z >= 0)
    {
        str[c] = (char)(vet[z]+48);
        c++;
        z--;
    }
    str[c] = '.';       /// ponto como separador de casas decimais
    c++;
    for(i=0; i<10; i++) /// para dez casas decimais
    {
        f *= 10;
        it = (int)f;
        f -= it;
        str[c] = (char)(it+48);
        c++;
    }
    str[c] = '\0';
    return 0;
}

 

sim, eu uso o dev c++ 

 

Em 29/07/2021 às 20:54, devair1010 disse:

@kisne    sim o erro é nessa função ftoa , que você colocou ,  creio que você está tentando converter um número com casas decimais , float  ou double , para char string ,  como nesse código originaL ,  desse site :

interface Gráfica em C

que usa a função   itoa  ,     mas nem todos os compiladores a aceitam , pois ela não faz parte da ANSI   , como é informado nesse link :

Função itoa em C++

então acrescente essa função criada pelo usuário  lá no início de seu programa , e ele vai compilar e rodar , porém  aqui ela não faz nada mesmo , pois precisa programar uma solução para realizar essa conversão de float para string , que você Quer  ,

char ftoa(float n, char str[], int b)
{
    char temp[100],ax;
    while( 1)
    {
        /// pegar cada digito do número
        /// e converter ele para um char 
        /// da tabela ASCII
        /// removendo 48 de seu valor
        /// e depois concatenar em outra string char
        /// usando strcat
        break;
    }
}

e faça a configuração do compilador para esses cabeçalhos  , aqui no codeblock :

codeblock.jpg.84a24fc556afc773a28bb3d2ab5feafb.jpg

valeu ai pela ajuda, eu uso o dev c++

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