首先,这是我想要实现的理想外观,但白色区域的圆角,并且没有完全成功
为了实现这一点,我已经确定了要变为白色的矩形的屏幕坐标,并创建了一个静态文本窗口并使用以下方法设置了一个圆角区域:
case WM_CREATE:
SetRect( &Rect,... );
hSubWnd = CreateWindow("STATIC",NULL,SS_LEFT|WS_CHILD|WS_VISIBLE,Rect.left,Rect.top,(Rect.right-Rect.left),(Rect.bottom-Rect.top),hFrame,(HMENU)NULL,NULL,NULL);
hrgn = CreateRoundRectRgn(Rect.left, Rect.top, Rect.right, Rect.bottom,15,15);
SetWindowRgn(hSubWnd,hrgn,TRUE);
然后为上面的区域设置着色,我使用了以下内容:
case WM_CTLCOLORSTATIC:
//SetBkColor((HDC)wParam, RGB(0,0,0));
if((HWND)lParam == hSubWnd)
{
SetBkMode((HDC)wParam,TRANSPARENT);
return (INT_PTR )CreateSolidBrush(RGB(255,255,255));
}
break;
这使得该区域颜色为白色,但白色区域没有像我预期的那样变圆。以下是我的问题:
1-如何使 SetWindowRgn() 为子控件工作?我的方法是正确的还是我需要采取其他方式来实现我的目标(四舍五入孩子的角落)?
2-父窗口启用了 WS_CLIPCHILDREN 样式,这意味着我在主窗口的 WM_PAINT 中所做的任何事情都不会绘制子窗口区域。我还需要将一些文本放在子窗口的白色区域中。我在哪里做呢?TextOut() 似乎在 WM_CTLCOLORSTATIC 处理程序中不起作用。
我是否应该将孩子的窗口类从“STATIC”更改为某个自定义类并为孩子编写 WindowProc(),其中我处理 WM_PAINT 以在其上绘制文本?
请提供您的建议。