Rover12421's Blog

The End.

透明窗体

可以用 WS_EX_LAYERED 来设置透明窗体的样式。

在 OnInitDialog() 初始化里添加代码。

   1: SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^WS_EX_LAYERED);
   2:     ::SetLayeredWindowAttributes(this->m_hWnd, 0, 255, 2);
   3:     m_Slider.SetRange(0, 255);
   4:     m_Slider.SetPos(255);

用了Silder控件来调节窗体的透明。下面就响应Silder控件的 NM_CUSTOMDRAW 消息。

   1: void CDlgWindowsDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
   2: {
   3:     LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
   4:     // TODO: Add your control notification handler code here
   5:     int nPos = m_Slider.GetPos();
   6:     ::SetLayeredWindowAttributes(this->m_hWnd, 0, nPos, 2);
   7:     *pResult = 0;
   8: }

在消息响应函数里用 SetLayeredWindowAttributes 来调节窗体的透明。

Comments