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
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