2010-11-17 11 views
11

Mein Ziel ist es, einfach eine Popup-Box zu verwenden, um den Benutzer nach einer Eingabe zu fragen. Ich habe um ziemlich viel gesucht und so ziemlich alle Ergebnisse sagen, dass eine messageBox Schaffung wirklich einfach:Einen Benutzer mit einem Eingabefeld auffordern? [C++]

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

Aber das ein Pop-up zu schaffen, die Eingabe erfolgt ist mehr beteiligt, und es gibt keine gerade vorwärts Weg, es zu tun. Alle Ergebnisse, die ich bei Google finden konnte, waren irgendwo zwischen 2001 und 2005 datiert. Ich denke, ich frage mich, ob es in den letzten Jahren eine einfachere Lösung gegeben hat.

Hoffentlich etwas schöne und geradlinig wie in Java:

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

Wenn das nicht der Fall ist, könnte ich eine kurze Erklärung, wie es zu tun?


Edit: ich nichts bekommen konnte zu arbeiten. :(Ich schrieb den Code, um die Arbeit in Java zu tun, und schrieb dann eine Zeile C++ - Code, um die .jar-Datei aufzurufen.: -/Da das Problem zeitsensitiv war, war es besser als nichts.

Antwort

6

Es gibt nichts li ke das für reines C++. Grundsätzlich können Sie nur erreichen, indem Sie einen API-Aufruf für das Betriebssystem verwenden oder eine GUI-Bibliothek wie Qt verwenden (was ich empfehle, weil es einfacher ist als native APIs aufzurufen und es ist auch plattformübergreifend)

Qt verwenden Sie können einen Eingang zeigen ziemlich die gleiche Art und Weise Dialog Sie es auf Java tun:

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 
} 

Sie können die Qt-Bibliothek hier herunterladen: qt.nokia.com/products/developer-tools/

+0

+1 für sie mit Qt zu tun. Sehr einfach und plattformübergreifend !!! – g19fanatic

+0

Ich habe das SDK und das VS2010 Add-In heruntergeladen; Kennen Sie den besten Weg, diese Funktionalität einem bestehenden Projekt hinzuzufügen? – Ryan

+1

@Ryan: gute Frage, gehört nicht wirklich in einen Kommentar. – MSalters

1

Ich muss zugeben, dass ich seit Jahren nicht wirklich viel in der Art von Eingabefeldern gemacht habe, aber im Grunde muss man aus C++ rausgehen, um irgendeine Art von graphischem Eingabefeld zu bekommen, es ist einfach kein Mechanismus in die Sprache eingebaut Ich weiß nicht mehr, ob es sich auch auf C++ bezieht, aber C nimmt nicht einmal an, dass Sie eine Konsole haben.Wie auch immer, Ihre beste Wette wäre etwas in der Art, wie Sie es bereits versucht haben: Win32 API , Qt, etc. Wenn Sie die Konsole verwenden können, zögern Sie nicht, einfach die Iostream-Bibliothek zu verwenden

0

ein Konsolenfenster zu verwenden ist besser geeignet, um den Modus der Kommunikation, wo ein Programm den Benutzer auffordert, fortfährt, den Benutzer erneut auffordert, und so weiter.

Und dafür können Sie die Standard-Bibliothek-Funktionen wie cin und cout verwenden.

+0

Normalerweise würde ich, aber ich arbeite von einer bestehenden Code-Basis, die dies nicht leicht erlaubt. – Ryan

3

Microsoft ist der Ansicht, dass Ihr Anwendungsfall für die Optimierung nicht ausreichend ist, wie bei MessageBox. Sie erwarten von Ihnen, dass Sie einen Dialog mit vielen Steuerelementen aufsetzen, möglicherweise mit einer komplexen Interaktion mit den Steuerelementen, und erst dann reagieren, wenn der Dialog vollständig ausgefüllt ist. Sie fragen nur nach der vereinfachten Version.

Der Ressourceneditor ist der einfachste Weg, um einen Dialog zu erstellen, aber das ist nicht in der kostenlosen Express-Version von Visual Studio enthalten. Sie würden das Dialogfeld mit einem Textsteuerelement für die Eingabeaufforderung und einem Bearbeitungssteuerelement für den Benutzer gestalten. Sie zeigen das Dialogfeld mit der Windows-Funktion DialogBox an und es kehrt zurück, wenn der Benutzer die Schaltfläche OK oder das X in der Ecke von drückt der Dialog. Microsoft hat einige Dokumentation dafür here.

Es gibt einige Plattformen, die versuchen, den Prozess zu vereinfachen, wie MFC, WTL, Qt und Wx, aber dies ist, wie Sie es mit der reinen Windows-API tun würden.

6

Wenn Sie Visual C++ Express verwenden, gibt es eine Reihe von kostenlosen Ressourceneditoren, die zum Erstellen von Dialogen verwendet werden können. ResEdit ist einer der besseren, die ich gefunden habe.

Sie müssen eine Dialogressource in einer RC-Datei erstellen, die Sie Ihrem Projekt hinzufügen.

Dann ist es ein sehr einfacher Fall des Aufrufs DialogBox - die das Dialogfeld aus Ihrer Ressource-Datei laden und auf dem Bildschirm platzieren wird. Die in DialogProc übergebenen werden mit einer Anzahl von Benachrichtigungen aufgerufen. In der Regel möchten Sie für alles FALSE zurückgeben, aber WM_INITDIALOG als eine Stelle behandeln, um das Bearbeitungssteuerelement mit Text zu initialisieren, und WM_COMMAND wird gesendet, wenn auf eine Schaltfläche geklickt wird.

0

versuchen Sie dies: 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; 
} 
Verwandte Themen