我们刚开始用C ++学习Windows编程。我们必须在屏幕上制作一个有4个模具的程序,当用户按下“SpaceBar”时,模具滚动或模具上的点数随机变化。我们的教授向我们提供了很多信息,所以我只是在寻找一些方向。
现在,我在屏幕上绘制了4个方块,使用Rectangle()函数。
Rectangle(hDC,30,100,130,200);
Rectangle(hDC,180,100,280,200);
Rectangle(hDC,330,100,430,200);
Rectangle(hDC,480,100,580,200);
我的问题是1)我将如何在这些“正方形”上绘制点,而不是在“屏幕”上绘制点。因此,如果我将模具向上移动,则点与方块一起移动,并且不会仅仅停留在屏幕上。 2.)当按下空格键时,我怎样才能使这些点随机变化(模拟它们已被滚动)? 只是寻找一些方向,谢谢。
答案 0 :(得分:1)
1)
您仍然需要在屏幕上绘制它们,但是您可以构建程序以将点作为方块的一部分来实现。
void moveSquare()
{
//change square position
//change dots positions the same as you changed the square
}
2)
您可以使用WM_KEYDOWN
和WM_KEYUP
消息或WM_CHAR
消息捕获窗口中的按键。只需启动一个链条,在按下空格时可以改变模具上应该出现的点数(SetTimer
可能很方便),让WM_PAINT
做点画的工作(或调用一些东西)计算点的位置,让WM_PAINT
遍历需要绘制的每个点。
void OnSpacePressed()
{
//start changing dots every so often, handled elsewhere
//maybe check if finished rolling before doing so
}
void calculateDotPositions()
{
switch (numberOfDots) {...} //hint: use the square as a reference point
}
void OnPaint()
{
//paint each sqaure
//paint each dot in the correct position, which should be updated with square
}
void OnChangeDots()
{
//change number of dots
//also start a new change to happen later if not done rolling
}
对于绘制点,请使用Warren P的参考链接。
答案 1 :(得分:1)
另一种方法是在内存中创建位图或图片。一个用于模具的6个面中的每一个。这里的目标是将位图复制到屏幕,而不是每次都重绘它们。研究“位图”和“bitblt”。
答案 2 :(得分:0)
你应该制作一个在原点绘制骰子的例程,用给定的坐标偏移。我不熟悉你正在使用的特定库,所以我不知道hDC是什么,但它看起来应该如下所示。
void drawDie(HDC hDC, int xCoord, int yCoord, int dieValue)
{
Rectangle(hDC, -50 + xCoord, -50 + yCoord, 50 + xCoord, 50 + yCoord);
// draw some number of circles specified by dieValue at appropriate coordinates
// translated by xCoord and yCoord arguments
}
如果你想让它们改变,你可以重新绘制之前的骰子。