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'