2010-11-17 26 views
11

Mi objetivo es simplemente usar un cuadro emergente para pedirle al usuario una entrada. He buscado todo un poco y casi todos los resultados decir que la creación de un messageBox es muy fácil:Preguntar a un usuario con un cuadro de entrada? [C++]

MessageBox (NULL, "Hello World" , "Hello", MB_OKCANCEL); 

Pero que la creación de un pop-up que toma la entrada es más complicado y no es una recta forma de hacerlo. Todos los resultados que pude encontrar en Google fueron fechados entre 2001 y 2005. Supongo que estoy aquí preguntando si ha surgido alguna solución más directa en los últimos años.

de esperar algo agradable y directo como en Java:

int number = JOptionPane.showInputDialog ("Enter an integer"); 

Si ese no es el caso, ¿podría obtener una breve explicación de cómo hacerlo?


Editar: que no podía hacer nada para trabajar. :(Terminé escribiendo el código para hacer el trabajo en Java, y luego escribí una línea de código C++ para llamar al archivo .jar.: -/Como el problema era sensible al tiempo, era mejor que nada.

Respuesta

6

No hay nada li ke eso para puro C++. Básicamente, lo que estás tratando de hacer solo se puede lograr utilizando una API para el sistema operativo o usando alguna biblioteca GUI como Qt (que recomiendo porque es más fácil que llamar a API nativas y también es multiplataforma)

Usando Qt puede mostrar un diálogo más o menos la misma forma en que lo hace en java de entrada:

bool ok; 
QString text = QInputDialog::getText(
     "MyApp 3000", "Enter your name:", QLineEdit::Normal, 
     QString::null, &ok, this); 
if (ok && !text.isEmpty()) { 
    // user entered something and pressed OK 
} else { 
    // user entered nothing or pressed Cancel 
} 

puede descargar la biblioteca Qt aquí: qt.nokia.com/products/developer-tools/

+0

+1 por hacerlo con Qt. Muy fácil y multiplataforma también !!! – g19fanatic

+0

He descargado el SDK y el complemento VS2010; ¿Conoces la mejor manera de agregar esta funcionalidad a un proyecto preexistente? – Ryan

+1

@Ryan: buena pregunta, realmente no pertenece a un comentario. – MSalters

1

Tengo que admitir que no he hecho mucho en cuanto a los cuadros de entrada en años, pero básicamente tienes que salir de C++ para obtener cualquier tipo de cuadro de entrada gráfica. Simplemente no hay ningún mecanismo incorporado en el lenguaje para ese tipo de cosas por razones de portabilidad. No recuerdo si se aplicó también a C++, pero C ni siquiera supone que tiene una consola. De todos modos, su mejor opción sería algo similar a lo que ya estaba intentando: Win32 API , Qt, etc. Sin embargo, si puede usar la consola, puede usar la biblioteca iostream para realizar el trabajo.

0

usando una ventana de la consola se adapta mejor a la modalidad de comunicación donde un programa solicita al usuario, continúa, vuelve a preguntar al usuario, y así sucesivamente.

Y para eso puede usar las instalaciones de la biblioteca estándar como cin y cout.

+0

Normalmente lo haría, pero estoy trabajando con una base de código preexistente que no permite eso fácilmente. – Ryan

3

Microsoft no considera que su caso de uso sea lo suficientemente común para optimizar, como con MessageBox. Esperan que establezca un diálogo con muchos controles, tal vez con alguna interacción compleja con los controles, y solo responden una vez que el diálogo esté completo. Lo que está pidiendo es simplemente la versión simplificada de eso.

El editor de recursos es la forma más fácil de crear un diálogo, pero eso no está incluido en la versión Express gratuita de Visual Studio. Diseñará el cuadro de diálogo con un control de texto para el aviso y un control de edición para que el usuario complete. Presenta el cuadro de diálogo con la función DialogBox de Windows y vuelve cuando el usuario pulsa el botón Aceptar o la X en la esquina de el diálogo. Microsoft tiene alguna documentación para él here.

Existen algunas plataformas disponibles que intentan facilitar el proceso, como MFC, WTL, Qt y wx, pero así es como lo harías con la API pura de Windows.

6

Si está utilizando Visual C++ Express, hay una serie de editores de recursos gratuitos que se pueden usar para crear cuadros de diálogo. ResEdit es uno de los mejores que he encontrado.

Necesita crear un recurso de diálogo en un archivo .RC que agregue a su proyecto.

Entonces, es un caso muy simple de llamar al DialogBox - que cargará el cuadro de diálogo de su archivo de recursos y lo colocará en la pantalla. Se enviará el pase en DialogProc con varias notificaciones. Normalmente, desea devolver FALSE para todo, pero maneje WM_INITDIALOG como un lugar para inicializar el control de edición con texto, y WM_COMMAND se enviará cuando se haga clic en un botón.

0

probar esto: InputBox in c++ vs2010

#include "stdafx.h" 
#using <system.windows.forms.dll> 
#using <Microsoft.VisualBasic.dll> 

using namespace System; 

int main(array<System::String ^> ^args) 
{ 
    Microsoft::VisualBasic::Interaction::InputBox(L"Hello", L"Title", L"DefResp", 500, 500); 
    return 0; 
} 
Cuestiones relacionadas