所谓的擦除技术 你不主动清除原来的图像 必然会导致你说的问题
你的背景如果是纯色那相当的好办 现把你绘制clock的区域刷成纯色 然后在绘制clock
为了避免闪烁 可以用双缓冲的办法如果背景本来就是一张图片 那就稍微复杂点了 办法是 找准clock位于背景图片的位置 然后在背景图片上扣出来对应的图块 先贴图块再画你的clock 也最好双缓存具体代码 如果你对GDI+熟悉的话应该知道怎么写没有什么更好的办法了 如果你的clock图片无需根据时间变化指针什么的 也可以要求美工 必须做全部纯色的图片不许有带透明度的部分。
你的背景如果是纯色那相当的好办 现把你绘制clock的区域刷成纯色 然后在绘制clock
为了避免闪烁 可以用双缓冲的办法如果背景本来就是一张图片 那就稍微复杂点了 办法是 找准clock位于背景图片的位置 然后在背景图片上扣出来对应的图块 先贴图块再画你的clock 也最好双缓存具体代码 如果你对GDI+熟悉的话应该知道怎么写没有什么更好的办法了 如果你的clock图片无需根据时间变化指针什么的 也可以要求美工 必须做全部纯色的图片不许有带透明度的部分。
解决方案 »
- 如何讲unsinged char* 转 unsigned char[],在线等!
- CreateProcess(rundll32.exe 的 问题 ?
- 请问:如果用多线程,在一个线程中用阻塞的Csocket,是不是只会阻塞住这一个线程而不影响其它的?程序主界面不受影响?
- 题目意思不好说清,看了帖子就明白了。各位大虾支支招,18日前急用......小弟谢过先!!
- 对于个*.avi或是*.mpg的文件,怎么得知解码后图像格式和声音格式?
- 怎样让我的字体闪烁呢?
- 怪了! IE 问题,请帮忙!
- 问组件
- 寻找在南京用C++的朋友?
- 如何读取内存的数据?
- OpenCV中IplImage图像格式与BYTE图像数据的转换问题?
- 注册64位dll出错
处理过WM_ERASEBKGAND消息么?
只是在最小化的时候会清除,但是鼠标靠近时没有清除。
我在OnMouseMove中调用 ::SendMessage(m_hWnd,WM_ERASEBKGND,0,0);也没效果
其实还是有背景,假如说你的dialog上面的背景是一个萌妹子===然后dialog上面有一个按钮 按钮是完全透明的。那么其实相当于按钮的背景就是萌妹子..保存这个区域的位图就是按钮的背景了 以后画图先画这个萌妹子..然后就能实现绘制多长半透明png 这种情况,我做过 不知道我表述清楚木有。
我主动调用也没起作用。但是最小化后还原又可以...
在OnMouseMove中又不会擦除背景。另外,像360或扣扣的桌面应用,右上角的按钮效果是怎么实现的?
以上是我做的一个小程序中的一部分,就是我说的那样,先刷一次背景。你可以手动在画png的时候先画一次背景 不需要调WM_ERASEBKGND
{
CRect rect; this->GetWindowRect(&rect);
GetParent()->ScreenToClient(&rect);
GetParent()->InvalidateRect(&rect);
}另外好像GDI+画透明PNG是有问题的, 具体你上网查一下, 有替代的源码。
第一种,先给父窗口发一个消息,传一个HDC参数,让父窗口把他的绘制放到HDC上,这样子窗口绘制时,先绘制 那部分背景,再绘制自己。
第二种,直接用DirectUI的方式来做。
这2种方式都支持换背景图。
但是图片换的接口肯定你提供 你能知道换了图片,换了什么图片。DirectUI的思想都是这么写的。
我靠,,这有效是没错,,遇到特殊情况闪死你~~sighshadow兄弟,,明白的人都为你感觉到亏··