[C++][WinAPI] Okienko dialogowe

Awatar użytkownika
kam_new93
Użytkownik
Użytkownik
Posty: 673
Rejestracja: 18 lip 2009, o 20:13
Płeć: Mężczyzna
Podziękował: 17 razy
Pomógł: 106 razy

[C++][WinAPI] Okienko dialogowe

Post autor: kam_new93 »

Mam problem odnosnie strowrzenia okienka dialogowego za pomoca kursu

tworze sobie okno glowne nastepnie poprzez uchwyty odnosze sie do niego okienkiem dialogowym i poprawnie kompiluje sie program tzn powstaje okno glowne i przycisk ale po jego nacisnieciu nie wyswietla sie drugie okienko co mialo sie wlasnie wyswietlic.
Probowalem zmienic zmienne typu MSG bo moze nie lapalo tego przycisku ale nic nie dalo .

Wrzucam kod do tego programu i prosze o pomoc bo nwm dlaczego po nacisnieciu przysku nie wyswietla mi okenka .

Kod: Zaznacz cały

#include <windows.h>
#include "dialog.h"




// Prototypy funkcji obs³uguj¹cych komunikaty.
// Sztuk dwie, jedna dla okna g³ównego, jedna dla dialogu ;-)

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

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument,
int nFunsterStil )
{

    //
    // Tworzenie okna  i wlasnie zrobilem ponizej :)
    //


// WYPEŁNIANIE STRUKTURY
     LPSTR NazwaKlasy = "Klasa Okienka";
      MSG msg;
    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, "Okieko nie powstanie", "Blad",
        MB_ICONEXCLAMATION | MB_OK );
        return 1;
    }

    // TWORZENIE OKNA
    HWND hwnd;

    hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, NazwaKlasy, "okienko", WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL );

    if( hwnd == NULL )
    {
        MessageBox( NULL, "Blad rejestracji", "Blad rejestracji", MB_ICONEXCLAMATION );
        return 1;
    }




    // Tworzymy jakiœ przycisk do wywo³ania dialogu

    HWND hPrzyc = CreateWindowEx( 0, "BUTTON", "Dialog", WS_CHILD | WS_VISIBLE,
    5, 5, 50, 25, hwnd, NULL, hInstance, NULL );

    // Pokazujemy g³ówne okno
    ShowWindow( hwnd, nFunsterStil );


    // No i standardowo - pêtelka
    while( GetMessage( & msg, NULL, 0, 0 ) )
    {
        TranslateMessage( & msg );
        DispatchMessage( & msg );
    }

    return msg.wParam;
}

// Procedura okna
LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_COMMAND:
        {
            // Tutaj wywo³ujemy nasz dialog
            int ret = DialogBox( GetModuleHandle( NULL ), MAKEINTRESOURCE( 200 ), hwnd, DlgProc );
            if( ret == IDOK )
                 MessageBox( hwnd, "Wybra³eœ 'Fajnie' w oknie dialogowym!", "Test", MB_ICONINFORMATION );
            else if( ret == IDCANCEL )
                 MessageBox( hwnd, "Wybra³eœ 'Anuluj' w oknie dialogowym!", "Test", MB_ICONINFORMATION );

        }
        break;

    case WM_DESTROY:
        PostQuitMessage( 0 );
        break;

        default:
        return DefWindowProc( hwnd, msg, wParam, lParam );
    }

    return 0;
}

// Procedura dialogowa
BOOL CALLBACK DlgProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
    switch( msg )
    {
    case WM_COMMAND:
        {
            // reakcja na przyciski
            switch( LOWORD( wParam ) )
            {
            case IDOK: EndDialog( hwnd, IDOK ); break;
            case IDCANCEL: EndDialog( hwnd, IDCANCEL ); break;
            }
        }
        break;

        default: return FALSE;
    }

    return TRUE;
}





do tego plik dialog.h zawiera :

Kod: Zaznacz cały

#define IDD_MOJDIALOG 200
#define IDC_LABEL 201
i jeszcze plik .rc

Kod: Zaznacz cały

#include <windows.h>
#include "dialog.h"

