Szkielet programu w trybie okienkowym WinAPI.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <windows.h>

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

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                        LPSTR lpCmdLine, int nCmdShow )
{
  MSG  msg ;    
  WNDCLASS wc = {0};
  wc.lpszClassName = TEXT( "Nazwa" ); //Nazwa naszej aplikacji
  wc.hInstance     = hInstance ;
  wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); //Kolor tła - standardowy win
  wc.lpfnWndProc   = WndProc ; //Nazwa procedury obsługi zdarzeń
  wc.hCursor       = LoadCursor(0, IDC_ARROW); //Wygląd kursora aplikacji

  g_hinst = hInstance;
 
  RegisterClass(&wc);
  CreateWindow( wc.lpszClassName, TEXT("Nazwa"), //Tekst w nagłówku okna głównego
                WS_OVERLAPPEDWINDOW | WS_VISIBLE, //Flagi okna głównego
                150, 150, 400, 280, 0, 0, hInstance, 0);   //pozycja X, Y, szerokość i wysokość okna, a także wskaźnik na instancję aplikacji

  while( GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int) msg.wParam;
}

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
//Procedura obsługi zdarzeń - serce API
{
 static HWND Opt[12]; //Tablica kontrolek - ile kontrolek tyle elementów tu 12
   
  switch(msg)  
  {
        case WM_CREATE: //tworzenie wszystkich kontrolek
         //Lista tworzonych kontrolek, np:
      /* Opt[0]=CreateWindow(TEXT("button"), TEXT("Start"),    
                             WS_VISIBLE | WS_CHILD ,
                             160, 120, 80, 25,        
                             hwnd, (HMENU) 1, NULL, NULL);    
         Opt[1] = CreateWindow(.....          */

                                           
    break;
       
    case WM_COMMAND: //obsluga kliknięcia w kontrolkę
        switch(LOWORD(wParam)) //numer kontrolki
        {            
              case 1: //kontrolka nr 1 parametr (HMENU)1 w CreateWindow
                                         Beep(400, 500); //np. Po kliknięciu na kontrolkę 1 - dźwięk
          break;

              case 2: //po kliknięciu na kontrolkę nr 2 - koniec programu
                                      PostQuitMessage(0);
          break;
          //case 3:........ obsługa wszystkich kontrolek  

         }
    break; //koniec obsługi kliknięcia na kontrolkę
       
    case WM_DESTROY: //zdarzenie zamknięcia głównego okna
         PostQuitMessage(0);
    break;
  }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}
C