GDI-Frage(mehr oder weniger)
-
Hallo,
ich hab eine Frage, und zwar ob es einen unterschied macht wenn ich PAINTSTRUCT ps; und HDC hDC; anstad in diesem Code einfach global zu erstelle?#include <windows.h> // Prototypen // Anwendungsfenster erzeugen HWND CreateMainWindow(HINSTANCE hInstance); //Callback Funktion zur Nachrichtenbehandlung LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam); // Das Fensterhandle HWND hWnd = 0; // Windows main-Funktion int WINAPI WinMain(HINSTANCE hInstance, // Handle der Programminstanz HINSTANCE hPrevInstance, // Handle der letzten Instanz LPSTR lpCmdLine, // Kommandozeile int nCmdShow) // Art wie das Fenster angezeigt werden soll { // Fenster erzeugen und Handle speichern hWnd = CreateMainWindow(hInstance); // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten if(0 == hWnd) { MessageBox(0,"Fehler","Fehler",MB_OK); return 0; } // Struktur, in der Informationen zur Nachricht gespeichert werden MSG msg; // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird while(GetMessage(&msg,NULL,0,0)) { // Nachricht an die Callback Funktion senden TranslateMessage(&msg); DispatchMessage(&msg); } // Rückgabewert an Windows return 0; } HWND CreateMainWindow(HINSTANCE hInstance) { WNDCLASSEX wndClass; // WNDCLASSEX Struktur // Struktur initialisieren wndClass.cbSize = sizeof(WNDCLASSEX); // Größe angeben (nie vergessen!) wndClass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Standard Stile wndClass.lpfnWndProc = WindowFunc; // Die Callback Funktion angeben wndClass.cbClsExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.cbWndExtra = 0; // Zusätzliche Angaben, wird nicht benötigt wndClass.hInstance = hInstance; // Anwendungsinstanz wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // Weisser Pinsel wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // Normaler Cursor wndClass.lpszMenuName = NULL; // Das Fenster hat kein Menü wndClass.lpszClassName = "WindowClass"; // Der Name der Klasse wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo wndClass.hIconSm = LoadIcon(NULL, IDI_WINLOGO); // Windows Logo RegisterClassEx(&wndClass); return CreateWindowEx(NULL, // Keine erweiterten Stile nutzen "WindowClass", // Klassenname "Ein einfaches Fenster",// Fenstertitel WS_OVERLAPPEDWINDOW | // Fenster WS_VISIBLE, // Eigenschaften 0, 0, 400, 300, // Anfangsposition und Größe NULL, // Handle des Elternfensters NULL, // Handle des Menüs hInstance, // Anwendungsinstanz NULL); // wird nicht benötigt } // Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht // für Ihr Programm vorliegt LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachticht es sich handelt switch(msg) { // das Fenster soll geschlossen werden case WM_DESTROY: PostQuitMessage(0); return 0; break; // das Fenster muss neu gezeichnet werden case WM_PAINT: PAINTSTRUCT ps; HDC hDC; // Handle des Device Context anfordern hDC = BeginPaint(hWnd,&ps); // 10 * Hallo in rot ausgeben for(int i=0;i<200;i+=20) { // Farbe setzen SetTextColor(hDC,RGB(i,0,0)); TextOut(hDC,i,i,"Hallo",5); } // mitteilen, dass die Zeichenoperationen abgeschlossen sind EndPaint(hWnd,&ps); return 0; break; } // Wenn wir uns nicht um die Nachricht gekümmert haben // wird sie an die Standardnachrichtenverarbeitung von Windows // geschickt return (DefWindowProc(hwnd, msg, wParam, lParam)); }
-
und was soll das bringen?
-
naja das macht den unterschied das die sachen global sind was sollen Sie denn sonst für ein unterschied machen kannst halt auch an anderen stellen darauf zugreifen aber was das bringt eine ahnung
mfG LA
-
Das macht eigentlich garkeinen Unterschied. Aber so wie in diesem Code solltest du es nicht machen. Deklariere sie (wie es jeder macht) in der WindowProc als static.