Witam, otóż mam problem. Jako, że w mojej szkole pojawiła się tablica interaktywna, zaproponowałem nauczycielowi napisanie programu do odpowiedzi na taką właśnie tablice. Cała ta tablica polega na tym, że projektor wyświetla obraz z komputera na tablica która przez czujniki ruchy na niej, wiec to ma być normalny program na komputer.
Jako, że programuje bardziej sieciowo a c++ zajmuję się od niedawna więc pierwszy aplikacja powstała na przeglądarkę w PHP i HTML'u (+ css oczywiście). Trochę to lipne gdyż potrzebne jest podłączenie do neta i ciągłe wczytywanie strony jest to trochę kłopotliwe. A postawić serwera na swoim kompie się nauczyciel nie zgodził. Zatem poczytałem trochę o C++ i napisałem konsolową wersje tegoż programu, co jednak nie daje mi w pełni szczęścia bo trzeba klikać w klawiaturę. Zacząłem więc pisać to w apce wina i mam trochę problem.
KOD C++ konsolowej wersji.
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
int main()
{
int ile;
string temat[3];
cout << "Podaj temat 1:";
cin >> temat[ 0 ];
cout << "Podaj temat 2:";
cin >> temat[ 1 ];
cout << "Podaj temat 3:";
cin >> temat[ 2 ];
cout<< "Twoje tematy to: " << endl << temat [ 0 ] << endl << temat [ 1 ] << endl << temat [ 2 ] << endl;
cout << "Minimalna ilosc pytan po ktorej chcesz zakonczyc odpowiedz ?" << endl;
cin >> ile;
int koniec = 0;
int i = 1;
double plusy = 0;
double minusy = 0;
string dodaj;
int t = -1;
string znak;
cout << "Wcisnij P - plus / M - minus" <<endl;
do
{
if (t==2)
{
t = -1;
}
t++;
cout << "Pytanie nr " << i++ << " z tematu " << temat[ t ];
dodaj = getch();
if (dodaj == "m" || dodaj == "M" || dodaj == "p" || dodaj == "P")
{
if (dodaj == "m" || dodaj == "M" )
{
minusy++;
cout << " -";
}
if (dodaj == "p" || dodaj == "P")
{
plusy++;
cout << " +";
}
cout << endl;
}
else
{
cout << "Wybrales zly przycisk wybierz ponownie"<< endl;
t--;
i--;
}
if (i > ile)
{
cout << " KONIEC ODPOWIEDZI. Chcesz zakonczyc?- T Zadac dodatkowe pytanie - N" << endl;
znak = getch();
if (znak == "t" || znak == "T" || znak == "n" || znak == "N")
{
if(znak == "t" || znak == "T")
{
koniec = 1;
}
if(znak == "n" || znak == "N" )
{
koniec = 0;
}
}
else
{
cout << "Wybrales zly przycisk wybierz ponownie"<< endl << "Zakonczyc ? T/N, jesli znowu pomylisz odpowiedz zostanie zakonczona"<< endl;
znak = getch();
if (znak == "t" || znak == "T" || znak == "n" || znak == "N")
{
if(znak == "t" || znak == "T")
{
koniec = 1;
}
if(znak == "n" || znak == "N" )
{
koniec = 0;
}
}
else
{
koniec = 1;
}
}
}
} while( koniec == 0 );
double M;
cout << "Wynik z mapy( np. -3 lub + 2)" << endl;
cin >> M;
double m = M;
if (m < 0) {m =0;}
cout << "Wynik koncowy odpowiedzi: " << plusy << " plusow i " << minusy << " minusow, mapa:" << M <<". Wynik procentowy to "<< 100*((plusy + m)/(plusy + minusy + abs(M)))<< "%";
}
Link do wersji PHP //geoask.cba.pl/
Kod WinAPI:
#include <windows.h>
#include <iostream>
#define ID_PRZYCISK1 501
#define ID_PRZYCISK2 502
using namespace std;
LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow, string )
{
b temat1;
cin >> temat1;
char* temat2;
cin >> temat2;
char* temat3;
cin >> temat3;
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
// WYPEŁNIANIE STRUKTURY
WNDCLASSEX wc;
wc.cbSize = sizeof( WNDCLASSEX );
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground =( HBRUSH )( COLOR_WINDOW + 1 );
wc.lpszMenuName = NULL;
wc.lpszClassName = NazwaKlasy;
wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION );
// REJESTROWANIE KLASY OKNA
if( !RegisterClassEx( & wc ) )
{
MessageBox( NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
MB_ICONEXCLAMATION | MB_OK );
return 1;
}
// TWORZENIE OKNA
HWND hwnd;
hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 500 , 500, NULL, NULL, hInstance, NULL );
if( hwnd == NULL )
{
MessageBox( NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION );
return 1;
}
ShowWindow( hwnd, nCmdShow ); // Pokaż okienko...
HWND hButton1 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "PLUS", WS_CHILD | WS_VISIBLE |
WS_BORDER,350, 100, 80, 80, hwnd,( HMENU ) ID_PRZYCISK1, hInstance, NULL ),
hButton2 = CreateWindowEx( WS_EX_CLIENTEDGE, "BUTTON", "MINUS", WS_CHILD | WS_VISIBLE |
WS_BORDER, 350, 185, 80, 80, hwnd,( HMENU ) ID_PRZYCISK2, hInstance, NULL );
HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 5, 5, 300, 500, hwnd, NULL, hInstance, NULL );
SetWindowText(hText, temat1 );
SetWindowText(hText, temat2 );
SetWindowText(hText, temat3 );
// Pętla komunikatów
while( GetMessage( & Komunikat, NULL, 0, 0 ) )
{
TranslateMessage( & Komunikat );
DispatchMessage( & Komunikat );
}
return Komunikat.wParam;
}
// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_CLOSE:
DestroyWindow( hwnd );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
case WM_COMMAND:
switch( wParam )
{
case ID_PRZYCISK1:
HWND hText;
cout << "+";
break;
case ID_PRZYCISK2:
cout<< "-";
SetWindowText(hText, "Napis" );
break;
}
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
break;
}
return 0;
}
Może trochę to się bugować bo dawno w tym nie grzebałem i nie bardzo mam inne wersje na tym skończyłem. Tak czy siak chcę aby po wpisaniu w konsolę tematów do pytania otwierało się okno wina z przyciskami + i - a następnie wyświetlało tematy do odpowiedzi w polu tekstowym tak jak było to na konsolówce. I na koniec wynik.
Jakieś sugestie, jak to zrobić ?
Pozdrawiam, Roszpun.