求大家给个思路,关于绘图

来源:百度知道 编辑:UC知道 时间:2024/06/18 08:24:49
我重载OnMousemove(),在鼠标坐标点画两条垂直的交叉线跟随鼠标移动,就像股票软件一样,问题是,我要如何让旧的交叉线消失呢,如图。我移动鼠标后不停的绘上新的交叉线,而旧的也还在,有什么办法让旧的消失?
我试过绘新的交叉线之前先Invalidate();可是这样也不行,导致屏幕狂闪不说,而且交叉线都无法显示出来了。请高手指点思路,谢谢
AlphaBlend的方法好像不错,只是我没听明白,这里的static是什么,如何生成,谢谢

这种如果只是显示横竖两条白线的话,如果想要简单实现可以
生成两个 STATIC 设其为不可用,显示时设为可见,否则不可见
只需处理 STATIC 的WM_PAINT 画成白色就好了,
在 STATIC 的 Parent 窗体中处理 WM_MOUSEMOVE,决定STATIC的位置

你那样 直接 用 Invalidate()刷新 肯定是出现 屏幕狂闪

HWND hwndx;
HWND hwndy;

hwndx = CreateWindow("STATIC", "", WS_CHILD | SS_NOTIFY, Left, Top, Width, 1, Parent, NULL, hInstance, NULL);

hwndy = CreateWindow("STATIC", "", WS_CHILD | SS_NOTIFY, Left, Top, 1, Height, Parent, NULL, hInstance, NULL);

这里你只需要提供,水平的宽度Width,垂直的高度Height,位置 Left, Top,
例程的hInstance,父窗体句柄 Parent
就可以了

显示时
ShowWindow(hwndx, SW_SHOW);
ShowWindow(hwndy, SW_SHOW);

隐藏时
ShowWindow(hwndx, SW_HIDE);
ShowWindow(hwndy, SW_HIDE);

再处理一下 WM_PAINT,就可以了

用InvalidateRect重绘交线附近的区域,不必重绘整个窗口

这个问题请在VC++区去提问