WIN 32 programiranje, tutorijali...

Član
Učlanjen(a)
29.04.2010
Poruka
9
Evo nekoliko tutorijala gdje možete pogledati dosta korisnih stavri o win32 programiranju.
Ovo su tutorijali vezani za C++.
Kod:
[url=http://www.functionx.com/win32/index.htm]Win32 Programming - FunctionX[/url]
Kod:
[url=http://www.winprog.org/tutorial/]theForger's Win32 API Tutorial[/url]
Kod:
[url=http://www.winprog.org/tutorial/]theForger's Win32 API Tutorial[/url]
Kod:
[url=http://www.cplusplus.com/src/]C++ Sourcecode[/url]
Kod:
[url=http://www.zetcode.com/tutorials/winapi/]The Winapi (C Win32 API, No MFC) tutorial[/url]

Ovo su neki od osnovnih stvari koje se primjenjuju u win32 programiranju. (tipovi, tipovi handle...)

Win32 Tipovi podataka
1. Osnovni tipovi (Simple types)
Kod:
    HINSTANCE	Handle na instancu.
    LPSTR	        pokazivač na string ANSI karaktera (ANSI characters)
    WNDPROC	pokazivač na proceduru prozora.
    HANDLE	        Handle na objekt
    HICON        	Handle na ikonu
    HCURSOR	Handle na kursor
    HBRUSH	        Handle na brush
    ATOM	        Atom (referenca na string karktera u tablici atoma)

Handle
Handle je referenca na neki podatak, slično kao pokazivač.
Ali za razliku od pokazivača, handle se ne može dereferencirati.
Većini objekata se pristupa preko handle-a (prozoru, ikoni, meniju, …)

2. Tipovi handle
Kod:
    HACCEL	
    HBITMAP	
    HBRUSH	
    HCURSOR	(handle na kursor)
    HDC	
    HDRVR	
    HENHMETAFILE	
    HFONT	
    HGDIOBJ	
    HGLOBAL	
    HHOOK	
    HICON	(handle na ikonu)
    HINSTANCE	(handle na instancu programa)
    HKEY	
    HMENU	(handle na meni)
    HMETAFILE	
    HMODULE	
    HPALETTE	
    HPEN	
    HRGN	
    HRSRC	
    HSTR	
    HTASK	
    HWND	(handle na prozor)


Imenovanje promenljivih -
Konvencije Tip podatka Značenje

Kod:
b	          BYTE	            8 bitni unsigned integer
ch	          CHAR	            karakter (8 bitna signed vrednost)
d	          DOUBLE	            double promenljiva
dw	          DWORD	            32 bitni unsigned integer
f	          BOOL                   Bool promenljiva (nula je false; različito od nule je true)
f	          WORD	            bit zastave (flags) spakovani u 16 bitni integer
gh	          GLOBALHANDLE	    handle na globalnu memoriju od funkcije GlobalAlloc
h	          HANDLE	            32 bitni unsigned integer, handle na objekt
hwnd	          HWND	            handle na prozor
l	          LONG	            32 bitni signed integer
lp	          FAR*	            32 bitni far (long) pokazivac
n	          SHORT	            16 bitni signed integer
np	          FAR*	            32 bitni pokazivac
p*              (pointer)	            32 bitni pokaziva
pt	          POINT	            32 bitne x,y koordinate spakovane u strukturu
rgb	          RGB	                    RGB vrednosti boja spakovane u DWORD
sz	          CHAR ARRAY	    Null terminirani niz karaktera ("aaaaa\0")
w	          WORD	            16-bitni unsigend integer(osim wPARAM -32-bitni parametar poruke)

To bi bilo nešto ukratko o osnovnim tipovima koji se koriste u win32.Strukturu kreiranja jednog ovakvog programa mozete pronaci na linkovima koje sam postavio.

Ali evo kako izgleda jedan prozor i šta je sve potrebno.
Prvo morate definisati resurse.To možete staviti u jedan header file, nazvaćemo ga Resource.
Kod:
#define IDI_RATOGAME        1000   //definisemo malu ikonicu
#define IDI_RATOGAME_SM   1001  //definisemo veliku ikonicu

Zatim morate obraditi definisane ikonice u resurse tako što će te ih otkucati u rc. fajlu.
Kod:
#include "Resource.hpp"          //ukljucujemo definisane ikonice

IDI_RATOGAME   ICON         "RatoGame.ico"
IDI_RATOGAME   ICON         "RatoGame_sm.ico"

I na kraju sve to stavimo u jedan program.:)
Kod:
#include <windows>
#include "Resource.hpp"

LRESULT CALLBACK  WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  PSTR szCmdLine, int iCmdShow)
{
  static TCHAR  szAppName[] = TEXT("Serbian forum :D");
  WNDCLASSEX    wndclass;
  HWND          hWindow;
  MSG           msg;

  // Create the window class for the main window
  wndclass.cbSize         = sizeof(wndclass);
  wndclass.style          = CS_HREDRAW | CS_VREDRAW;
  wndclass.lpfnWndProc    = WndProc;
  wndclass.cbClsExtra     = 0;
  wndclass.cbWndExtra     = 0;
  wndclass.hInstance      = hInstance;
  wndclass.hIcon          = LoadIcon(hInstance,
    MAKEINTRESOURCE(IDI_RATOGAME));
  wndclass.hIconSm        = LoadIcon(hInstance,
    MAKEINTRESOURCE(IDI_RATOGAME_SM));
  wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  wndclass.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
  wndclass.lpszMenuName   = NULL;
  wndclass.lpszClassName  = szAppName;

  // Register the window class
  if (!RegisterClassEx(&wndclass))
    return 0;

  // Create the window
  hWindow = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

  // Show and update the window
  ShowWindow(hWindow, iCmdShow);
  UpdateWindow(hWindow);

  // Enter the main message loop
  while (GetMessage(&msg, NULL, 0, 0))
  {
    // Process the message
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return (int)msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
  HDC         hDC;
  PAINTSTRUCT ps;
  RECT        rect;

  switch (msg) 
  {
    case WM_PAINT:
      // Draw some text centered in the client area of the main window
      hDC = BeginPaint(hWindow, &ps);
      GetClientRect(hWindow, &rect);
      DrawText(hDC, TEXT("Uspjesno ste napravili svoj prvi win32 program!"), -1, &rect,
        DT_SINGLELINE | DT_CENTER | DT_VCENTER);
      EndPaint(hWindow, &ps);
      return 0;

    case WM_DESTROY:
      // Exit the application
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hWindow, msg, wParam, lParam);
}
Ovo je radjeno u Visual C++.Vi možete koristiti, ako želite, neki drugi program.Mada ja smatra da win32 programiranje najbolje raditi u nekom od Visual programa.
Teško je shvatiti win32 programiranje bez dobrog iskustva objektno orjentisanog programiranja i temljne osnove.

Ovde ima još puno stvari koje se trebaju objasniti.To ćemo nastaviti sutra;)
 
Natrag
Top