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标志时有效,这时,整个窗口都会变为透明