c++ - 使用win32 api绘制笛卡尔系统

标签 c++ winapi win32gui

我正在尝试使用 win32 api 绘制正弦波。我做到了。

hDC = GetDC(hWnd);

while (TRUE)
{
    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        DispatchMessage(&msg);
    }

    if (msg.message == WM_QUIT)
        break;

    wavefunc(hWnd, hDC);
}

void wavefunc(HWND hWnd, HDC hDC)
{
    double full = 2 * pi * _freq;
    static double _x = 0;
    short int _y = 0;

    short _y = (short)(sin(_x / _freq)*_amp) + 300;
    if (_x >= full)
        _x -= full;
    SetPixel(hDC, 600, _y, blue);
    ScrollWindow(hWnd, -1, 0, NULL, NULL);
    Sleep(_sTime);
    _x++;
}

现在我正在尝试弄清楚如何绘制笛卡尔系统。但没有结果。

我有一个窗口,它在每个 sin 值处滚动。

我尝试在 hdc 上画线。当窗口滚动时,无法阻止 hdc 不滚动。

然后我从 Windows 创建另一个 hDc 但没有成功。 这个怎么做?问题是窗口滚动但有一些点修复..

最佳答案

这样做的方法是一次绘制所有内容:清除窗口,绘制网格,然后在网格上绘制整个波形(不仅仅是下一个点)。要使波形滚动,您需要使用不同的波形偏移量重新绘制。

为避免闪烁,您可能需要进行一些双缓冲。

典型的 WinAPI 程序在处理 WM_PAINT 命令时绘制窗口。 WM_PAINT 消息在任何或所有窗口无效且需要重新绘制时生成。每次滚动窗口时,您都会创建一个无效区域,但由于您忽略了 WM_PAINT 消息,所以什么也没有发生。

关于c++ - 使用win32 api绘制笛卡尔系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34516944/

相关文章:

c++ - 扩展 std::chrono 功能以处理运行时(非编译时)恒定周期

windows - TB_SETPADDING 消息对垂直填充没有影响

python - (Python 2.7) 获取 UI 标题栏大小

android - 如何使用 cmake 和 Android NDK 在 C++ 中加载线程支持

c++ - 比较 const 和非常量指针?

windows - 如果加载它的 DLL 被卸载,DLL 是否会被删除?

Python获取特定窗口标题

c++ - 如何将文件的路径(或任何文本)显示/附加到编辑框中? (C++ Win32 API)

c++ - 彩色图像之间的相似度测量(OpenCV)

c++ - 如何获取桌面的窗口句柄?