Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Pasar de C++ CLR a C++ Win32 (https://www.clubdelphi.com/foros/showthread.php?t=94734)

REHome 16-06-2020 02:55:18

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.


La franja horaria es GMT +2. Ahora son las 16:49:23.

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