LECKÉK:              

Saját ablak

Directdraw1

Directdraw 2

Directdraw_3

Nos első lépésként készíts egy uj mappát a c meghajtó főkönyvtárában progi néven.

Indíts el a fordítót,és készíts egy új projectet:

DEV C++: fájl->új project-> válaszd az empty project nevet, mentsd el az előzőleg létrehozott mappába,és adj hozzá egy új fájl-t nevezd el main.cpp -nek.

MSVC6.0: fájl->uj ->win32application ikon    név: progi     célmappa pedig a progi legyen!

Az ok-ra kattintva válaszd az an empty project-et. és finis.

A source mappában adj hozzá egy új fájl-t main .cpp néven.

Nos akkor van kétféle projectünk,és két üres main.cpp fájl-unk, azaz nektek csak 1 féle.

Azért csináltam így,mert innen meglehetősen egyforma lesz a progi felépítése:

Azért, hogy windows ablakot tudjunk létrehozni a fordítónak tudnia kell ,hogy hogyan vannak

dekralálva a különböző struktúrák, osztályok ehez kell beírni:

#include <windows.h>

//dekralációk:

HWND hwnd;

bool fut= true;
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
void uzenetkezelo();

A HWND egy azonosító, ami akkor kap értéket,ha az ablakunk létrejött,fontos a dx felület létrehozásakor

időzítőknél,hang kreálásakor stb.

fut : logikai változó ha false értéket vesz fel, a programunk véget ér.

LRESULT CALLBACK WindowProcedure(.....) visszatérési függvény, a windows üzenetek feldolgozásához.

uzenetkezelo()  : függvény ami lekérdezi az üzeneteket és továbbitja a visszatérési függvénynek.

A dekralációk után jönnek a

//MEGVALÓSÍTÁSOK:

Elsőnek a main() függvény..... ezt azért nem kell dekralálni,mert a egy függvényt "megvalósítunk",mielőtt használnánk,akkor az egyben a dekralációja is.

 int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
WNDCLASSEX wincl; // ITT FOGLALOD LE A STRUKTÚRÁT

wincl.hInstance = hThisInstance; //ADATOK KITÖLTÉSE
wincl.lpszClassName = "progi";
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
if (!RegisterClassEx (&wincl))return 0;
hwnd = CreateWindowEx (0,"progi","Első ablakom",WS_POPUP ,0,0,800,600,NULL,NULL,NULL,NULL);
while (fut)
{
uzenetkezelo();
}
return 0;
};

Nos az első függvényünk a main(....) egy statikus struktúra létrehozásával kezdődik:

WNDCLASSEX    tipusú és           wincl; nevű struktúra, aminek kitöltjük az egyes tagjait.

Ezután beregisztráljuk a windows-ba :RegisterClassEx (&wincl)  a címének megadásával  (& a cime operátor)

Létrehozzuk az ablakot, a CreateWindowEx (...) fuggvény hívásával a visszatérési érték az ablakunk HWND-je.

Az ablak megjelenítése pedig a ShowWindow(hwnd,nFunsterStil); függvénnyel lehet.

És létrehozunk egy végtelen ciklust ,tehát a programunk soha sem fog megszakadni,amig a fut változó értéke hamis

nem lesz. Ezt majd az esc billentyű figyelésével fogjuk megoldani.

Most nézzük a visszatérési függvényt!

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* vizsgáljuk az üzenet tipusát */
{
case WM_KEYDOWN:
switch(wParam)
{
case VK_ESCAPE:fut=!fut;break;

}
break;

case WM_DESTROY:
PostQuitMessage (0); /* ha bezárod az ablakot elküldi a vége üzenetet */
fut=false;break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);

}

return 0;
}

Tulajdonképpen ez a függvény kezeli az üzeneteket,és most a billentyű lenyomása eseményt figyeljük,és

ha az esc-t nyomtuk,akkor tud kilépni az alkalmazásunk a végtelen ciklusból.

Maradt még az  uzenetkezelo() függvény:

void uzenetkezelo()
{
MSG msg;
if( PeekMessage (&msg,NULL, 0,0,PM_REMOVE))
{
TranslateMessage(&msg);DispatchMessage(&msg);
}
}
Ez lekérdezi az üzenetekt,és tobábbítja feldolgozásra.

fordítás -- futtatás ....

Ha minden jól megy akkor lesz egy szép szürke semmitmondó ablakunk,ami eltűnik az esc billentyűre.

Hát ez kell nekünk.

itt a kód

vissza