Simon Online-tutorials.net Administrator
Registriert seit: 01.1970 Wohnort:Dornbirn Beiträge:1181
| Windowsprogrammierung Ich kommentiere den Code am besten mal:
Code:
//Windowsheader Datei
#include
//Die Windowscallback funktion, kümmert sich um die Nachrichten
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
//Typbezeichnung
char szClassName[ ] = "LoadBMP";
//Windows main Funktion
int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,
LPSTR lpszArgument,int nFunsterStil)
{
//Erstellt ein Handle für das Fenster (damit kann man auf das Fenster zugreifen)
HWND hwnd;
//Msg variable für die Nachrichten an das Fenster
MSG messages;
//Windowinfostructur
WNDCLASSEX wincl;
//Instanz vom Fenster (für dich unwichtig, einfach das hier benutzen)
wincl.hInstance = hThisInstance;
//Klassename
wincl.lpszClassName = szClassName;
//Callback Funktion, wird ausgeführt wenn eine Nachricht kommt
wincl.lpfnWndProc = WindowProcedure;
//Style vom Fenster
wincl.style = CS_DBLCLKS;
//Größe der Struktur
wincl.cbSize = sizeof (WNDCLASSEX);
//Das Icon (hier AFAIK standardicon, ansonsten löschen) (hier entweder unten in der Taskleiste oder oben beim Fenster)
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
//Icon 2 (wie oben)
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
//Standardcursor
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
//Kein menü
wincl.lpszMenuName = NULL;
//Vermutlich keine ClearScreenExtras
wincl.cbClsExtra = 0;
//Keine extras
wincl.cbWndExtra = 0;
//Hintergrund
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
//Registriert die Klasse wenn Fehlgeschlagen -> abbrechen
if (!RegisterClassEx (&wincl))
return 0;
//Erstellt das Fenster Parameter sihe www.msdn.com
hwnd = CreateWindowEx (0, szClassName, szClassName,
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,
CW_USEDEFAULT,544,375,HWND_DESKTOP,
NULL,hThisInstance,NULL);
//Zeigt das Fenster im Stiel Parameter 2 an
ShowWindow (hwnd, nFunsterStil);
//Solange keine Abbruch msg kommt
while (GetMessage (&messages, NULL, 0, 0))
{
//Callback usw.
TranslateMessage(&messages);
DispatchMessage(&messages);
}
//Gibt die letze msg zurück
return messages.wParam;
}
//Callback Funktion
LRESULT CALLBACK WindowProcedure (HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//Device Context fürs GDI zum Zeichen (so ne Art handle)
HDC hdc, hdcMem;
//Bitmap handle
static HBITMAP hBitMap;
static BITMAP bitmap ;
//Ne Struct zum ziechen
PAINTSTRUCT ps ;
switch (message)
{
//Wenn msg WM_CREATE (wurde erstellt) erhalten
case WM_CREATE:
//Ladet ein Bitmap
hBitMap = (HBITMAP)LoadImage(0,"bitmap.bmp",IMAGE_BITMAP, 0, 0,
LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);
//Fehler
if(hBitMap==NULL)
{
//Gibt einen Fehler aus
MessageBox(hwnd,"Bild konnte nicht geladen werden","Error",0);
return -1;
}
//Lässt das eine Handle auf das andere handle zeigen
GetObject (hBitMap, sizeof (BITMAP), &bitmap) ;
return 0;
case WM_PAINT:
//Holt das Handle vom GDI, muss man beim start vom GDI immer machen
hdc = BeginPaint (hwnd, &ps) ;
//kA was das macht, msdn.com gibt sicher hinweise
hdcMem = CreateCompatibleDC (hdc) ;
//Wählt das Objekt aus
SelectObject (hdcMem, hBitMap) ;
//Blittet (Zeichnet) das Object
BitBlt (hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight,
hdcMem, 0, 0, SRCCOPY) ;
//Wichtig wieder freigeben
DeleteDC (hdcMem) ;
//DC wieder freigeben (wichtig2)
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
//Löscht das bitmap
DeleteObject (hBitMap) ;
//Sendet Quit
PostQuitMessage (0);
break;
default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
-------------------
http://www.online-tutorials.net/wiki/funktionsname
Für was Personal Firewalls GnuGP emails verschlüsseln C++ Tutorial Sicherheits Tutorials
|