mfc设置窗口透明,设置控件不透明
时间: 2024-09-23 08:10:07 浏览: 102
MFC半透明窗体 不透明控件
5星 · 资源好评率100%
在MFC(Microsoft Foundation Classes)中,如果你想让窗口变得半透明或全透明,可以利用Windows API中的`SetWindowLong`函数来设置窗口风格,使其支持WS_EX_TRANSPARENT属性。首先,你需要创建一个具有此属性的`WMPLAyerCtrl`类,并重写`OnPaint`和`OnEraseBkgnd`消息处理函数。
1. 设置窗口透明:
```cpp
CWnd* hWnd = CreateWindowEx(WS_EX_TRANSPARENT, ...); // 创建带WS_EX_TRANSPARENT的窗口
```
然后,在窗口类中覆盖`OnPaint`方法,使用`HBRUSH`透明刷来绘制背景:
```cpp
void CYourWindowClass::OnPaint() {
CPaintDC dc(this);
HDC hdc = dc.GetSafeHdc();
HBITMAP hBitmap = (HBITMAP)GetStockObject(NULL_PEN);
TransparentBlt(hdc, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), NULL, 0, 0, hBitmap);
DeleteObject(hBitmap);
CWnd::OnPaint(); // 调用基类方法完成剩余的绘图
}
```
2. 控件不透明:
如果你只想让窗口的一部分(如控件)保持常规颜色,可以在创建控件时指定其`WS_CLIPCHILDREN`属性,这样它的背景就不会被窗口的透明效果影响:
```cpp
CButton* button = new CButton(pDX, IDC_BUTTON1, "...");
button->CreateWindowEx(WS_EX_CLIENTEDGE | WS_CLIPCHILDREN, ...);
```
阅读全文