首页 > 系统相关 >windows rb_tree动画

windows rb_tree动画

时间:2024-09-24 19:50:02浏览次数:8  
标签:ball wc windows tree int WINDOW hdc rb rc


#define UNICODE
#include <windows.h>
#include <windowsx.h>

#include <stdbool.h>
#include <stdio.h>

typedef struct ball_t ball_t;

struct ball_t
{
    int src_x;
    int src_y;

    int target_x;
    int target_y;
};

const int WINDOW_WIDTH = 800;
const int WINDOW_HEIGHT = 480;
const int BALL_DIAMETER = 30;

HDC hdc;
HDC hdcMem;
HBRUSH hbrBlack;

bool bSliderActive;
RECT rcSlider = {20, 440, 780, 470};
int m_slider_percent;

ball_t ball_1 = {0, 0, 100, 100};

void draw_ball(HDC hdc, ball_t* ball, int percent)
{
    int x = ball->src_x + (ball->target_x - ball->src_x) * percent / 100;
    int y = ball->src_y + (ball->target_y - ball->src_y) * percent / 100;
    Ellipse(hdc, x,  y, x + BALL_DIAMETER, y + BALL_DIAMETER);
}

void do_paint(HDC hdc)
{
    draw_ball(hdc, &ball_1, m_slider_percent);

    Rectangle(hdc, 20, 440, 780, 470);
    if (m_slider_percent)
    {
        RECT rc = {23, 443, 23+(777-23)*m_slider_percent/100, 467};
        FillRect(hdc, &rc, hbrBlack);
    }
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CREATE:
        {
            hdc = GetDC(hWnd);
            
            hdcMem = CreateCompatibleDC(hdc);
            HBITMAP hbmp = CreateCompatibleBitmap(hdc, WINDOW_WIDTH, WINDOW_HEIGHT);
            SelectObject(hdcMem, hbmp);

            hbrBlack = CreateSolidBrush(RGB(0, 0, 0));

            SetTimer(hWnd, 0, 16, NULL);
            break;
        }

        case WM_TIMER:
        {
            static DWORD last_tick = 0;
            if (last_tick == 0)
            {
                last_tick = GetTickCount();
            }

            DWORD now_tick = GetTickCount();
            while (now_tick - last_tick >= 16)
            {
                last_tick += 16;
                RECT rc = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
                FillRect(hdcMem, &rc, (HBRUSH)(COLOR_WINDOW+1));
                do_paint(hdcMem);
                BitBlt(hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, hdcMem, 0, 0, SRCCOPY);
            }
            break;
        }

        case WM_LBUTTONDOWN:
        {
            POINT pt =  {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};
            if (PtInRect(&rcSlider, pt))
            {
                bSliderActive = true;
            }
            break;
        }

        case WM_LBUTTONUP:
            bSliderActive = false;
            break;

        case WM_MOUSEMOVE:
        {
            if (bSliderActive)
            {
                int x = GET_X_LPARAM(lParam);
                if (x <= rcSlider.left)
                {
                    m_slider_percent = 0;
                }
                else if (x >= rcSlider.right)
                {
                    m_slider_percent = 100;
                }
                else
                {
                    m_slider_percent = (x - rcSlider.left) * 100 / (rcSlider.right-rcSlider.left);
                }
            }
            break;
        }

        case WM_DESTROY:
            ReleaseDC(hWnd, hdc);
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}

int main()
{
    WNDCLASS wc = {0};
    wc.lpszClassName = L"RbTreeAnimation";
    wc.lpfnWndProc = WndProc;
    wc.hInstance = GetModuleHandle(NULL);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    RegisterClass(&wc);

    RECT rc = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
    AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW&~WS_THICKFRAME, FALSE);

    HWND hWnd = CreateWindow(wc.lpszClassName, L"RbTreeAnimation", WS_OVERLAPPEDWINDOW&~WS_THICKFRAME,
        CW_USEDEFAULT, CW_USEDEFAULT, rc.right-rc.left, rc.bottom-rc.top, NULL, NULL, wc.hInstance, NULL);
    UpdateWindow(hWnd);
    ShowWindow(hWnd, SW_SHOWDEFAULT);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

 

