Forum MOJA PASJA - PROGRAMOWANIE Strona Główna
http://www.programuj.com
  WikiWiki  FAQFAQ    SzukajSzukaj    UżytkownicyUżytkownicy    GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 




Problem z zamykaniem okien


 
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> WinAPI
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
bartek4833
10100111001


Dołączył: 26 Kwi 2008
Posty: 184

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Witamm

Mam problem, ogolnie program ma polegac na tym ze lewym przyciskiem myszy otwieraja sie okna (max 4) a lewy ma zamykac wszystkie inne okna porgramu poza kliknietym i .. pierwsze wywolanie wszystkich okien i zamkniecie pozostalych dziala ok ale gdy chce na tym oknie co zostal stworzyc pare okien dodatkowych i zamknac 4 pozostale, pierwsze i klikniete zostaja, w nastepnych probach zostaja 3.

Podam kod programu i prosze o dobra rade Smile

c++:
// gr3.lab1.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include "gr3.lab1.h"
#include <windows.h>

HWND hwnd[5];
static TCHAR szAppName[] = TEXT( "HelloWin" );
HINSTANCE hInst;
INT index = 0;
int temp = 0;

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

void TworzOkno()
{
        hwnd[++index] = CreateWindow( szAppName, TEXT( "The hello program" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL );

        ShowWindow( hwnd[index], SW_SHOW );
        UpdateWindow( hwnd[index] );
}

bool RejestrujKlase()
{
        WNDCLASS wndclass;

        wndclass.style         = CS_HREDRAW | CS_VREDRAW;                                                                                                      
        wndclass.lpfnWndProc   = WndProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = GetModuleHandle( NULL );
        wndclass.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
        wndclass.hCursor       = LoadCursor( NULL, IDC_ARROW );
        wndclass.hbrBackground = ( HBRUSH ) GetStockObject( WHITE_BRUSH );
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = szAppName;

        if( !RegisterClass( &wndclass ) ) return 0;
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
        MSG msg;

        if( !RejestrujKlase() ) return 0;

        hwnd[0] = CreateWindow( szAppName, TEXT( "The hello program" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance,     NULL );     

        ShowWindow( hwnd[0], iCmdShow );
        UpdateWindow( hwnd[0] );

        while( GetMessage( &msg, NULL, 0, 0 ) )
        {
                TranslateMessage( &msg );
                DispatchMessage( &msg )
        }

        return msg.wParam;
}

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
        static int hwnd_cout;
        HWND p;

        switch( message )
        {
                case WM_CREATE:
                        ++hwnd_cout;
                        break;

                case WM_LBUTTONDOWN:
                        temp = hwnd_cout;
                        if( temp < 5 ) TworzOkno();
                        else MessageBox( hWnd, TEXT( "Juz otworzyles 4 okna." ), szAppName, MB_OK | MB_ICONERROR );
                        break;

                case WM_RBUTTONDOWN:
                        temp = hwnd_cout;
                        for( unsigned int i = 0; i < temp; ++i )
                        {
                                if( hwnd[i] != hWnd )
                                {
                                        DestroyWindow( hwnd[i] );
                                        --index;
                                }
                        }
                        break;

                case WM_DESTROY:
                        --hwnd_cout;
                        if( hwnd_cout == 0 )
                        {
                                MessageBox( HWND_DESKTOP, TEXT( "To juz koniec programu .." ), szAppName, MB_OK );
                                PostQuitMessage( 0 );
                                return 0;
                        }

                default:
                        return DefWindowProc( hWnd, message, wParam, lParam );
        }

        return 0;
}


Jakbym cos bylo niejasne, pisac Smile
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Rekman
programista


Dołączył: 05 Paź 2010
Posty: 392

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Tablica uhwytów okien jest źle zarządzana.
Po likwidacj okien powinna ona wygądać tak:

hwnd[0] = hWnd;
hwnd_cout = 1;

Poniżej poprawiony feralny kod

c++:

case WM_RBUTTONDOWN:
                        temp = hwnd_cout;
                        for( unsigned int i = 0; i < temp; ++i )
                        {
                                if( hwnd[i] != hWnd )
                                {
                                        DestroyWindow( hwnd[i] );
                                        --index;
                                }
                        }
                        hwnd[0] = hWnd;   //dopisz
                        hwnd_cout = 1;    //dopisz
                        break;
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
bartek4833
10100111001


Dołączył: 26 Kwi 2008
Posty: 184

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Ahaaaaa rozumiem, i wszystko jasne Smile Dzieki wielkie za pomoc Smile
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> WinAPI Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


hosting sponsorowany przez hosted.pl
Powered by phpBB © 2001, 2002 phpBB Group