C 如何使用XDrawPoint设置起始位置

C 如何使用XDrawPoint设置起始位置,c,position,x11,C,Position,X11,我使用XDrawPointd,w,DefaultGCd,s,x,y;从C中的X11库在屏幕上绘制一个点。x和y是绘制点的x和y坐标 问题是如果我想绘制XDrawPointd,w,DefaultGCd,s,-x,y;该点不会显示在屏幕上。我认为这是因为初始位置被设置为0,0,这使得点消失 是否有可能在屏幕中间设置起始位置,所以当绘制负x和y坐标时,点仍然出现? 谢谢,在调用XDrawPoint时,无法从左上角更改原点 虽然XDrawPoints允许您指定CoordModePrevious模式以指定

我使用XDrawPointd,w,DefaultGCd,s,x,y;从C中的X11库在屏幕上绘制一个点。x和y是绘制点的x和y坐标

问题是如果我想绘制XDrawPointd,w,DefaultGCd,s,-x,y;该点不会显示在屏幕上。我认为这是因为初始位置被设置为0,0,这使得点消失

是否有可能在屏幕中间设置起始位置,所以当绘制负x和y坐标时,点仍然出现?


谢谢,在调用XDrawPoint时,无法从左上角更改原点

虽然XDrawPoints允许您指定CoordModePrevious模式以指定相对于上一个模式的坐标,但我假设您不希望在每个点之前的窗口中心绘制点

实现打印中心原点的一种可能方法是自己计算中心原点并将点添加为偏移

使用简单结构:

typedef struct {
    int x;
    int y;
} ORIGIN;

ORIGIN origin;
然后将其设置到窗口的中间w:

最后,将其用作打印的偏移量:

XDrawPoint(d, w, DefaultGC(d, s), origin.x+x, origin.y+y);

当然,如果要调整窗口的大小,并且奇数大小除以2时将被截断,则必须重新计算原点。

如果屏幕大小为300×300,则您的解决方案将x坐标加150,y坐标加150?问题是,我试图在每一个八分音中画一条线,交换x1,x2,y1,y2,因为这条线并没有反映出这条线,而是在其他地方画出来的。我想我误解了这个问题。我的印象是,您希望坐标范围从0更改为300到-150到+150。在您想要的坐标系中计算您的点,然后在将它们发送到XDraw之前转换坐标。。。功能。
XDrawPoint(d, w, DefaultGC(d, s), origin.x+x, origin.y+y);