标签:ball,wc,windows,tree,int,WINDOW,hdc,rb,rc
From: https://www.cnblogs.com/kehuadong/p/18429886

相关文章

  • Zed for Windows从源代码编译
    Zed是一个优秀的开源IDE,网上很多赞美它的文章,堪比VSCode。笔者用了几次VSCode,一直不喜欢。主要问题有两个:1.界面不美观,不精致;2.最重要的,开发稍微大型的项目,经常崩溃。一直关注Zed官网,Windows版从未上线。这次下决心从源码自己编译一个吧。环境:操作系统:Windows10CPU:Intel......
  • 在 Windows Server 2022 上架设 WSUS(Windows更新服务)(Windows Server Update Services)
    在WindowsServer2022上架设WSUS(Windows更新服务)(WindowsServerUpdateServices)服务器的步骤如下:1.安装WSUS角色打开服务器管理器:通过开始菜单找到“服务器管理器”,并打开它。添加角色和功能:在服务器管理器中,点击“管理”>“添加角色和功能”。角色类......
  • 大数据-140 - ClickHouse 集群 表引擎详解5 - MergeTree CollapsingMergeTree 与其他
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:MergeTree实测案例Re......
  • 大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引
    点一下关注吧!!!非常感谢!!持续更新!!!目前已经更新到了:Hadoop(已更完)HDFS(已更完)MapReduce(已更完)Hive(已更完)Flume(已更完)Sqoop(已更完)Zookeeper(已更完)HBase(已更完)Redis(已更完)Kafka(已更完)Spark(已更完)Flink(已更完)ClickHouse(正在更新···)章节内容上节我们完成了如下的内容:MergeTree存储结构Me......
  • Windows驱动调试方法
    单步调试驱动驱动的调试不能直接在本机上进行,而是要放在虚拟机(或其它设备)中。这是因为在内核模式下,一个断点的触发将会停下整个系统而不只是单个进程。在前面的文章里,使用了DbgPrint函数来进行日志的输出,但这种方法不能进行单步调试。下面介绍两种调试方法。基于VisualStu......
  • Windows内核编程基础(1)
    在前面的文章中,介绍了如何配置开发环境以及如何进行调试。接下来的几篇文章,将会重点介绍内核编程中所需要了解的一些理论基础。我写这个系列文章的主要目的是方便以后自己查阅,同时也给正在学习内核开发的小伙伴一些参考,所以我会尽可能地以最简单的方式进行描述。如果在阅读......
  • AT_jsc2021_g Spanning Tree 题解
    感觉自己稍微有一点唐了。思路我们首先可以把一定要连的边连起来。这样就变成了一个无向图生成树计数问题。如何求解。使用矩阵树定理!我们可以求出基尔霍夫矩阵,然后跑一遍行列式就可以了。时间复杂度:\(O(n^3)\)。Code#include<bits/stdc++.h>usingnamespacestd;con......
  • Windows 11设置柯能卡打印机通过SMB扫描到电脑
    1、查看打印机扫描仪的网络IP。2、在“网络和Internet访问”中打开网络发现,并通过”计算机管理“将Guest帐户的禁用选项取消。3、设置共享目录的来宾访问权限已开启。4、在添加windows功能中增加SMB服务,并开启之。5、建立共享扫描文件夹并设置其具有Guest及Everyone用户有可读......
  • VMWare安装Ubuntu之后与Windows系统共享文件夹的设置步骤
    1.首先在Windows系统中新建一个需要共享的文件夹,并设置文件夹的共享属性,如下图: 2.VMWare软件开启【共享文件夹】功能,如图所示3.进入Ubuntu系统,查看是否存在/mnt/hgfs目录,若是没有,先要以root权限建立该目录sudomkdir/mnt/hgfs4.挂载目录sudovmhgfs-fuse.host:......
  • 故障排查之利器:Windows系统的日志功能与管理
    文章目录前言一、系统日志的基本概念二、系统日志的类型与详细分析(一)事件日志的详细结构(二)事件日志类型(三)事件日志类型三、如何查看和分析系统日志(一)事件查看器(二)可靠性监视器(三)筛选与过滤(四)自定义视图(五)常见事件ID(六)自动化工具与策略四、系统日志的管理与维护(一)设置日......