IDD_MOJDIALOG DIALOG DISCARDABLE 20, 20, 200, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Mój własny dialog"
FONT 8, "MS Sans Serif"
{
    DEFPUSHBUTTON "&Fajnie!", IDOK, 124, 18, 50, 14
    PUSHBUTTON "&Anuluj", IDCANCEL, 124, 35, 50, 14
    LTEXT "To jest okno dialogowe", IDC_LABEL, 16, 18, 80, 33
}



p.s. domyslam sie ze cos wlasnie z tymi plikami .rc i dialog.h tez moglem zepsuc ewentualnie cos z tymi procedurami kocowymi




Z gory dzieki za jakakolwiek pomoc
Ostatnio zmieniony 6 sie 2013, o 08:16 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Gouranga
Użytkownik
Użytkownik
Posty: 1594
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 247 razy

[C++][WinAPI] Okienko dialogowe

Post autor: Gouranga »

WinAPI? a nie myślałeś nad pisaniem w czymś, co ma ręce i nogi? bo czyste WinAPI to tragedia
Awatar użytkownika
kam_new93
Użytkownik
Użytkownik
Posty: 673
Rejestracja: 18 lip 2009, o 20:13
Płeć: Mężczyzna
Podziękował: 17 razy
Pomógł: 106 razy

[C++][WinAPI] Okienko dialogowe

Post autor: kam_new93 »

jestem otwarty na prpozycje . Jesli znasz cos podobnego do win api to chetnie sie przesiade . Chodzi mi wlasnie o cos gdzie moglbym pisac programy okienkowe(okienka) tak jak w win api i moglo by byc troszke łatwiejsze bo dla win api trzeba troche posiedziec
Gouranga
Użytkownik
Użytkownik
Posty: 1594
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 247 razy

[C++][WinAPI] Okienko dialogowe

Post autor: Gouranga »

do c/c++ jest bodajże coś co się nazywa Qt, to cały framework, środowisko + kompilator + biblioteki...
w Qt można też pisać w Javie chociaż równie dobrze można używać czystej javy z biblioteką jswing czy cośtakiego
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++][WinAPI] Okienko dialogowe

Post autor: Afish »

kam_new93,
U mnie ten kod działa (w sensie wyświetla się dialog i po kliknięciu na przycisk pojawia się poprawny MessageBox). Upewnij się w takim razie, że dobrze dodałeś plik .rc do projektu - najprawdopodobniej kompilator/linker go nie widzi. W jakim IDE programujesz?
Panda
Użytkownik
Użytkownik
Posty: 342
Rejestracja: 31 maja 2008, o 19:44
Płeć: Mężczyzna
Lokalizacja: Radom
Podziękował: 26 razy
Pomógł: 28 razy

[C++][WinAPI] Okienko dialogowe

Post autor: Panda »

Polecam google i lepsze miejsca w internecie (fora, stackoverflow) do takich pytań, więcej odpowiednich osób zagląda. Jeśli chcesz się uczyć programować, to się przyzwyczaj do tych miejsc

Jeśli nie zależy ci szczególnie na nauce WinApi tylko chcesz napisać program okienkowy, to lepiej skorzystać z czegoś wyższego poziomu. Do C++ nie wiem co się nadaje na Windowsa oprócz GTK/Qt.

Natomiast oprócz C++ warto pomyśleć o C# lub Javie - oba języki są nowsze, ściśle obiektowe i mają w bibliotekach dobre narzędzia do wysokopoziomowego programowania okienek.

Zadaj sobie też pytanie, czy zależy ci na przenośności kodu na Linuxa.
Awatar użytkownika
kam_new93
Użytkownik
Użytkownik
Posty: 673
Rejestracja: 18 lip 2009, o 20:13
Płeć: Mężczyzna
Podziękował: 17 razy
Pomógł: 106 razy

[C++][WinAPI] Okienko dialogowe

Post autor: kam_new93 »

dziękuje bardzo macie po plusie szczegolnie
Afish
źle dodałem .rc plik już działa dzięki jeszcze raz
ODPOWIEDZ