Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2020
REHome REHome is offline
Miembro
 
Registrado: jul 2003
Ubicación: España
Posts: 454
Poder: 21
REHome Va por buen camino
Pasar de C++ CLR a C++ Win32

Buenas:

Teniendo el código del C++ CLR o .net, quiero adaptarlo a C++ Win32. Su código del C++ CLR es este.

Código:
#include "pch.h"

using namespace System;

void MenuPrincipal(array<String^ >^);

int itemSeñalado;
int itemSeleccionado;

int main(array<System::String^>^ args)
{
	array<String^ >^ TEXTO = gcnew array<String^>
	{
		"( ) Opción A        ",
			"( ) Opción B        ",
			"( ) Opción C        ",
			"    SALIR"
	};

	// Título de la ventana.
	Console::Title = "RadioButton C++ CLR";

	// Tamaño de la ventana.
	Console::SetWindowSize(20, 5);

	// Fondo verde.
	Console::BackgroundColor = ConsoleColor::Blue;

	// Letras negras.
	Console::ForegroundColor = ConsoleColor::White;

	// Oculto el cursor.
	Console::CursorVisible = false;

	// Almacena la tecla pulsada en la variable.
	ConsoleKey teclaInicial;

	do
	{
		// Limpiar pantalla.
		Console::Clear();

		// Posición del cursor del título del MENÚ PRINCIPAL.
		Console::SetCursorPosition(0, 0);

		// Título.
		Console::Write("   MENÚ PRINCIPAL   ");

		// Pocisión de la hora.
		Console::SetCursorPosition(4, 2);

		// Formato numérico dd/MM/yyyy.
		Console::Write(DateTime::Now.ToString("ddd dd MMM"));

		// Almacena en la variable una tecla pulsada.
		teclaInicial = Console::ReadKey(true).Key;

		// ¿Haz pulsado la tecla Enter?
		if (teclaInicial == ConsoleKey::Enter)
		{
			// Sí. Se ejecuta esta función.
			MenuPrincipal(TEXTO);
		}
	} while (teclaInicial != ConsoleKey::Escape);


	return 0;
}

void MenuPrincipal(array<String^ >^ TEXTO)
{
	bool salir = false;

	// En itemSelecionado:
	// -1 = Sin seleccionar con * ninguna opción.
	// 0 = Seleccionar con * la Opción A.
	// 1 = Seleccionar con * la Opción B.
	// 2 = Seleccionar con * la opción C.

	// Capturar tecla para luego validar.
	ConsoleKey tecla;

	// Cada vez que se vuelva al menú, está señalizado con el *.
	itemSeñalado = 0;

	do
	{
		//******************************************************************
		// Dibujo el menú principal.

		// Limpiar pantalla.
		Console::Clear();

		for (int k = 0; k < TEXTO->Length; k++)
		{
			Console::SetCursorPosition(0, k);
			Console::Write(itemSeñalado == k ? "> " : "  ");
			Console::Write(TEXTO[k]);
			Console::SetCursorPosition(3, k);
			Console::Write(itemSeleccionado == k ? "*" : " ");
		}

		// Fin de pintar el menú principal.
		//******************************************************************

		// Leer tecla ingresada por el usuario.
		tecla = Console::ReadKey(true).Key;

		switch (tecla)
		{
		case ConsoleKey::Enter:
			if (itemSeñalado < 3)
			{
				itemSeleccionado = itemSeñalado;
			}
			salir = (itemSeñalado == TEXTO->Length - 1);
			break;

		case ConsoleKey::DownArrow:
			if (++itemSeñalado >= TEXTO->Length)
			{
				itemSeñalado = 0;
			}
			break;

		case ConsoleKey::UpArrow:
			if (--itemSeñalado < 0)
			{
				itemSeñalado = TEXTO->Length - 1;
			}
			break;
		}
		// Uso la tecla escape como salida.
	} while (!salir);
}
El C++ Win32 por ahora solo he hecho esto, título de la ventana, mostrar tildes correctamente en pantalla, ocultar cursor y poco más. El programa completo de arriba no me sale.
Código:
#include <iostream>
#include <windows.h> // Para mostrar texto en el título de la ventana.

using namespace std;

//int itemSeñalado;
//int itemSeleccionado;

int main(void)
{
	string TEXTO[] = 
	{
		"( ) Opción A        ",
		"( ) Opción B        ",
		"( ) Opción C        ",
		"    SALIR"
	};

	// Mostrar caracteres correctamente en pantalla.
	SetConsoleOutputCP(65001);
	wchar_t titulo[128];
	MultiByteToWideChar(CP_UTF8, 0, "Título de la ventana. Win32 C++ 2019.", -1, titulo, 128);
	SetConsoleTitle(titulo);

	// Tamaño de la pantalla. Se cambia en los dos últimos dígitos.
	SMALL_RECT r = { 0, 0, 49, 9 }; // X = 49, Y = 9.
	SetConsoleWindowInfo(GetStdHandle(STD_OUTPUT_HANDLE), TRUE, &r);

	// Ocultar cursor.
	CONSOLE_CURSOR_INFO cci;
	GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
	cci.bVisible = 0; // 0 oculta. 1 muestra cursor.
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);

	// Mostrar textos en pantalla.
	cout << "Terminarías. Conocerías. Título. Analógico. \n";
	cout << "Muchas gracias mi muy distinguido amigo.";

	// Esperando pulsar Enter para salir.
	cin.get();
	return 0;
}
¿Alguna idea?

Saludos.
__________________
http://electronica-pic.blogspot.com....n-arduino.html Manuales de electrónica general, PIC y Arduino.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿como pasar parametros de VB.NET a DLL Delphi2010 win32? JXJ Varios 0 03-12-2011 20:31:04
lazarus win32+qt picap Lazarus, FreePascal, Kylix, etc. 4 06-07-2010 13:59:09
Delphi WIN32 o .NET delphijm Debates 4 21-03-2010 22:13:39
win32 error 38 Onti Firebird e Interbase 7 14-09-2007 17:59:56


La franja horaria es GMT +2. Ahora son las 11:24:48.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi