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

[WinAPI] Zamykanie określonego okienka

Ostatnio zmodyfikowano 2013-12-01 17:16
Autor Wiadomość
pawellek1995
Temat założony przez niniejszego użytkownika
» 2013-11-30 18:16:05
Przykro mi ale twoja podpowiedź nie działa, dlaczego mam zestawić ze sobą dwa okna ? Bym musiał sprawdzić które okno wysyła komunikat WM_CLOSE...
P-97937
pekfos
» 2013-11-30 18:24:12
To, że podpowiadanie nie działa, to już zdążyłem zauważyć ;) Dlatego dałem tego gotowca. Wystarczy go wstawić w odpowiednie miejsce (zakładając, że nie zmieniłeś nazw zmiennych). Jak już napisałem, pierwszy argument procedury okna to uchwyt okna, którego dotyczy komunikat (tu WM_DESTROY), więc pewnie dlatego trzeba porównać uchwyty, żeby określić, które okno jest niszczone i, w zależności od tego, albo zakończyć program, albo nic nie robić (i tym samym pozwolić, by zostało zniszczone tylko jedno okno)
P-97938
pawellek1995
Temat założony przez niniejszego użytkownika
» 2013-11-30 20:19:59
Nie czaje twojego sposobu. W które miejsce mam to wstawić?
P-97946
pekfos
» 2013-11-30 20:29:35
C/C++
if( hwnd == okienka[ 0 ] )
     PostQuitMessage( 0 );
P-97947
pawellek1995
Temat założony przez niniejszego użytkownika
» 2013-11-30 20:35:08
Nom nie działa, zamyka oba okna. ;/ wklejam to w case WM_DESTROY:
P-97948
pekfos
» 2013-11-30 20:36:01
Podaj kod.
P-97949
pawellek1995
Temat założony przez niniejszego użytkownika
» 2013-11-30 20:37:39
Mój sposób działa sam nie wiem jakim cudem ;/ Obsługa zdarzeń na samym dole.
C/C++
#include <windows.h>
#include<iostream>
#include<math.h>
#include<string>
#include <commctrl.h>
using namespace std;
LPSTR NazwaKlasy = "Klasa Okienka";
HINSTANCE * hInst;
MSG Komunikat;
SCROLLINFO si;
INT x, y, dx, dy;
char zm[ 500 ];
char zm1[ 500 ];
char zm2[ 500 ];
HWND okienka[ 1000 ];
HWND kontrolka[ 1000 ];
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

struct typek
{
    string nazwa;
    double ludnosc;
    double podatki;
    double technologial;
    double technologiam;
    double technologiae;
    double infrastruktura;
    double famunicji;
    double kzlota;
    double rafinerie;
    double fabryki;
    double wierzowce;
    double lprowincji;
} panstwo[ 100 ];

struct typeczek
{
    double ludnosc;
    double podatki;
    double wzrost_ludnosci;
    double rafinerie;
    double kzlota;
    double famunicji;
    double fabryki;
    double wierzowce;
    char nazwa;
    HWND prowincja;
    char posiadanie;
    char kontrola;
   
} prow[ 100 ][ 100 ];

HWND wsp[ 100 ][ 100 ];

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
   
    WNDCLASSEX wc;
    hInst =& hInstance;
    wc.cbSize = sizeof( WNDCLASSEX );
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = * hInst;
    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 | WS_VSCROLL | WS_HSCROLL,
    CW_USEDEFAULT, CW_USEDEFAULT, 1300, 700, NULL, NULL, * hInst, 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...
   
   
   
   
    for( x = 0; x <= 10; x++ )
    {
        sprintf( zm, "%i", x );
        wsp[ x ][ y ] = CreateWindowEx( 0, "STATIC", zm, WS_CHILD | WS_VISIBLE,
        1 +( x * 100 ), 1, 30, 20, hwnd, NULL, * hInst, NULL );
    }
    x = 0;
    for( y = 0; y <= 10; y++ )
    {
        sprintf( zm, "%i", y );
        wsp[ x ][ y ] = CreateWindowEx( 0, "STATIC", zm, WS_CHILD | WS_VISIBLE,
        - 100, 100 +( y * 100 ), 30, 20, hwnd, NULL, * hInst, NULL );
    }
   
    for( x = 0; x <= 10; x++ )
    {
        for( y = 0; y <= 10; y++ )
        {
            sprintf( zm, "%i", x );
            sprintf( zm1, "%i", y );
            strcat( zm, ":" );
            strcat( zm, zm1 );
            prow[ x ][ y ].prowincja = CreateWindowEx( 0, "BUTTON", zm, WS_CHILD | WS_VISIBLE,
            1 +( x * 100 ), 100 +( y * 100 ), 90, 90, hwnd, NULL, * hInst, NULL );
        }
    }
   
   
    UpdateWindow( hwnd );
   
    // 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_CREATE:
       
        break;
    case WM_COMMAND:
       
        for( x = 0; x <= 10; x++ )
        {
            for( y = 0; y <= 10; y++ )
            {
               
                if(( HWND ) lParam == prow[ x ][ y ].prowincja )
                {
                    memset( zm2, 0, sizeof( zm2 ) );
                    sprintf( zm, "%i", x );
                    sprintf( zm1, "%i", y );
                    strcat( zm2, "wsp: " );
                    strcat( zm2, zm );
                    strcat( zm2, ":" );
                    strcat( zm2, zm1 );
                    /*MessageBox( hwnd, zm2, "Opcje Wyboru", MB_ICONINFORMATION);*/
                    SetFocus( hwnd );
                    okienka[ 0 ] = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "Opcje", WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, * hInst, NULL );
                   
                    CreateWindowEx( 0, "STATIC", "LALA", WS_CHILD | WS_VISIBLE,
                    100, 100, 30, 20, okienka[ 0 ], NULL, * hInst, NULL );
                    kontrolka[ 0 ] = CreateWindowEx( 0, "BUTTON", "X", WS_CHILD | WS_VISIBLE,
                    10, 10, 30, 20, okienka[ 0 ], NULL, * hInst, NULL );
                    ShowWindow( okienka[ 0 ], SW_SHOW );
                }
               
            }
        }
       
        break;
       
    case WM_KEYDOWN:
        switch(( int ) wParam )
        {
        case VK_RIGHT:
            if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
            {
                ScrollWindowEx( hwnd, - 100, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            else
            {
                ScrollWindowEx( hwnd, - 10, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            break;
        case VK_LEFT:
            if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
            {
                ScrollWindowEx( hwnd, 100, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            else
            {
                ScrollWindowEx( hwnd, 10, 0,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
           
           
            break;
           
        case VK_DOWN:
            if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
            {
                ScrollWindowEx( hwnd, 0, - 100,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            else
            {
                ScrollWindowEx( hwnd, 0, - 10,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            break;
        case VK_UP:
            if( HIBYTE( GetKeyState( VK_CONTROL ) ) )
            {
                ScrollWindowEx( hwnd, 0, 100,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            else
            {
                ScrollWindowEx( hwnd, 0, 10,( CONST RECT * ) NULL,( CONST RECT * ) NULL,( HRGN ) NULL,( LPRECT ) NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
                UpdateWindow( hwnd );
               
            }
            break;
        }
        //InvalidateRect( hwnd, NULL, TRUE );
        break;
       
    case WM_CLOSE:
        DestroyWindow( hwnd );
        break;
       
    case WM_DESTROY:
        if(( HWND ) lParam == SetFocus( okienka[ 0 ] ) )
             PostQuitMessage( 0 );
       
        break;
       
        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }
   
    return 0;
}
P-97950
pekfos
» 2013-11-30 20:41:04
No i gdzie to wstawiłeś..?
P-97951
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona