Fenster immmer im Vordergrund
-
Unter Windows ist momentan immer nur ein Fenster auf dem Bildschirm aktiv. In die Taskleiste verbannte Fenster (Programme) sind inaktiv. Erkläre mal genauer, was Du mit 'durchsichtig' meinst. Ansonsten kannst Du mit Nachrichten alles steuern - die sind schliesslich die Grundlage von Windows. Mehrere Programme gleichzeitig auf dem Bildschirm ist jedenfalls kein Problem.
-
mein konkretes broblem war eigentlich, das ich und ein freund kein Fadenkreuz bei Battlefield haben. Daher habe ich mir gedacht, es wird nichtg allzu schwer sein, eines zu programmieren, also einfach zwei striche, die immer im vordergrund sind, und sich in der mitte des bildschirms kreuzen. Das habe ich jetzt auch hingekriegt, und zwar jeweils zwei schwarze popup fenster, die sich eben in der Mitte des bildschirms treffen. Das Problem ist, das wenn ich Batlefield starte, das Fadenkreuz verschwindet, ich denke, dass das daran liegt, dass battlefield als Vollbild startet. Wenn ich jetzt nur ein großes Vollbild Fenster mache, würde dieses jedoch auch all die nachrichten, die ich an Battlefield schicke, zB durch einen Mausklick, abfangen, daher dachte ich könnte man das mit Regionen lösen.
Vielleicht hat jemand eine noch bessere Idee?
-
Hallo,
interessante Idee... Um welches Battlefield handelt es sich denn und welche Win.-Version habt ihr (XP/Vista)?
MfG
-
wir haben beide Vista, und es geht um Battelfield Vietnam, mein Freund hat schon mal im internet nach diesem Fehler gesucht. Bei mir ist das auch erst seit meiner neu installation von Vista, aber ich hab mir gedacht, ich schreibe mir solch ein Programm, einfach auch aus dem Grund, um c etwas zu üben.
Ich kann euch ja mal den Code zeigen, wenn er zu lang ist mache ich ihn wieder raus:#include <windows.h> LRESULT CALLBACK WndProc1(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM); const char szAppName[] = "Fadenkreuz"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hWnd1; HWND hWnd2; MSG msg; WNDCLASS wc1; WNDCLASS wc2; wc1.style = CS_HREDRAW | CS_VREDRAW; wc1.lpfnWndProc = WndProc1; wc1.cbClsExtra = 0; wc1.cbWndExtra = 0; wc1.hInstance = hInstance; wc1.hCursor = LoadCursor(NULL,IDC_ARROW); wc1.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc1.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc1.lpszClassName = "1"; wc1.lpszMenuName = NULL; wc2.style = CS_HREDRAW | CS_VREDRAW; wc2.lpfnWndProc = WndProc2; wc2.cbClsExtra = 0; wc2.cbWndExtra = 0; wc2.hInstance = hInstance; wc2.hCursor = LoadCursor(NULL,IDC_ARROW); wc2.hIcon = LoadIcon(NULL,IDI_APPLICATION); wc2.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc2.lpszClassName = "2"; wc2.lpszMenuName = NULL; RegisterClass(&wc1); RegisterClass(&wc2); hWnd1 = CreateWindowEx(WS_EX_TOPMOST, "1", szAppName, WS_POPUP | WS_VISIBLE, 0, /* X-Position auf dem Monitor */ 400, /* Y-Position auf dem Monitor */ 1280, /* Fensterbreite */ 1, /* Fensterhoehe */ NULL, NULL, hInstance, NULL); hWnd2 = CreateWindowEx(WS_EX_TOPMOST, "2", szAppName, WS_POPUP | WS_VISIBLE, 640, /* X-Position auf dem Monitor */ 0, /* Y-Position auf dem Monitor */ 1, /* Fensterbreite */ 800, /* Fensterhoehe */ NULL, NULL, hInstance, NULL); ShowWindow(hWnd1, iCmdShow); UpdateWindow(hWnd1); ShowWindow(hWnd2, iCmdShow); UpdateWindow(hWnd2); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc1(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static LPRECT rect; switch (message) { case WM_PAINT: { GetWindowRect(hWnd, rect); SetWindowPos(hWnd, HWND_TOPMOST, 0, 400, 1280, 1, SWP_SHOWWINDOW); BringWindowToTop(hWnd); break; } case WM_KILLFOCUS: { SetWindowPos(hWnd, HWND_TOPMOST, 0, 400, 1280, 1, SWP_SHOWWINDOW); BringWindowToTop(hWnd); break; } case WM_DESTROY: { PostQuitMessage(0); return 0; } case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: PostQuitMessage(0); return 0; } return 0; } return DefWindowProc(hWnd, message, wParam, lParam); } LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static LPRECT rect; switch (message) { case WM_PAINT: { SetWindowPos(hWnd, HWND_TOPMOST, 640, 0, 1, 800, SWP_SHOWWINDOW); BringWindowToTop(hWnd); break; } case WM_KILLFOCUS: { SetWindowPos(hWnd, HWND_TOPMOST, 640, 0, 1, 800, SWP_SHOWWINDOW); BringWindowToTop(hWnd); break; } case WM_DESTROY: { PostQuitMessage(0); return 0; } case WM_KEYDOWN: switch (wParam) { case VK_ESCAPE: PostQuitMessage(0); return 0; } return 0; } return DefWindowProc(hWnd, message, wParam, lParam); }also ich habe zwei fenster und zwei nachrichten methoden, das liegt daran, dass ich die fenster an verschiedenen Stellen neuzeichnen muss.
-
Das kannst Du vergessen. Battelfield arbeitet mit DirectX (IMHO). Da kannst Dich net einfach reinklinken. Du kannst zwar mittels WinAPI in DirectX zeichnen, aber dafür brauchst erstmal die Source^^.
-
ich wollte mich auch nicht reinklinken, sondern ein anderes Fenster darüber zeichnen. doch battlefield drängt sich immer wieder in dne Vordergrund.
-
Was meinst du mit Source? Das DirectX Device von Battlefield? (Grob gesagt)
Reicht in diesem Fall nicht der Handler vom Battlefield Window?
-
Hallo,
tweenki schrieb:
wir haben beide Vista, und es geht um Battelfield Vietnam...
Das ist bekannt, dass Battlefield Vietnam dieses Problem unter Vista hat... Lass mich raten: Du hast eine NVidia-System (GraKa)!?
g**gle meint dazu Folgendes:
... neue nVidia Forceware X für Vista x86 und x64 behebt die Grafikfehler im Menü und das fehlende Fadenkreuz.
einfach mal nach zB: "Nvidia 101.41" googeln
MfG
PS: Wenn du proggen willst, muss es ja nicht unbedingt dieses Problem sein, oder?

