对子窗口理解出现一些误区,导致实现跟随其它窗体的透明窗体时走了很多弯路。
1、有父窗口不一定具有WS_CHILD属性,父子窗口可以保证Z轴顺序,也就是保证子窗口在父窗口上面。
2、Layered Window不能有WS_CHILD属性,但是可以有父窗口,所以也能实现透明和异形效果。
3、Z轴顺序用父子窗口关系实现,透明窗体用Layered Window实现,就能很容易实现透明子窗体。
4、CWnd::Create函数里的类名用AfxRegisterWndClass注册,不能用RegisterClass.
关键代码:
BOOL MyWnd::Create(HWND hParent)
{
HINSTANCE hInst = GetModuleHandle(NULL);
LPCSTAR clsName = AfxRegisterWndClass(CS_HREDRAW|CS_WREDRAW,0,(HBRUSH)GetStockObject(BLACK_BRUSH);

本文介绍了在VC中创建透明子窗体时的一些常见误区及解决方案。通过理解Z轴顺序与WS_CHILD属性的关系,以及利用Layered Window实现透明效果,可以轻松创建透明子窗体。关键代码包括使用CWnd::CreateEx设置WS_EX_LAYERED和WS_EX_TOOLWINDOW属性,以及调用SetLayeredWindowAttributes设置透明度。
最低0.47元/天 解锁文章
1434

被折叠的 条评论
为什么被折叠?



