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