ziombel3 Temat założony przez niniejszego użytkownika |
[WinAPI] Pola tekstowe » 2011-10-09 14:40:44 Chce zrobić program matematyczny który oblicza różne rzeczy. Jak zrobić pole tekstowe które przyjmuje tylko liczby rzeczywiste dodatnie większe od zera(np. 5; 21; 3,24;). Chciałbym aby wpisane przez użytkownika dane były przypisywane jakiejś zmiennej(typu unsigned short lub unsigned int) na której były by wykonywane jakieś operacje matematyczne(po wciśnięciu przycisku, nie od razu po podaniu)). Chciałbym aby po wciśnięciu przycisku wyświetlał się wynik(np w formie komunikatu gdzie byłby jakiś tekst i podany wynik). Jeśli znacie inne wydajniejsze sposoby pobierania danych od użytkownika to napiszcie o tym. Jak ktoś napisze program to niech mi wszystko szczegółowo wyjaśni. Oto przykłady pól tekstowych: HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 100, 20, hwnd, NULL, hThisInstance, NULL ); SetWindowText( hText, "Podaj 1 bok" ); HWND hText2 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 200, 50, 100, 20, hwnd, NULL, hThisInstance, NULL ); SetWindowText( hText2, "Podaj 2 bok" ); Oto przykład przycisku: g_oblicz_dlugosc_przeciwprostokatnej = CreateWindowEx( 0, "BUTTON", "Oblicz długość przeciwprostokątnej", WS_CHILD | WS_VISIBLE, 100, 100, 250, 30, hwnd, NULL, hThisInstance, NULL ); Oto przykład komunikatu: Z twierdzenia Pitagorasa wiemy że suma kwadratów dwóch boków przyprostokątnych trójkąta prostokątnego wynosi tyle samo, co kwadrat przeciwprostokątnej. Dzięki temu twierdzeniu, obliczamy długość przeciwprostokątnej która wynosi: (tu jest wynik działania, powiedzmy że wynikiem jest zmienna c) A obliczenia to:(wszystko oczywiście podniesione do kwadratu)c=a+b. Obliczenia najlepiej żeby były w funkcji. Tutaj podaje kod całego programu który wymaga właśnie edycji: #include <windows.h>
LRESULT CALLBACK WindowProcedure( HWND, UINT, WPARAM, LPARAM );
char szClassName[] = "WindowsApp"; HWND g_oblicz_dlugosc_przeciwprostokatnej;
int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil )
{ HWND hwnd; MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; if( !RegisterClassEx( & wincl ) ) return 0; hwnd = CreateWindowEx( 0, szClassName, "Windows App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, HWND_DESKTOP, NULL, hThisInstance, NULL ); ShowWindow( hwnd, nFunsterStil ); HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 100, 20, hwnd, NULL, hThisInstance, NULL ); SetWindowText( hText, "Podaj 1 bok" ); HWND hText2 = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 200, 50, 100, 20, hwnd, NULL, hThisInstance, NULL ); SetWindowText( hText2, "Podaj 2 bok" ); HWND hStatic = CreateWindowEx( 0, "STATIC", NULL, WS_CHILD | WS_VISIBLE | SS_LEFT, 50, 25, 150, 20, hwnd, NULL, hThisInstance, NULL ); SetWindowText( hStatic, "Napis" ); g_oblicz_dlugosc_przeciwprostokatnej = CreateWindowEx( 0, "BUTTON", "Oblicz długość przeciwprostokątnej", WS_CHILD | WS_VISIBLE, 100, 100, 250, 30, hwnd, NULL, hThisInstance, NULL ); while( GetMessage( & messages, NULL, 0, 0 ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_DESTROY: PostQuitMessage( 0 ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; } |