C meets Xlib problem



  • hi,
    ich habe ein problem..und zwar habe ich ein fenster, wo ich eine linie durch haben will, wenn ich drafu drücke kommt das beabsichtige bla an der stelle wo der maus zeiger das fenster trifft ;), aber die linie will nicht am anfang vom fenster gezeichnet werden :(, auch nicht nach den ersten event
    hier is der code, brauche hilfe, wäre freundlich: ➡

    #include <stdio.h>
    #include <X11/Xlib.h>
    #include <X11/Xutil.h>
    
    #define WIN_TITLE "Test-Programm"
    #define WIN_NAME "TEST"
    #define WIN_CLASS "test"
    
    int main(int argc, char *argv[])
    {
    	int a;
            Display *dpy;
            Window win;
    	GC mygc;
    	XClassHint class_hint;
    	unsigned long fg, bg;
    
    	XEvent myevent;
    
    	XGCValues GCValues;
    
    	if ((dpy = XOpenDisplay(NULL)) == NULL)
            {
                    printf("Unable to open display\n");
                    return 1;
            }
    
            win = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, \
                            400, 300, BlackPixel(dpy, DefaultScreen(dpy)), 0, \
                            WhitePixel(dpy, DefaultScreen(dpy)));
    
    	  XSelectInput(dpy, win,
         ButtonPressMask | KeyPressMask | ExposureMask);
    
            XStoreName(dpy, win, WIN_TITLE);
            class_hint.res_name = WIN_NAME;
            class_hint.res_class = WIN_CLASS;
            XSetClassHint(dpy, win, &class_hint);
    
    	GCValues.function=GXset;
    	GCValues.line_width=5;
    
    	mygc = XCreateGC(dpy, win, GCFunction|GCLineWidth, &GCValues);
      	fg = BlackPixel(dpy, DefaultScreen(dpy));
    	bg = WhitePixel(dpy, DefaultScreen(dpy));
       	XSetForeground(dpy, mygc, fg);
     	XSetBackground(dpy, mygc, bg);
    
    	XMapWindow(dpy, win);
    
    	while (1)
    	{
    		XNextEvent(dpy, &myevent);
    			XDrawLine(myevent.xexpose.display,
    				myevent.xexpose.window, mygc, 1,1,400,300);
    
    	 XDrawImageString(myevent.xexpose.display,
    		myevent.xexpose.window, mygc,
    		myevent.xbutton.x, myevent.xbutton.y,
    		"Bla",3);
    
    	}
    
            return 0;
    
    }
    

    😕

    mfg
    scrap` 😢



  • Ist zwar vielleicht nicht dein Problem aber:

    while (1)
    {
    ....
    }
    

    du weist schon das, dass eine Endlosschleife ist!?

    mfg hohesC



  • ja das war beabsichtig bzw wusste/weiss ich 😃



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hallo
    versuch so was und viel glück

    switch(myevent.type)
    {
    case Expose:
           XDrawLine(myevent.xexpose.display, 
                    myevent.xexpose.window, mygc, 1,1,400,300); 
        break;
    
    case ButtonPress:
    
        x = myevent.xbutton.x;
        y = myevent.xbutton.y;
        the_win = myevent.xbutton.window;
    
            switch (myevent.xbutton.button) {
            case Button1:
                       XDrawImageString(myevent.xexpose.display, 
            myevent.xexpose.window, mygc, 
            myevent.xbutton.x, myevent.xbutton.y, 
            "Bla",3); 
    
                break;
            default:             break;
        }
        break;
    }
    

    youssef


Anmelden zum Antworten