2010-11-17 8 views
11

Moim celem jest po prostu użyć okno pop-up, aby zapytać użytkownika do wejścia. Rozglądałem się wokół trochę i prawie wszystkie wyniki powiedzieć, że stworzenie MessageBox jest bardzo proste:Pytając użytkownika o pole wprowadzania? [C++]

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

jednak, że tworzenie pop-up, które ma wejście jest bardziej zaangażowany i nie jest prosto do przodu, aby to zrobić. Wszystkie wyniki udało mi się znaleźć w Google były przestarzałe gdzieś od roku 2001 do 2005. Chyba jestem tutaj z pytaniem, czy niektóre bardziej proste rozwiązanie do przodu doszło w ostatnich latach.

Mam nadzieję, że coś ładne i proste jak w Javie:

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

Jeśli tak nie jest, to mogę dostać krótkie wyjaśnienie, jak to zrobić?


Edit: nie mogłem dostać coś do pracy. :(W końcu napisałem kod, aby wykonać pracę w Javie, a następnie napisałem jedną linię kodu C++, aby wywołać plik .jar.: -/Ponieważ problem był wrażliwy na czas, to było lepsze niż nic ..

Odpowiedz

6

Nie ma nic li ke dla czystego C++. Zasadniczo to, co próbujesz zrobić, można osiągnąć tylko za pomocą wywołania API do systemu operacyjnego lub przy użyciu biblioteki GUI, takiej jak Qt (co zalecam, ponieważ jest to łatwiejsze niż wywoływanie natywnych interfejsów API i jest to również platforma wieloplatformowa)

Korzystanie z Qt można pokazać wejście dialogowe dość dużo w ten sam sposób to zrobić na Java:

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 
} 

można pobrać bibliotekę Qt tutaj: qt.nokia.com/products/developer-tools/

+0

+1, by to zrobić z Qt. Bardzo łatwa i też platforma krzyżowa !!! – g19fanatic

+0

Pobrałem SDK i dodatek VS2010; czy znasz najlepszy sposób na dodanie tej funkcjonalności do istniejącego projektu? – Ryan

+1

@Ryan: dobre pytanie, tak naprawdę nie należy do komentarza. – MSalters

1

muszę przyznać, że ja naprawdę nie zrobił wiele w drodze polach wejściowych w każdym wieku, ale zasadniczo trzeba wyjść na zewnątrz C++ w celu uzyskania jakiejkolwiek graficznym polu tekstowym. po prostu nie ma mechanizm wbudowany w język na który . rodzaju rzeczy w celu przenośności nie pamiętam w przypadku zastosowania do C++, jak również, ale C nie nawet że masz konsolę Zresztą, najlepiej byłoby coś wzdłuż linii, które zostały już stara. Win32 API , Qt itp. Jeśli jednak możesz skorzystać z konsoli, możesz po prostu użyć biblioteki iostream, aby wykonać zadanie.

0

Korzystanie okno konsoli lepiej nadaje się do trybu komunikacji, w której program monituje użytkownika, kontynuuje, ponownie prosi użytkownika i tak dalej.

I do tego można użyć standardowych bibliotek biblioteki, takich jak cin i cout.

+0

Zwykle chciałbym, ale pracuję nad istniejącą bazą kodu, która nie pozwala na to łatwo. – Ryan

3

Microsoft nie rozważyć przypadek użycia na tyle powszechne, aby zoptymalizować, jak z MessageBox. Oczekują oni, aby położyć się okno dialogowe z wieloma kontrolami na nim, być może z jakiejś złożonej interakcji z kontroli, a tylko reagować, gdy okno dialogowe jest całkowicie wypełnione. Co pytasz o to po prostu uproszczona wersja tego.

Edytor zasobów to najprostszy sposób utworzenia okna dialogowego, ale nie ma go w bezpłatnej wersji Express programu Visual Studio. Projektowałbyś okno dialogowe z tekstową kontrolką dla podpowiedzi i formantem edycji do wypełnienia przez użytkownika. Przedstawiasz okno dialogowe z funkcją Windows DialogBox i powraca, gdy użytkownik kliknie przycisk OK lub X w rogu w oknie dialogowym. Microsoft ma dla niej trochę dokumentacji: here.

Dostępnych jest kilka platform, które próbują ułatwić proces, takich jak MFC, WTL, Qt i wx, ale tak można zrobić z czystym interfejsem API systemu Windows.

6

Jeśli korzystasz z programu Visual C++ Express, dostępnych jest wiele bezpłatnych edytorów zasobów, za pomocą których można tworzyć okna dialogowe. ResEdit jest jednym z lepszych, jakie znalazłem.

Musisz utworzyć zasób dialogowy w pliku .RC dodanym do projektu.

Następnie, jest to bardzo prosty przypadek wywołania DialogBox - który załaduje okno dialogowe z pliku zasobów i umieści go na ekranie. Przekazywane w DialogProc będą wywoływane z pewną liczbą powiadomień. Zazwyczaj powinieneś zwrócić FALSE dla wszystkiego, ale potraktuj WM_INITDIALOG jako miejsce inicjalizacji formantu edycji z tekstem, a WM_COMMAND zostanie wysłane po kliknięciu przycisku.

0

spróbuj tego: 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; 
} 
Powiązane problemy