使用win32api绘制笛卡尔系统
draw cartesian system using win32 api
我正在尝试使用win32api绘制正弦波。我做到了。
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
消息,因此不会发生任何事情。
下面是我如何动画sin()函数:
创建一个位图(窗口大小),并在上面绘制静态部分(轴、标题、标签等)。
创建另一个位图(sin()的高度和窗口的宽度+sin(()周期的宽度),并在上面绘制sin(。
在wavefunc()中,获取精确的时间并计算sin位图的偏移量。
使用BitBlt()函数首先将静态部分blit到窗口的DC上,然后使用TransparentBlt(()从预先计算的偏移量开始绘制sin。
相关文章:
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- C++ 中unordered_map的有效笛卡尔积
- 谷歌测试:模板模板的笛卡尔乘积的类型列表与模板
- 使用多个输入向量中值的笛卡尔乘积调用 lambda
- 如何在C++中创建类型列表的 n 路笛卡尔积?
- c++17通过生成预先声明的类型列表的笛卡尔乘积来生成std::变体
- 用于将笛卡尔 (x,y,z) 转换为圆柱坐标 (ρ,θ,z) 坐标 2D/3D 的代码
- 将笛卡尔点存储在矢量和输出距离中
- 使用迭代器和可变参数模板的笛卡尔乘积
- 圆的面积 使用笛卡尔平面上的点
- 当元素数> 1000 时,如何制作向量的笛卡尔积?
- 使用提示用户输入笛卡尔平面中某些点的x-y坐标(浮点类型)的函数
- 创建两个可变非类型模板参数包的笛卡尔乘积扩展
- 如何根据过滤的数据创建笛卡尔产品范围
- 使用笛卡尔产品查找唯一BST数量的直觉
- 有没有STL函数可以得到两个C++向量的笛卡尔乘积
- TMP:如何推广向量的笛卡尔积
- c++中的笛卡尔乘积
- 用坐标搜索笛卡尔平面上的几何图形
- 使用win32api绘制笛卡尔系统