Title: SetWindowRgn API
1??????????
?????
2SetWindowRgn API
- ?? SetWindowRgn ???????????
// ??????????? HRGN rgn rgn
CreateEllipticRgn(0,0,200,100) // ????
region SetWindowRgn(rgn,TRUE)
// ?????????
????,???????
????
3???? ? Dialog ??
BOOL CTriangleDemo2DlgOnInitDialog() CDialog
OnInitDialog() // ????????? HRGN rgn rgn
CreateEllipticRgn(0,0,200,100) // ????
region SetWindowRgn(rgn,TRUE)
// ????????? return TRUE
? InitDialog ???
void CTriangleDemo2DlgOnPaint() //?????
CDialogOnPaint()
4 5???? Drag ???
???????function ??
1. ?? Messages
2
void CTriangleDemo2DlgOnLButtonDown(UINT
nFlags, CPoint point) //
???????????
6???????? -- OnLButtonDown
// ???? ???????? void CTriangleDemo2DlgOnLButt
onDown(UINT nFlags, CPoint point) if (
!(m_dwFlags DRAGGING) )
// ????? dragging
?? m_pntMouse point m_dwFlags DRAGGING
// ????? Drag SetCapture() //
???????? CDialogOnLButtonDown(nFlags,
point)
7???????? -- OnLButtonUp
//???? ???????? void CTriangleDemo2DlgOnLButto
nUp(UINT nFlags, CPoint point) if (
m_dwFlags DRAGGING )
// ???? dragging
?? m_dwFlags DRAGGING ReleaseCapture()
// release ???? CDialogOnLButtonUp
(nFlags, point)
8???????? -- OnMouseMove
// ???? ??????, ??????? void CTriangleDemo2Dlg
OnMouseMove(UINT nFlags, CPoint point) if (
m_dwFlags DRAGGING )
// ???? Dragging ??,??????? RECT
rect GetWindowRect( rect ) // ??????
// ???????? rect.left
point.x - m_pntMouse.x rect.top point.y
- m_pntMouse.y SetWindowPos( NULL,
rect.left, rect.top, 0, 0,
SWP_NOZORDER SWP_NOSIZE ) CDialogOnMou
seMove(nFlags, point)
?????
?????????
??????? z-order (?? ignore)
9??
HRGN rgn INT num1 POINT points10 num0
10 points0.x 304 points0.y
24 points1.x 232 points1.y
160 points2.x 64 points2.y
160 points3.x 192 points3.y
264 points4.x 136 points4.y
392 points5.x 304 points5.y
336 points6.x 456 points6.y
392 points7.x 424 points7.y
264 points8.x 552 points8.y
160 points9.x 384 points9.y 160 rgn
CreatePolyPolygonRgn( points, num, 1, WINDING
) SetWindowRgn(rgn, true)
?????
10?BITMAP?????
- ???????mask, ?? Region ??
?????
Mask ??
?????????
11?BITMAP?????
// ????
// Step 1 ???? HBITMAP hBmp (HBITMAP)
LoadImage( AfxGetInstanceHandle(),
"Rgn.bmp", IMAGE_BITMAP, 0,
0, LR_LOADFROMFILE ) if ( hBmp NULL
) return TRUE // Step 2???? Region, ???????
(transparent) HRGN hRgn CreateRgnFromFile(
hBmp, RGB(255,0,0) ) // Step 3?????????????
SetWindowPos( NULL, 0, 0, m_dwWidth, m_dwHeight,
SWP_NOZORDER
SWP_NOMOVE ) // Step 4???????
SetWindowRgn( hRgn, TRUE ) //
End
12CreateRgnFromFile
- ?????????BMP ??????
- ????? SOURCE CODE
13?????????
14???????? Device Context
- ????? window client area ??????? ? ???? DC
(Device Context)
???????
???????? (??,???)???
DC
????
GDI (?????? API)
DC
15MFC? CDC ??
?? m_hDC ???????? Device m_AttributeDC?? DC
???
CDC ???????
CDC
CClientDC
CWindowDC
CPaintDC
CMetaFileDC
?? WM_Paint Message (? OnDraw ??? ???)
????? Client area
????? ??(Frame ? control)
??????? (??????)
16SelectObject function
- ???????????
- Brush ? ?????
- Pen ? ????(??)
- Bitmap
- Font
- Rgn
- Palette (???)
17??????????????DC
// Step 4 ???? CDC dc GetDC()
// ???? client area ? DC m_dcBkGrnd
CreateCompatibleDC( dc-gtm_hDC ) // ????memory
DC ReleaseDC( dc )
// ????,?? release ? DC // ?????????DC
SelectObject( m_dcBkGrnd, hBmp )
18// ????
// Step 1 ???? HBITMAP hBmp
(HBITMAP)LoadImage( AfxGetInstanceHandle(),
"Rgn.bmp", IMAGE_BITMAP, 0,
0, LR_LOADFROMFILE ) if ( hBmp NULL
) return TRUE // Step 2???? Region, ???????
(transparent) HRGN hRgn CreateRgnFromFile(
hBmp, RGB(255,0,0) ) // Step 3?????????????
SetWindowPos( NULL, 0, 0, m_dwWidth, m_dwHeight,
SWP_NOZORDER
SWP_NOMOVE ) // Step
5??????? SetWindowRgn( hRgn, TRUE ) //
End
??????????
// Step 4 ???? CDC dc GetDC()
// ???? client area ? DC m_dcBkGrnd
CreateCompatibleDC( dc-gtm_hDC ) // ????memory
DC ReleaseDC( dc )
// ????,?? release ? DC // ?????????DC
SelectObject( m_dcBkGrnd, hBmp )
19????
void CTriangleDemo2DlgOnPaint() // ??????
client ?? DC CPaintDC dc(this) // device
context for painting // ??????,???? if (
m_dcBkGrnd ) BitBlt( dc.m_hDC, 0, 0, m_dwWidth,
m_dwHeight,
m_dcBkGrnd, 0, 0, SRCCOPY )
20- Window Property ?????? border
- ?????
???????
21Appendix BCB ???
include ltwinuser.hgt //Is user for
SetWindowRgn()include ltwingdi.hgt //Is user
for CreatePolygonRgn() void __fastcall
FormNameFormCreate(TObject Sender) HRGN
Region POINT Points4 //Define the
points accross down Points0 Point(100 ,
30 ) Points1 Point(200 , 200 )
Points2 Point(0 , 200 ) Points3
Point(105 , 30 ) //Define the region
Region CreatePolygonRgn(Points, 4,
ALTERNATE) //Set the window to have the
above defined region SetWindowRgn(Handle,
Region , True)
- ????
- VB example
- Delphi example
??????????http//ftp.newave.net.au/akia/rgn.htm
C20Example
22????
- http//visualcpp.net/index.php?qID31
- ????????, ??????? P.P.12-4
23??
- ???? include stdafx.h ???, ?????
- fatal error C1010 ???????????????????????
?????. - ???? precompiled Header ??
24(No Transcript)