1. 程式人生 > >Win10無邊框對話框加陰影

Win10無邊框對話框加陰影

窗口陰影

網上給無邊框加陰影就是那個著名的類WndShadow,在XP上直接使用,很方便。但是Win10上直接用沒有效果。

將對話框的style設為popup,title bar設為false。然後添加如下代碼:

int CMFCApplication1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	//初始化陰影窗口
	if (CDialogEx::OnCreate(lpCreateStruct) == -1)
		return -1;

	LONG styleValue = ::GetWindowLong(m_hWnd, GWL_STYLE);
	styleValue &= ~(WS_CAPTION | WS_EX_CLIENTEDGE | WS_BORDER);
	::SetWindowLong(m_hWnd,GWL_STYLE,styleValue|WS_CLIPSIBLINGS|WS_CLIPCHILDREN);

	WndShadow.Create(m_hWnd);
	WndShadow.SetSize(0);
	WndShadow.SetPosition(0, 5);
	
	return TRUE;
}
void CMFCApplication1Dlg::OnNcCalcSize(BOOL bCalcValidRects, 
                          NCCALCSIZE_PARAMS* lpncsp)
{
	// TODO: 在此添加消息處理程序代碼和/或調用默認值
	lpncsp->rgrc[0].top    -= 7;//上邊欄
        // lpncsp->rgrc[0].bottom = 0;//底邊欄 
        // lpncsp->rgrc[0].left   = 0;//左邊欄 
        // lpncsp->rgrc[0].right  = 0;//右邊欄 

	CDialogEx::OnNcCalcSize(bCalcValidRects, lpncsp);
}


Win10無邊框對話框加陰影