简介
在一个循环运行的程序中,我们常常动态的来显示一些东西,如跳动的小球,或者是闪烁的灯光,以及一些动画。
今天就简单的写了一个小案例,使用一个按钮,来控制一个动画的运行与暂停。总体来说不难理解,就是相对于在循环中写了一个判断按钮,如果按钮按下,控制开关打开,循环继续,如果再按下,控制开关关闭,循环结束。这里只分享思路,具体是使用具体套用。
源码
///////////////////////////////////////////////////
// 程序名称:暂停与运行
// 编译环境:Mictosoft Visual Studio 2013, EasyX_20200315(beta)
// 作 者:luoyh <2864292458@qq.com>
// 公 众 号:C语言研究
// 最后修改:2024-7-3
//
// 定义一个全局变量来控制循环
bool running = true;
// 定义一个函数来处理按钮点击
void HandleButtonClick(int x, int y, int width, int height, ExMessage msg)
{
if (msg.x >= x && msg.x <= x + width && msg.y >= y && msg.y <= y + height)
{
// 切换循环控制变量
running = !running;
// 这里可以添加额外的逻辑,比如改变按钮的显示
}
}
int main()
{
// 初始化图形窗口
initgraph(640, 480);
setbkcolor(WHITE);
cleardevice();
// 按钮的坐标和大小
int buttonX = 240, buttonY = 400, buttonWidth = 100, buttonHeight = 50;
BeginBatchDraw();
int i = 0;
ExMessage msg;
flushmessage();
// 循环直到窗口关闭
while (!_kbhit())
{
// 绘制按钮(这里简单用矩形表示)
setcolor(BLUE);
rectangle(buttonX, buttonY, buttonX + buttonWidth, buttonY + buttonHeight);
// 检查鼠标消息
/*MOUSEMSG msg = GetMouseMsg();*/
peekmessage(&msg,EX_MOUSE);
if (msg.message == WM_LBUTTONDOWN)
{
// 处理按钮点击
HandleButtonClick(buttonX, buttonY, buttonWidth, buttonHeight, msg);
}
// 如果循环应该继续,则执行一些操作
if (running)
{
// 这里放置循环中需要执行的操作
// 例如:绘制一些动态图形,更新状态等
setcolor(RED);
setfillcolor(RED);
fillcircle(i, 240, 50); // 绘制一个红色的圆作为示例
i++;
if (i >= 640)
{
i=0;
}
}
fillcircle(i, 240, 50);
// 刷新屏幕
Sleep(10); // 稍微延迟一下,避免过快刷新
FlushBatchDraw();
cleardevice();
}
EndBatchDraw();
// 关闭图形窗口
closegraph();
return 0;
}