Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用winapi保持元素在顶部_C_Windows_Winapi - Fatal编程技术网

C 使用winapi保持元素在顶部

C 使用winapi保持元素在顶部,c,windows,winapi,C,Windows,Winapi,我在winapi中编写了一个小应用程序,它绘制了如下动画背景: case WM_PAINT: SelectObject(canvas, images[frame]); StretchBlt(hdc, 0, 0, 640, 320, canvas, 0, 0, 64, 32, SRCCOPY); break; case WM_TIMER: SelectObject(canvas, images[frame]); StretchBlt(hdc, 0, 0

我在winapi中编写了一个小应用程序,它绘制了如下动画背景:

case WM_PAINT:
    SelectObject(canvas, images[frame]);
    StretchBlt(hdc, 0, 0, 640, 320, canvas, 0, 0, 64, 32,  SRCCOPY);

    break;

case WM_TIMER:
    SelectObject(canvas, images[frame]);
    StretchBlt(hdc, 0, 0, 640, 320, canvas, 0, 0, 64, 32,  SRCCOPY);

    frame += 1;

    if (frame == sizeof(images)/sizeof(images[0]))
        frame = 0;

    break;
它可以完美地工作,但在绘制其他元素时会产生一些问题。我在同一个窗口里找到了一些标签

WM_PAINT
中绘制第一帧之后,标签仍然可见。当我用第二帧(在
WM\u TIMER
中)替换画布“(
HDC canvas=CreateCompatibleDC(HDC)
)图像时,标签突然消失了——我猜它们会留在绘制的新层下


在我重新绘制位图后,是否有办法使某些元素始终位于顶部或使它们位于顶部?

从中返回的设备上下文具有正确设置的剪裁区域。我不知道,您在
WM\u计时器
处理程序中呈现给哪个设备上下文。你真的应该把你所有的画都放到
WM_PAINT
中,然后通过调用从计时器触发重新绘制。请出示您的完整代码。例如,我们不知道您的
hdc
来自何处。是的,删除了旧的,因为它需要完全重建。您必须做得更好。你已经被告知要用WM_颜料画这幅画,并把它画好。不要试图这样学习。读一本好书。佩佐德是我学习的方式。好吧,谢谢。看来我需要自己做一些研究,但是,看在上帝的份上,我最不想做的事就是在2016年读一本关于winapi的书!Windows API不会很快消失,了解它肯定具有持久的价值。无论您是编写纯Windows API应用程序,还是参与MFC/ATL项目,或者必须调试托管的Windows窗体应用程序,或者订阅Windows运行时,了解Windows API都是非常有价值的,甚至是必须具备的先决条件。我强烈推荐阅读。你会很高兴你这么做的。