먼저 Kurapa.com 주인도 아닌데. 이렇게 올려도 될지 모르겠군요 오늘 가입한 selee 라고합니다.
Jean-Edouard Lachand-Robert 의 BitmapToRegion() 라는 코드를 이용하여 간단히 만든 부정형(non-rectangle: 아무렇게나 모양) 윈도우 입니다. 클릭해서 드래그하면 드래그됨.
CD모양의 그림의 RGB(1,0,1) 픽셀이 날라가는 부분입니다.
VisualC++6.0 으로 만들었는데..(2004) 아마 대부분의 Compiler에서 돌아갈것 입니다.
[주요부분]
case WM_CREATE: ////////////////////////////////////// // MemDc & bitmap create hdc = GetDC(hWnd); hdcRgn = CreateCompatibleDC(hdc); // alloc Mem dc hbmRgn = LoadBitmap((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); hRgn = BitmapRegion(hdcRgn,hbmRgn, RGB(1,0,1)); SetWindowRgn(hWnd,hRgn,TRUE); 여기서 region 먼저 만들어 버림.
만약 시시각각 변하는 윈도우를 만들고 싶다면 Region set 하는 Win32 API가 상당히 느리니. 다른 Trick을 쓰시길
// 정상적인 Paint 부분 case WM_PAINT: { hdc = BeginPaint(hWnd, &ps);
RECT rt; GetClientRect(hWnd, &rt); HBITMAP hbmOld =(HBITMAP)SelectObject(hdcRgn,hbmRgn); // asign bitmap to memdc(hdcRgn) BitBlt(hdc, rt.left, rt.top, rt.right , rt.bottom, hdcRgn, 0,0,SRCCOPY); SelectObject(hdcRgn,hbmOld); // release bitmap EndPaint(hWnd, &ps); } return 0;
HRGN BitmapRegion (HDC hdc, HBITMAP hBmp,COLORREF cTransparentColor) Jean-Edouard Lachand-Robert(http://www.geocities.com/Paris/LeftBank/1160/resume.htm), June 1998. 이사람이 만들어서 어디에 올린건데. GDI해제를 끝부분에 하지 않더군요(오래 계속 쓰면 컴퓨터 이상해짐) 약간 고쳤음.
프로젝프파일째로 올렸읍니다(exe포함) region32.zip
Tags: 윈도우즈
|