hwnd von WinMain einer anderen Funktion übergeben...
-
wie kann ich ein
HWND hwnd;
welches ich in int
WINAPI WinMain(...)
zum erstellen des hauptfensters verwende
einer funktionCreateProcessBar (hwnd);
übergeben??? CreatProcessBar wird mit
WM_CREAT
aufgerufen....
cu
-
u wie übergebe ich das hwnd aus winmain an _beginthread (startRender, 0, NULL);
???cu
-
Ich versteh dein Problem nicht
-
Die Übergabe von Variablen ist ein C-Problem, nichts WinAPI-spezifisches.
Mein Tipp: Lern erstmal richtig C/C++ (mit Konsolenprogrammierung). Dann hast du es später, bei der WinAPI, viel leichter.
-
Dieser Thread wurde von Moderator/in cd9000 aus dem Forum WinAPI in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
das problem ist ich hab im moment HWND hwnd; global gemacht u das das gefällt mir nicht so gut! könnte ja das hwnd mit pointern übergeben!!??
cu
-
häh??
sorry, aber ich versteh' irgendwie nicht so richtig, was du meinst...wenn du jetzt zum beispiel die funktion "hallo" hast:
void hallo(HWND hWnd) {MessageBox(hWnd, "Test", "Hallo!", MB_OK);}
ist das übergeben der Variable hwnd doch gar kein problem
:
hallo(hwnd);
-
will in void Render (...) das hwnd verwenden....
cu
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); void Render(hwnd) { // will hier das HWND hwnd; // aus nt WINAPI WinMain verwenden.... } int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] = TEXT ("Klassenname"); HWND hwnd; MSG msg; WNDCLASSEX wndclassex = {0}; // verkürzt.... hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil szAppName, // Name der Fensterklasse TEXT ("Fenstertitel"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL); // zusätzliche Parameter ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } return msg.wParam; } // Die Hauptnachrichtenschleife LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (message) { case WM_CREATE: Render(hwnd); return (0); case WM_PAINT: hdc = BeginPaint (hwnd, &ps); TextOut (hdc, 0, 0, "Hallo, ich bin ein Fenster!", 27); EndPaint (hwnd, &ps); return (0); case WM_DESTROY: PostQuitMessage (0); return (0); } return DefWindowProc (hwnd, message, wParam, lParam); }
-
void Render(HWND hwnd) { /* ... */ }
-
Achtung, ich bin selbst noch nub in diesem Thema, allerdings habe ich das folgendermaßen verstanden:
Wenn ich meine Acht Buttons mit Bitmaps bestücken möchte, verwende ich den Fall WM_PAINT. Innerhalb dieses Falls beziehe ich mich auf meine zu Beginn des Programms festgelegte Funktion PaintButtons:
int PaintButtons(HWND hButton) // meine HWND innerhalb dieser Funktion heisst hButton. Die weiter unten in der WM_PAINT übergebenen Buttons h1Button etc. ersetzen beim Aufruf der Funktion nun alle hButton innerhalb der Funktion durch h1Button, h2Button etc. { static PAINTSTRUCT ps; static HDC hdc; RECT rect; int hoehe; int breite; hdc = BeginPaint(hButton, &ps); // also hier: hButton wird h1Button für PaintButtons(h1Button) GetClientRect(hButton, &rect); // ebenso hier hoehe = rect.bottom - rect.top; breite = rect.right - rect.left; HBITMAP h2Bitmap = (HBITMAP)LoadImage(NULL, "test2.bmp", IMAGE_BITMAP, 40, 40, LR_LOADFROMFILE); // Achtung: die beiden Zahlenwerte müssen gleich gross sein, ansonsten kann man sie benutzen um Teile der Bitmap von unten oder von links abzuschneiden. BITMAP bmp; GetObject(h2Bitmap,sizeof(bmp),&bmp); HDC hDC = GetDC(hButton); // und hier HDC hBitmapDC = CreateCompatibleDC(hDC); SelectObject(hBitmapDC,h2Bitmap); StretchBlt(hdc,0,0, breite, hoehe,hBitmapDC,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); DeleteObject(h2Bitmap); ReleaseDC(hButton,hBitmapDC); // hier ReleaseDC(hButton,hDC); // und hier return 0; } [ ...... ] case WM_PAINT: { PaintButtons(h1Button); // dieses h1Button wird übergeben an die Funktion PaintButtons, die oben steht. HWND hButton erhält innerhalb der Funktion die Bezeichnung h1Button PaintButtons(h2Button); PaintButtons(h3Button); PaintButtons(h4Button); PaintButtons(h5Button); PaintButtons(h6Button); PaintButtons(h7Button); PaintButtons(h8Button); }
Ich hoffe, ich habe das einigermaßen richtig / verständlich erklärt - wie gesagt, ich bin Anfänger, kann sein dass ich Mist schwafele
-
Bitte keine uralten Threads grundlos hervorkramen.