LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 869|回复: 3

急问:xlib编程XDrawLine()出错?

[复制链接]
发表于 2005-12-12 14:29:57 | 显示全部楼层 |阅读模式
WinXP 系统上用Exceed链接SGI 工作站 运行X程序 如下:

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


Window create_simple_win(Display *display, int win_x,int win_y,unsigned int win_width,unsigned int win_height){
int screen_num;
unsigned int border_width;
unsigned long border;
unsigned long background;
Window win;

screen_num = DefaultScreen(display);
border_width = 2;
border = BlackPixel(display,screen_num);
background = WhitePixel(display,screen_num);
win = XCreateSimpleWindow(display,RootWindow(display,screen_num),
win_x,win_y,win_width,win_height,
border_width,border,background);
XMapWindow(display,win);
XFlush(display);
return win;
}
GC create_gc(Display *display,Window win,int reverse_vedio){

GC gc;
XGCValues values;
int screen_num;
unsigned int line_width = 2;
int line_style = LineSolid;
int cap_style = CapButt;
int join_style = JoinBevel;
unsigned long valuemask = 0;
screen_num = DefaultScreen(display);
gc = XCreateGC(display,win,valuemask,&values);

if(reverse_vedio){
XSetForeground(display,gc,WhitePixel(display,screen_num));
XSetBackground(display,gc,BlackPixel(display,screen_num));
}else{
XSetForeground(display,gc,BlackPixel(display,screen_num));
XSetBackground(display,gc,WhitePixel(display,screen_num));
};
XSetLineAttributes(display,gc,line_width,line_style,cap_style,join_style);
XMapWindow(display,win);
return gc;
}

main(int argc , char *argv[])
{
Display *display;
Window win;
GC gc;
Drawable d;

unsigned int win_width;
unsigned int win_height;
int win_x;
int win_y;
int screen_num;

char *display_name = getenv("DISPLAY");
display = XOpenDisplay(display_name);
screen_num = DefaultScreen(display);
if(display != NULL)
printf("happy \n");

win_width = DisplayWidth(display,screen_num)/3;
win_height = DisplayHeight(display,screen_num)/3;
win_x = win_y = 20;

win = create_simple_win(display,win_x,win_y,win_width,win_height);
win_x=win_y=40;
win_width = DisplayWidth(display,screen_num)/5;
win_height = DisplayHeight(display,screen_num)/5;
win = create_simple_win(display,win_x,win_y,win_width,win_height);

gc = create_gc(display, win, 1);
XSync(display,False);
d = win;
XDrawPoint(display,win,gc,5,5);
XDrawPoint(display,win,gc,7,10);
XDrawLine(display,d,gc,50,50,40,100);
sleep(100);
XCloseDisplay(display);
}


编译: cc -o mm m.c -lX11
发表于 2005-12-12 16:52:45 | 显示全部楼层
你的代码是画不出线来的, 不能用sleep来代替 "事件循环". 楼主有仔细看过Xlib的文档吗? 虽然看起来很累人!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-13 12:46:55 | 显示全部楼层
Post by sailwithwind
你的代码是画不出线来的, 不能用sleep来代替 "事件循环". 楼主有仔细看过Xlib的文档吗? 虽然看起来很累人!!
看过Xlib文档(当然只是在查函数参数是^_^),“事件循环”是指什么?有什么命令吗?
给个提示,不要只说一半嘛,我身边全是搞理论解析的,自己摸着过河好累。
回复 支持 反对

使用道具 举报

发表于 2005-12-14 11:19:36 | 显示全部楼层
Google:  Xlib example
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表