SetPixel funktioniert im Loop nur 1 mal?..



  • Guten Tag,
    ich wollte mir mit der API Funktion SetPixel ein Crosshair Tool für z.B.: Counter-Strike schreiben.
    [Es ist kein Cheat o.ä., aber ich spiele damit lieber 🙂 ]

    Der Code sieht wie folgt aus:

    #include <windows.h>
    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
    	if(argc < 1) exit(NULL);
    	long x,y;
    	HWND h = FindWindow(NULL,argv[1]);
    	HDC dc = GetDC(h);
    	int c_x =800/2,c_y=600/2,hs=26/2;
    	while(true) {
    		if(GetAsyncKeyState(0x01)) {
    			exit(NULL);
    		}
    		for(x=c_x-hs;x<c_x+hs;x++) {
    			SetPixel(dc,x,c_y,RGB(255,0,0));
    		}
    		for(y=c_y-hs;y<c_y+hs;y++) {
    			SetPixel(dc,c_x,y,RGB(255,0,0));
    		}
    		ReleaseDC(h, dc);
    		Sleep(5);
    	}
    return 0;
    }
    

    c_x, c_y und hs stehen für die Auflösung und die Größe des Crosshairs.
    Nun seh ich es einmal, und dann nie wieder, obwohl das Ganze in einem Loop steht und sich eigentlich immer wiederholen müsste.
    Und somit müsste das Crosshair doch eigentlich immer wieder neu aufgemalt werden.. oder nicht?
    Was habe ich übersehen? 😞

    Ich freue mich schon auf eure Hilfe, danke!



  • das geht so nicht...das spiel überzeichnet dein "crosshair" einfach wieder.

    das könnte hilfreich sein:

    http://www.gamedev.net/community/forums/topic.asp?topic_id=359319



  • Hmm,
    in Visual Basic klappt genau der gleiche Code (an VB angepasst und in einer Timer-Prozedur) einwandfrei.
    Das Programm zeichnet das Crosshair, und nach dem Timer-Intervall wird es in der Timer-Prozedur erneut gezeichnet.



  • Ok, ich glaube, dass ich es nun richtig habe..
    Seltsamerweise, obwohl das in VB nicht der Fall war, ist das ReleaseDC fehl am Platze.
    Danke für deine Hilfe 🙂


Anmelden zum Antworten