본문 바로가기

Programming/Windows API

DrawFrameControl - Frame Control 그리기

DrawFrameControl함수는 인수로 지정한 다양한 형태의 Control을 그려 표시합니다.

Declare Function DrawFrameControl Lib "user32" Alias "DrawFrameControl" (ByVal hDC As Integer, ByRef lpRect As RECT, ByVal un1 As Integer, ByVal un2 As Integer) As Integer
▶VB.NET 선언

[DllImport("user32")]
public static extern int DrawFrameControl(int hDC, ref RECT lpRect, int nu1, int un2);
▶C# 선언

DrawFrameControl함수의 첫번째 인수로는 Control을 표시할 Device Context를 기술해야 합니다.

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

두번째 인수는 Control을 그릴 위치및 크기에 대한 구조체를 기술합니다. 이 구조체는 예를 들어 왼쪽 10부터 가로 10, 상단 10부터 세로 10만큼의 위치와 크기로 Control을 생성하고자 한다면 다음과 같이 선언될 수 있습니다.

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 = 50
norRECT.bottom = 50

▶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 = 50;
norRECT.bottom = 50;

▶C#

DrawFrameControl함수의 세번째 인수 어떠한 Control모양을 그려낼 것인지 지정하는 것이며 다음과 같은 상수가 사용됩니다.

 상수  값  설명
 DFC_CAPTION  1  Titlebar 관련
 DFC_MENU  2  Menu 관련
 DFC_SCROLL  3  Scrollbar 관련
 DFC_BUTTON  4  Button 관련

네번째 인수는 세번째 인수로 무엇을 지정했는지에 따라 달라집니다.

 상수  값  설명
 DFCS_CAPTIONCLOSE  0  닫기 모양
 DFCS_CAPTIONMAX  2  최대화 모양
 DFCS_CAPTIONMIN  1  최소화 모양
 DFCS_CAPTIONRESTORE  3  원상태복귀 모양
 DFCS_CAPTIONHELP  4  도움말 모양

DFC_CAPTION(1) - 16진수(VB.NET : &H, C# : 0x)

 상수  값  설명
 DFCS_MENUARROW  0  Sub menu 지시모양
 DFCS_MENUCHECK  1  선택 Check 표시
 DFCS_MENUBULLET  2  원형 분류 표시
 DFCS_MENUARROWRIGHT  4  Sub menu(아랍계)

DFC_MENU(2) - 16진수(VB.NET : &H, C# : 0x)

 상수  값  설명
 DFCS_SCROLLUP  0  Scrollbar의 위쪽이동 화살표
 DFCS_SCROLLDOWN  1  Scrollbar의 아래쪽 화살표
 DFCS_SCROLLLEFT  2  Scrollbar의 왼쪽 화살표
 DFCS_SCROLLRIGHT  3  Scrollbar의 오른쪽 화살표

DFC_SCROLL(3) - 16진수(VB.NET : &H, C# : 0x)

 상수  값  설명
 DFCS_BUTTONCHECK  0  Check Box
 DFCS_BUTTONRADIOIMAGE  1  Radio Button Image
 DFCS_BUTTONRADIOMASK  2  Radio Button Check Image
 DFCS_BUTTONRADIO  4  Radio Button
 DFCS_BUTTON3STATE  8  상태 Button
 DFCS_BUTTONPUSH  10  Push Button

DFC_BUTTON(4) - 16진수(VB.NET : &H, C# : 0x) 다음 인수는 네번째 인수에 결합될 수 있는 상수입니다.
 
 상수  값  설명
 DFCS_ADJUSTRECT  2000  빈 영역
 DFCS_CHECKED  400  선택된 상태
 DFCS_FLAT  4000  평면모양
 DFCS_HOT  1000  Hot Track형
 DFCS_INACTIVE  100  사용불가능 상태
 DFCS_MONO  8000  1차원단색면 표시
 DFCS_PUSHED  200  눌러진 상태
 DFCS_TRANSPARENT  800  바탕화면 미선택 상태

DFC_BUTTON(4) - 16진수(VB.NET : &H, C# : 0x) 위 인수를 토대로 Program의 Form에 구조체의 위치와 크기에 따른 Radio Button을 생성해 보려면 DrawFrameControl함수는 다음과 같이 호출될 수 있습니다.

DrawFrameControl(GetDC(Me.Handle), norRECT, 4, &H0)
▶VB.NET 호출

DrawFrameControl(GetDC((int)this.Handle), ref norRECT, 0x4, 0x0);
▶C# 호출

DrawFrameControl 함수는 실행에 실패하는 경우 0값을 반환합니다.