C 为什么不能画点;“顺利”;是否使用XDrawPoint(X窗口)?
以下是代码片段(Xlib):C 为什么不能画点;“顺利”;是否使用XDrawPoint(X窗口)?,c,xlib,C,Xlib,以下是代码片段(Xlib): void更新_屏幕() { int X,Y; 对于(X=0;X
void更新_屏幕()
{
int X,Y;
对于(X=0;X
但情况是这样的:
然后:
为什么不能用XDrawPoint平滑地绘制点
如何用绿色流畅地填充窗户
完整代码如下:
#include <X11/Xlib.h> // must precede most other headers!
#include <stdlib.h>
int Wnd_X=500;
int Wnd_Y=500;
void update_screen();
GC gc_2;
Window win;
Display *dsp;
int main()
{
dsp = XOpenDisplay(NULL);
int screen = DefaultScreen(dsp);
win = XCreateWindow(dsp, DefaultRootWindow(dsp), 0, 0, Wnd_X, Wnd_Y, 0, 0, 0, 0, 0, 0);
//XCreateSimpleWindow(dsp, DefaultRootWindow(dsp), 0, 0, Wnd_X, Wnd_Y, 0, 0x000000, 0xFFFFFF);
Atom wmDelete = XInternAtom(dsp, "WM_DELETE_WINDOW", True);
XSetWMProtocols(dsp, win, &wmDelete, 1);
XGCValues gcvalues_2;
gcvalues_2.function = GXcopy;
gcvalues_2.plane_mask = AllPlanes;
gcvalues_2.foreground = 0x00FF00;
gcvalues_2.background = 0xFFFFFF;
gc_2 = XCreateGC(dsp, win, GCFunction|GCPlaneMask|GCForeground|GCBackground, &gcvalues_2);
XEvent evt;
long eventMask = StructureNotifyMask;
eventMask |= ButtonPressMask|ButtonReleaseMask|KeyPressMask|KeyReleaseMask;
XSelectInput(dsp, win, eventMask);
XMapWindow(dsp, win);
// wait until window appears
do { XNextEvent(dsp,&evt); } while (evt.type != MapNotify);
update_screen();
XDestroyWindow(dsp, win);
XCloseDisplay(dsp);
return 0;
}
void update_screen()
{
int X,Y;
for (X = 0; X < Wnd_X; X++)
for (Y = 0; Y < Wnd_Y; Y++)
{
XDrawPoint(dsp, win, gc_2, X, Y);
usleep(100);
}
return;
}
#include//必须位于大多数其他标题之前!
#包括
int Wnd_X=500;
int Wnd_Y=500;
无效更新_屏幕();
gc2;
窗口赢;
显示器*dsp;
int main()
{
dsp=XOpenDisplay(空);
int屏幕=默认屏幕(dsp);
win=XCreateWindow(dsp,DefaultRootWindow(dsp),0,0,Wnd_X,Wnd_Y,0,0,0,0,0);
//XCreateSimpleWindow(dsp,DefaultRootWindow(dsp),0,0,Wnd_X,Wnd_Y,0,0x000000,0xFFFFFF);
Atom wmDelete=XInternAtom(dsp,“WM_删除_窗口”,真);
XSetWMProtocols(dsp、win和wmDelete,1);
XGCValues gcvalues_2;
gcvalues_2.function=GXcopy;
gcvalues_2.plane_mask=所有平面;
gcvalues_2.前台=0x00FF00;
gcvalues_2.background=0xFFFFFF;
gc|u 2=XCreateGC(dsp、win、GCFunction | GCPlaneMask | gc前台| GCBackground和gcvalues|u 2);
XEvent-evt;
long eventMask=StructureNotifyMask;
eventMask |=按钮释放任务|按钮释放任务|按键释放掩码|按键释放掩码|按键释放掩码;
XSelectInput(dsp、win、eventMask);
XMapWindow(dsp,win);
//等待窗口出现
do{XNextEvent(dsp,&evt);}while(evt.type!=MapNotify);
更新屏幕();
XDestroyWindow(dsp,win);
XCloseDisplay(dsp);
返回0;
}
无效更新_屏幕()
{
int X,Y;
对于(X=0;X
您需要刷新X服务器的更新。试试这个:
XDrawPoint(dsp, win, gc_2, X, Y);
XFlush(dsp);
usleep(100);
您是否必须要求
ulseep(100)
?这会导致皮克斯绘图的延迟。@jayeshbhoi这是必须的。:-)如果没有它,窗口将立即被填充。好的,但是您是否已将(x11)xilb与其他填充工具(如OpenGL ES)一起使用,或者您可以通过计算窗口大小来使用XFillRectangle()
api。
XDrawPoint(dsp, win, gc_2, X, Y);
XFlush(dsp);
usleep(100);