VC 使窗口透明的2种方法

1、

	CRect rcWindow;
	GetWindowRect(&rcWindow);

	CRect rcClient;
	GetClientRect(&rcClient);
	ClientToScreen(&rcClient);

	CRgn rgnWindow;
	rgnWindow.CreateRectRgn(rcWindow.left, rcWindow.top, rcWindow.right, rcWindow.bottom);

	CRgn rgnClient;
	rgnClient.CreateRectRgn(rcClient.left, rcClient.top, rcClient.right, rcClient.bottom);

	CRgn rgn;
	rgn.CreateRectRgn(0, 0, 1, 1);
	// 去掉客户区 [10/11/2011 Administrator]
	rgn.CombineRgn(&rgnWindow, &rgnClient, RGN_DIFF);

	SetWindowRgn((HRGN)rgn, TRUE);

用这种方法,会使对话框边框会丢失圆角风格


2、

	// 需要给窗口增加WS_EX_LAYERED属性 [10/11/2011 Administrator]
	// RGB(1, 2, 3)为透明色 [10/11/2011 Administrator]
	SetLayeredWindowAttributes(RGB(1, 2, 3), 128, LWA_COLORKEY/*|LWA_ALPHA*/);
SetLayeredWindowAttributes的第一个参数为透明色,窗口上所有颜色为透明色的区域,都会变成透明,可以在OnEraseBkgnd里,将指定区域绘成透明色,以达到指定区域透明的效果,前提是第三个参数含有LWA_COLORKEY标志位

第二个参数是透明度,在第三个参数含有LWA_ALPHA标志时有效,这时,整个窗口都会变为透明

你可能感兴趣的:(VC 使窗口透明的2种方法)