InvalidRect就可以清除上一次画的东西啊合理设置WS_CLIPSIBLINGS和WS_CLIPCHILDREN
WS_CLIPCHILDREN:主要运用与设置主窗口风格,当主窗口发生绘制事件的时候,其子窗口不需要绘制,如果该子窗口控件需要绘制,需要手动刷新,值得注意的是手动刷新的子控件会发生闪烁
WS_CLIPSIBLINGS:主要运用与同级重叠窗口(即:同属一父窗口的子窗口控件),具有该属性的窗口控件在绘制的时候,不绘制同级窗口的重叠部分。以第一个效果图片为例,“播放设置”设置该属性,在绘制的时候,不绘制同级对话框窗口区域部分。
在MFC中,弹出式窗口都会默认拥有WS_CLIPSIBLINGS,并且该属性无法移除。可同通过SetWindowLong来设置这两个属性
WS_CLIPCHILDREN:主要运用与设置主窗口风格,当主窗口发生绘制事件的时候,其子窗口不需要绘制,如果该子窗口控件需要绘制,需要手动刷新,值得注意的是手动刷新的子控件会发生闪烁
WS_CLIPSIBLINGS:主要运用与同级重叠窗口(即:同属一父窗口的子窗口控件),具有该属性的窗口控件在绘制的时候,不绘制同级窗口的重叠部分。以第一个效果图片为例,“播放设置”设置该属性,在绘制的时候,不绘制同级对话框窗口区域部分。
在MFC中,弹出式窗口都会默认拥有WS_CLIPSIBLINGS,并且该属性无法移除。可同通过SetWindowLong来设置这两个属性
我做DirectUI的,我理解你说的,但是还是没有明白你遇到了什么问题
你要是性能问题,恐怕很难解决,因为这个是Layered Window的问题。
你可以试一试在Win7上面,自绘,用Win7SDK加上这个非客户区边缘试一试。你的图片是怎么做出来的?另外,Win7那个有毛玻璃的效果了。不是简单的透明,据说要进行高斯变换。
http://download.csdn.net/detail/zh359780498/3940630
[/Quote]我那个图片就是两张处理好了的半透明PNG图片,至于毛边效果也是在PS里面画好了的
还是换VS吧, VC6 太古老了
关于边缘底色的我有个办法解决,因为是圆形,先创建一个跟按钮一样大小的圆形区域,在这个区域内的保持原色,区域外的用窗口透明色。
前断时间做一个界面的代码:
CRgn rgn;
rgn.CreateEllipticRgn(0, 0, m_iWidth, m_iHeight);
for(int i = 0; i < m_iWidth; ++i)
for(int j = 0; j < m_iHeight; ++j)
{
if(!rgn.PtInRegion(i, j))
MemDC.SetPixel(i, j, RGB(COLOR_KEY_TRANSPARENT_R, COLOR_KEY_TRANSPARENT_G, COLOR_KEY_TRANSPARENT_B));
}
1. SetWindowRgn
2. 先PS好按钮图像, TransparentBlt贴图
3. 通过掩码图片,用BitBlt进行位操作贴图
第一种办法是重载CStatic,在他的OnPaint()函数内绘制按钮。
绘制之前,创建一个缓冲区dcBuf,GetDC获取主窗口的CDC,将主窗口的画面拷贝到dcBuf保存。
然后将dcBuf当成背景使用Alpha混合绘制到CPaintDC,接着再绘制自己想要的东西,让人产生一种透明的假象,看能不能达到楼主想要的结果。第二种办法是将按钮绘制到透明窗口,我贴一下以前实现透明窗口的核心代码
void CTransparentWindow::Transparent(){ SetWindowLong(GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)^0x80000); HINSTANCE hInst = LoadLibrary(_T("User32.DLL")); if (hInst) { typedef BOOL (WINAPI *MYFUNC)(HWND, COLORREF, BYTE, DWORD); MYFUNC func = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes"); if(func != NULL) func(GetSafeHwnd(), RGB(255,255,255), m_bDiaphaneity, 2); FreeLibrary(hInst); }}
地址:http://d.1tpan.com/tp0612602224
还有用gdi+,使用到Alpha通道的颜色,也能达到半透明的效果
效率没你说的那么糟糕啊,绘图线程每30MS全局更新一次图像.800*600的窗体I5-460的CPU占用也就0~2%之间.另外:
http://download.csdn.net/download/zh359780498/3938368
这个资源我这边下载不动,LZ可不可以换个网盘或者发我邮箱[email protected].谢谢.
你的创意不错,我有空学习学习,暂时就看过你的加密方法。
我的没用Button控件。