Necesito ayuda de programación con un programa en lenguaje C++
Creo que programar por mi seria no aprender pero para aprender se necesita saber encontrar respuestas y tal vez usted me pueda brindar ayuda, u orientarme
Espero tenga la amabilidad de poder ayudarme en cuanto a un pregunta que tengo en c++
Trabajado con el programa dev-c++ y debo presentar un proyecto de programación, por lo que escogí el lenguaje c++, el proyecto esta diriguido para windows o sea una aplicación win32, el proyecto consta de una entrada de datos, procesamiento de esos datos y luego una salida para que el usuario vea el resultado, los datos a procesar son de tipo doublepues son cantidades sumamente grandes con decimales, pues bueno yo ya tengo una configuración más o menos así:
El programa abre una pantalla donde existe un menu el cual comunica a un dialogo
en este dialogo se piden las entredas , pero en c++ la caja de dialogo solo me permite introducir numero de tipo int o char , entonces yo he escogido char para luego transformarlo a double mediante
variable_tipo_double=atof(variable_tipo_char)
incluido en la biblioteca #include <stdlib.h>
Esto devuelve un numero double pues bueno hasta aquí ya lo he realizado incluso el proceso de datos ya los realice mediante una función, pero el problema es que no he podido lograr darle salida a los datos para que vea el usuario el resultado pues tato de usar un MessageBox( hDlg, Datos. Resultado, "el resultado es", MB_OK); como sabes este tipo de función solo acepta Datos. Resultado si son de tipo const char, entonces tengo que convertir la variable resultado de tipo double a char y eso no lo he podido hacer o cuando lo he hecho no me despliega el resultado como si estuviera en blanco la variable
el programa mas o menos es asi:
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include "ids.h"
// Datos de la aplicación
typedef struct stDatos
{
char norte[80];
char este[80];
char resultado[80];
} DATOS;
DATOS Datos;
double conversion_norte;
/* Declaración del procedimiento de ventana */
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
/* Declaración del procedimiento de diálogo */
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WindowProcedure;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpszClassName = "NUESTRA_CLASE";
WndClass.lpszMenuName = "Menu";
RegisterClass(&WndClass);
hWnd = CreateWindow(
"NUESTRA_CLASE",
"Ventana de Ejemplo de diálogo y control Edit",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
320,
200,
HWND_DESKTOP,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd, SW_SHOWDEFAULT);
while(TRUE == GetMessage(&Message, 0, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
/* Esta función es llamada por la función del API DispatchMessage() */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance;
switch (msg) /* manipulador del mensaje */
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
return 0;
break;
case WM_COMMAND:
if(LOWORD(wParam) == CM_DIALOGO)
DialogBox(hInstance, "DialogoPrueba", hwnd, &DlgProc);
break;
case WM_DESTROY:
PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */
break;
default: /* para los mensajes de los que no nos ocupamos */
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WORD status;
switch (msg) /* manipulador del mensaje */
{
case WM_INITDIALOG:
SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L);
SetDlgItemText(hDlg, ID_TEXTO,"123");
SetFocus(GetDlgItem(hDlg, ID_TEXTO));
return FALSE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
conversion_norte=atof(Datos.norte);
if (conversion_norte = >10.10)
{
Aquí llamo a la función de proceso que devueve un datro de tipo duoble que es el se le tiene que dar al usuario
aqui trato de convertir la variable double a char
Datos.resultado[80]=(char)conversion_norte;
Aquí me despliega el resultado pero la variable pareciera no convertise o bien dar una cadena vacía
MessageBox(hDlg,Datos.resultado, "mensaje de verficacion", MB_OK);
EndDialog(hDlg, FALSE);
}
else
{
MessageBox(hDlg,Datos.resultado, "cuando no se cumple el if", MB_OK);
EndDialog(hDlg, FALSE);
}
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
}
return TRUE;
}
return FALSE;
}
Si puede ayudarme en este problema te agradecía enormemente
att. Luclaa
[email protected]
Soy novato en esto pero creo que tu ayuda lo lograre gracias
Espero tenga la amabilidad de poder ayudarme en cuanto a un pregunta que tengo en c++
Trabajado con el programa dev-c++ y debo presentar un proyecto de programación, por lo que escogí el lenguaje c++, el proyecto esta diriguido para windows o sea una aplicación win32, el proyecto consta de una entrada de datos, procesamiento de esos datos y luego una salida para que el usuario vea el resultado, los datos a procesar son de tipo doublepues son cantidades sumamente grandes con decimales, pues bueno yo ya tengo una configuración más o menos así:
El programa abre una pantalla donde existe un menu el cual comunica a un dialogo
en este dialogo se piden las entredas , pero en c++ la caja de dialogo solo me permite introducir numero de tipo int o char , entonces yo he escogido char para luego transformarlo a double mediante
variable_tipo_double=atof(variable_tipo_char)
incluido en la biblioteca #include <stdlib.h>
Esto devuelve un numero double pues bueno hasta aquí ya lo he realizado incluso el proceso de datos ya los realice mediante una función, pero el problema es que no he podido lograr darle salida a los datos para que vea el usuario el resultado pues tato de usar un MessageBox( hDlg, Datos. Resultado, "el resultado es", MB_OK); como sabes este tipo de función solo acepta Datos. Resultado si son de tipo const char, entonces tengo que convertir la variable resultado de tipo double a char y eso no lo he podido hacer o cuando lo he hecho no me despliega el resultado como si estuviera en blanco la variable
el programa mas o menos es asi:
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include "ids.h"
// Datos de la aplicación
typedef struct stDatos
{
char norte[80];
char este[80];
char resultado[80];
} DATOS;
DATOS Datos;
double conversion_norte;
/* Declaración del procedimiento de ventana */
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
/* Declaración del procedimiento de diálogo */
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WindowProcedure;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpszClassName = "NUESTRA_CLASE";
WndClass.lpszMenuName = "Menu";
RegisterClass(&WndClass);
hWnd = CreateWindow(
"NUESTRA_CLASE",
"Ventana de Ejemplo de diálogo y control Edit",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
320,
200,
HWND_DESKTOP,
NULL,
hInstance,
NULL
);
ShowWindow(hWnd, SW_SHOWDEFAULT);
while(TRUE == GetMessage(&Message, 0, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
/* Esta función es llamada por la función del API DispatchMessage() */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
static HINSTANCE hInstance;
switch (msg) /* manipulador del mensaje */
{
case WM_CREATE:
hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
return 0;
break;
case WM_COMMAND:
if(LOWORD(wParam) == CM_DIALOGO)
DialogBox(hInstance, "DialogoPrueba", hwnd, &DlgProc);
break;
case WM_DESTROY:
PostQuitMessage(0); /* envía un mensaje WM_QUIT a la cola de mensajes */
break;
default: /* para los mensajes de los que no nos ocupamos */
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
WORD status;
switch (msg) /* manipulador del mensaje */
{
case WM_INITDIALOG:
SendDlgItemMessage(hDlg, ID_TEXTO, EM_LIMITTEXT, 80, 0L);
SetDlgItemText(hDlg, ID_TEXTO,"123");
SetFocus(GetDlgItem(hDlg, ID_TEXTO));
return FALSE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
conversion_norte=atof(Datos.norte);
if (conversion_norte = >10.10)
{
Aquí llamo a la función de proceso que devueve un datro de tipo duoble que es el se le tiene que dar al usuario
aqui trato de convertir la variable double a char
Datos.resultado[80]=(char)conversion_norte;
Aquí me despliega el resultado pero la variable pareciera no convertise o bien dar una cadena vacía
MessageBox(hDlg,Datos.resultado, "mensaje de verficacion", MB_OK);
EndDialog(hDlg, FALSE);
}
else
{
MessageBox(hDlg,Datos.resultado, "cuando no se cumple el if", MB_OK);
EndDialog(hDlg, FALSE);
}
break;
case IDCANCEL:
EndDialog(hDlg, FALSE);
break;
}
return TRUE;
}
return FALSE;
}
Si puede ayudarme en este problema te agradecía enormemente
att. Luclaa
[email protected]
Soy novato en esto pero creo que tu ayuda lo lograre gracias
1 Respuesta
Respuesta de ferrangs
1