Dialog w WinAPI

0

Siema.
Otóż nie dawno zacząłem się uczyć WinAPI i wszystko było okej dopóki nie zaczęły się dialogi.
main.cpp

#include <Windows.h>
#include "resource1.h"

using namespace std;

#define ID_Grupy 1
#define ID_Ustawienia 2

LPSTR NazwaKlasy = "Klasa Okienka";
MSG Komunikat;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	// WYPEŁNIANIE STRUKTURY
	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_SHIELD);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = NazwaKlasy;
	wc.hIconSm = LoadIcon(NULL, IDI_SHIELD);

	// REJESTROWANIE KLASY OKNA
	if (!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...",
			MB_ICONEXCLAMATION | MB_OK);
		return 1;
	}

	// TWORZENIE OKNA
	HWND okno = CreateWindowEx(WS_EX_CLIENTEDGE, NazwaKlasy, "Test", WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 540, 120, NULL, NULL, hInstance, NULL);

	if (okno == NULL)
	{
		MessageBox(NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION);
		return 1;
	}

// TYPOWY PRZYCISK
/*	HWND g_hPrzycisk;
	g_hPrzycisk = CreateWindowEx(0, "BUTTON", "Przycisk", WS_CHILD | WS_VISIBLE,
		5, 0, 150, 30, hwnd, NULL, hInstance, NULL);*/

	HWND hButton1 = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "Grupy", WS_CHILD | WS_VISIBLE |
			WS_BORDER, 5, 5, 150, 30, okno, (HMENU)ID_Grupy, hInstance, NULL),
		 hButton2 = CreateWindowEx(WS_EX_CLIENTEDGE, "BUTTON", "Ustawienia", WS_CHILD | WS_VISIBLE |
			WS_BORDER, 160, 5, 150, 30, okno, (HMENU)ID_Ustawienia, hInstance, NULL);

	ShowWindow(okno, nCmdShow); // Pokaż okienko...
	UpdateWindow(okno);

	// Pętla komunikatów
	while (GetMessage(&Komunikat, NULL, 0, 0))
	{
		TranslateMessage(&Komunikat);
		DispatchMessage(&Komunikat);
	}
	return Komunikat.wParam;
}

// OBSŁUGA ZDARZEŃ
LRESULT CALLBACK WndProc(HWND okno, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch (msg)
	{
	case WM_CLOSE:
		DestroyWindow(okno);
		break;

	case WM_DESTROY:
		PostQuitMessage(0);
		break;

	case WM_COMMAND:
		switch (wParam)
		{
		case ID_Grupy:
			MessageBox(okno, "Wcisnąłeś przycisk 1", "OK", MB_ICONINFORMATION);
			break;

		case ID_Ustawienia:
			//MessageBox(okno, "Wcisnąłeś przycisk 2", "OK", MB_ICONINFORMATION);

			// Tutaj wywołujemy nasz dialog
			int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(200), okno, DlgProc);
			if (ret == IDOK)
				MessageBox(okno, "Wybrałeś \'Fajnie\' w oknie dialogowym!", "Test", MB_ICONINFORMATION);
			break;

		default:
			MessageBox(okno, "Zrobiłeś coś innego ;-)", "Error", MB_ICONINFORMATION);
			break;
		}
		break;

	default:
		return DefWindowProc(okno, 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;
					   }
	}
		break;

	default: return FALSE;
	}

	return TRUE;
}

resource1.h

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
//
#define IDD_DIALOG1                     200
#define IDC_LIST1                       1002
#define IDC_EDIT1                       1003
#define IDC_EDIT2                       1004
#define IDC_EDIT3                       1005

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        102
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1004
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

Błąd:

1>error C2361: initialization of 'ret' is skipped by 'default' label
1>          main.cpp(97) : see declaration of 'ret'
2

to co masz pod ID_Ustawienia: weź w klamry.

0

O i działa. Dziękuję :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1