我正在尝试使用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
消息,因此什么也没有发生。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句