Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] Pola tekstowe

Ostatnio zmodyfikowano 2011-10-19 12:48
Autor Wiadomość
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:
C/C++
HWND hText = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 100, 20, hwnd, NULL, hThisInstance, NULL ); //powiedzmy że zmienna będzie nazywa się a
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 ); // zmienna b
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:
C/C++
#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;
}
P-41877
SeaMonster131
» 2011-10-09 15:38:08
» KursyKurs WinAPI, C++ kurs Może Ci się przydać.
P-41879
ziombel3
Temat założony przez niniejszego użytkownika
» 2011-10-12 14:58:15
Tylko że ja patrzyłem kurs z kontrolkami. Tam niczego takiego nie ma. Jest tylko jak pobrać tekst z pola tekstowego i przypisać go jakiejś zmiennej. A ja chce aby dało się wpisywać tylko liczby i mam problem jeszcze z innymi rzeczami które opisałem wyżej.
P-41979
pekfos
» 2011-10-12 15:11:11
Po pierwsze: WinAPI
po drugie: poszukaj w MSDN. tego typu feathure'y nie są zwykle opisywane w kursach wprowadzających do biblioteki.
P-41980
ziombel3
Temat założony przez niniejszego użytkownika
Okno dialogowe
» 2011-10-16 11:51:03
Jak wstawić pole tekstowe do okna dialogowego?
P-42171
malan
» 2011-10-16 20:18:26
P-42221
ziombel3
Temat założony przez niniejszego użytkownika
» 2011-10-17 20:09:39
Ok. Mam jeszcze jeden problem. Jak skonwertować tekst na liczbę? I jak sprawdzić czy taka liczba jest rzeczywista? Wybaczcie ale uczę się dopiero w Liceum. Żeby pobrać i skonwertować tekst na liczbę trzeba stworzyć strukturę tak jak w 8 lekcji o oknach dialogowych?
P-42261
pekfos
» 2011-10-17 20:26:28
jak masz ten tekst zapisany? LPCSTR, LPSTR, std::string? konwersja nie ma już nic wspólnego z WinAPI tylko biblioteką standardową C(++). (lub własną implementacją konwersji)
P-42264
« 1 » 2
  Strona 1 z 2 Następna strona