一个窗口盖住另一个窗口解决方法

一个窗口盖住另一个窗口
简单描述:
我自己写了一个简单的绘图程序,OnDraw里面显示一张位图

怎么才能达到这样的效果:另外的无关窗口(比如word窗口等。。。)覆盖了我写的程序的窗口而我写的程序不产生重绘,也就是我的程序被覆盖的时候我不想去重绘我的程序界面,觉得没重绘的必要。

谢谢。

------解决方案--------------------
这非常简单:
头文件里:
BOOL m_HaveRefresh;
CPP文件初始化函数里:
m_HaveRefresh=FALSE;
if(!m_HaveRefresh)
{
m_HaveRefresh=TRUE;
绘图
}
这样就不会重绘了,但这样可能会有问题,你试试就知道会有什么问题
------解决方案--------------------
GetForegroundWindow判断一下是否绘图主窗口
或者GetUpdateRect判断一下和图片的Rect是否有交集
------解决方案--------------------
非常规搞法,白花时间,建议改变思路

触发WM_PANIT的地方太多了.你必须要响应它,才能在窗口内容被破坏时保持你自己的样式.

比较常规的作法是 dc的GetClipRect 只取出需要绘制的剪切区,只部分重绘,例如一个小窗口在你的大窗口上拖动.
------解决方案--------------------
不明白楼主到底要什么?
------解决方案--------------------
Validate()
------解决方案--------------------
探讨

引用:
非常规搞法,白花时间,建议改变思路

触发WM_PANIT的地方太多了.你必须要响应它,才能在窗口内容被破坏时保持你自己的样式.

比较常规的作法是 dc的GetClipRect 只取出需要绘制的剪切区,只部分重绘,例如一个小窗口在你的大窗口上拖动.


谢谢提供思路。

我不是说不处理WM_PAINT消息了,别的触发WM_PAINT的消息还是处理,……

------解决方案--------------------
探讨

Validate()

------解决方案--------------------
重绘应该发生在有东西要显示时,
如一个大窗口逐渐覆盖一个小窗口时,小窗口不会发生重画。
只有小窗口有部分露出来时才会有重画。
------解决方案--------------------
你的窗口被其它窗口挡住的时候会不停的收到WM_PAINT消息?
------解决方案--------------------
那你就窗口置顶吧~怎么弄都不重绘。
------解决方案--------------------
HWND desWnd = ::GetDesktopWindow();
HWND topWnd = ::GetTopWindow(desWnd);
if(topWnd == this->m_hWnd)
{
//说明自己在顶层
}
else
{
//被覆盖 设置不重绘
}
------解决方案--------------------
每次绘制完,就把窗口内容保存下来, 当有窗口在上方移动时 就把保存的内容贴回去,
------解决方案--------------------
OnPaint 的重绘不是你说的重绘!
使用缓冲区机制。

当你需要更新客户区的时候,绘制到缓冲区。
然后翻转到客户区。