Edit: Soweit ich gelesen habe, machen es die Pro's sogar absichtlich so: ein kleines Stück durchsichtigen Klebestreifen mittig auf dem Bildschirm anbringen und nach etwas "einschiessen" einen Punkt auf den Klebestreifen zeichnen. Fadenkreuz kann so komplett deaktiviert werden, was nach deren Meinung sogar noch 1-2 Frames pS gutmacht!

-
Das mit dem Klebestreifen ist nicht wahr

Die Pro's können die Mitte des Bildschirms selber nach Gefühl finden, also vorallem die AWP Spieler als Beispiel.
Aber das ist wiederum ein anderes Thema...Mich nimmt es wunder ob es möglich wäre das DirectX Device Objekt von Battlefield anzusteuern oder über den Window Handler mit einer möglichkeit in das Bild gezeichnet werden kann.
-
mein freund hat die mitte so gefunden meistens jedenfalls. ich habe mir einfach tesa mit einem kruz in die mitte geklebt, was auch supre funktioniert hat.
Heisst das das ich einfach einen neuen Treiber installieren muss? Wenn ja danke für die Hilfe.
Übrignes ja ich hab eine NVidia GraKa
-
mRXXo schrieb:
...Die Pro's können die Mitte des Bildschirms selber nach Gefühl finden ...
tweenki schrieb:
mein freund hat die mitte so gefunden meistens jedenfalls. ...
Das würde ja dann heißen tweenki's Freund ist ein Pro.
Dann wundert es mich, dass er per google die Problemlösung mit dem Fadenkreuz nicht gefunden hat, aber vielleicht hat ja das Eine nichts mit dem Anderen zu tun.tweenki schrieb:
...Heisst das das ich einfach einen neuen Treiber installieren muss? ...
einen Versuch ist es wert!
tweenki schrieb:
... Übrignes ja ich hab eine NVidia GraKa
Dein Freund auch, stimmt's? Das hat mir Prof. google verraten.
