C++ C++;窗口中球拍的错误边距

C++ C++;窗口中球拍的错误边距,c++,C++,完整代码(无球类): 从右拍到窗口右侧的边距小于左侧。这些变量的计算是正确的,但仍然不尽相同 链接到图像您已将窗口设置为800像素的宽度,但其他所有内容都是相对于客户区域定位的,客户区域比窗口宽度窄,边框的厚度 用于计算要使客户端区域达到所需大小所需的窗口大小 int width = 800; int height = 600; int interval = 1000 / 60; int score_player1 = 0; int score_player2 = 0; int racket_w

完整代码(无球类):

从右拍到窗口右侧的边距小于左侧。这些变量的计算是正确的,但仍然不尽相同

链接到图像

您已将窗口设置为800像素的宽度,但其他所有内容都是相对于客户区域定位的,客户区域比窗口宽度窄,边框的厚度

用于计算要使客户端区域达到所需大小所需的窗口大小

int width = 800;
int height = 600;
int interval = 1000 / 60;
int score_player1 = 0;
int score_player2 = 0;
int racket_width = 10;
int racket_height = 80;
int racket_speed = 8;
int racket_left_x = 10;
int racket_left_y = 50;
int racket_right_x = width - racket_width - 10;
int racket_right_y = 50;

正确地书写。我建议你不要使用神奇的数字,但是#违抗。例如#定义球拍宽度10。然后对两个球拍使用相同的球拍宽度。这样可以定义高度和初始位置。对于您的问题,请检查“宽度”是否实际上是窗口的宽度。最好使用api来获取窗口属性,比如width etct,这里甚至没有可执行代码。给我们看看。C++没有“拍子”和“坐标”的概念。你是怎么画的?你在用什么图书馆?阅读你的问题,问问你自己:“有足够的信息可以回答吗?”什么是双星号?@MAG On,请再说一遍,我添加了完整的代码。我们不需要完整的代码(即为你调试)。在MCVE中隔离问题(参见上面的链接)只是好奇,你如何推断它是winapi?屏幕截图是第一条线索。显然是windows,但它可能是任何渲染框架/API。让我们看看你的猜测是否正确;)它可以是任何基于WinAPI构建的框架。该错误与不考虑客户机rect和窗口rect之间的差异完全一致。当然,它可能是MFC或ATL/WTL,甚至是Qt。PieperLever可以使用GDI、GDI+、DirectDraw、Direct2D或Direct3D。不管怎样,修复程序可以与这些框架中的任何一个一起工作。Windows和客户端的区别在于Windows API的概念。内容的绘制方式与此无关。这个bug与窗口区域和客户端区域之间的差异有关,这是一个Windows API概念。GLUT在系统API之上工作。
// Initialize a RECT with the size you want the client area to be.
RECT rc = { 0, 0, width, height };
// Now adjust the rectangle to the size the window would need to be.
AdjustWindowRect(&rc, my_style_flags, FALSE);

// Now create the window using the sizes in rc.  Make sure you use
// consistent style flags or the adjustment may not be correct.
const int window_width = rc.right - rc.left;
const int window_height = rc.bottom - rc.top;
my_hwnd = CreateWindow(..., my_style_flags, x, y, window_width, window_height, ...);