Programming/Windows API
DrawEdge은 Window에 4각형 모양의 테두리를 그리는 함수 입니다.

Declare Function DrawEdge Lib "user32" Alias "DrawEdge" (ByVal hdc As Integer, ByRef qrc As RECT, ByVal edge As Integer, ByVal grfFlags As Integer) As Integer
▶VB.NET 선언

[DllImport("user32")]
public static extern int DrawEdge(int hdc, ref RECT qrc, int edge, int grfFlags);
▶C# 선언

DrawEdge의 첫번째 인수는 테두리를 그릴 Window창이나 화면의 Device Context를 기술합니다.

[Develop/Windows API] - GetDC - Window및 Control의 Device Context 구하기
[Develop/Windows API] - GetWindowDC - 현재 Windows화면의 Device Context 구하기

두번째 인수로는 테두리를 그릴 위치와 크기를 지정하는 RECT구조체를 전달해야 합니다. 이 구조체선언은 만일 테두리를 왼쪽 10부터 가로 100까지 위쪽 10부터 세로 100까지 그려낼려면 다음과 같이 선언될 수 있습니다.

Public Structure RECT
    Public left As Integer
    Public top As Integer
    Public right As Integer
    Public bottom As Integer
End Structure

Dim norRECT As RECT
norRECT.left = 10
norRECT.top = 10
norRECT.right = 100
norRECT.bottom = 100

▶VB.NET

public struct RECT{
   public int left;
   public int top;
   public int right;
   public int bottom;
}

RECT norRECT = default(RECT);
norRECT.left = 10;
norRECT.top = 10;
norRECT.right = 100;
norRECT.bottom = 100;

▶C#

DrawEdge의 세번째 함수는 테두리의 형태를 지정하는 부분으로 다음과 같은 상수를 사용할 수 있습니다.

 상수  값(VB/C#)  설명
 BDR_RAISEDINNER  4  안쪽 테두리 표현
 BDR_SUNKENINNER  8  안쪽 테두리 표현

VB.NET은 &H로 C#은 0x로 16진수를 표시합니다.

마지막 인수는 테두리를 그리는 형태를 지정하는 것으로 다음 상수를 사용할 수 있습니다.

 상수  값  설명
 BF_ADJUST  2000  빈공간
 BF_BOTTOM  8  하단 테두리
 BF_BOTTOMLEFT  8, 1  하단, 왼쪽 테두리
 BF_BOTTOMRIGHT  8, 4  하단, 오른쪽 테두리
 BF_DIAGONAL  10  대각선형
 BF_DIAGONAL_ENDBOTTOMLEFT  10, 8, 1  대각선형(상단오른쪽부터 하단왼쪽)
 BF_DIAGONAL_ENDBOTTOMRIGHT  10, 8, 4  대각선형(상단왼쪽부터 하단오른쪽)
 BF_DIAGONAL_ENDTOPLEFT  10, 2, 1  대각선형(하단오른쪽부터 상단왼쪽)
 BF_DIAGONAL_ENDTOPRIGHT  10, 2, 4  대각선형(하단왼쪽부터 상단오른쪽)
 BF_FLAT  4000  평면
 BF_LEFT  1  왼쪽 테두리
 BF_MIDDLE  800  내부를 채움
 BF_MONO  8000  1차원
 BF_RECT  1, 2, 4, 8  사각형 테두리
 BF_RIGHT  4  오른쪽 테두리
 BF_SOFT  1000  BOTTON형
 BF_TOP  2  상단 테두리
 BF_TOPLEFT  2, 1  왼쪽, 상단 테두리
 BF_TOPRIGHT  2, 4  오른쪽, 상단 테두리

Comma는 or단위 처리입니다.

상위 인수를 토대로 Form위에 테두리를 그리면 DrawEdge함수는 다음과 같이 호출될 수 있습니다.

DrawEdge(GetDC(Me.Handle), norRECT, &H1, &H1 Or &H2 Or &H4 Or &H8)
▶VB.NET 호출

DrawEdge(GetDC((int)this.Handle), ref norRECT, 0x1, 0x1 | 0x2 | 0x4 | 0x8);
▶C# 호출
1 0