'gdi32'에 해당되는 글 12건

Programming/Windows API
1. API

API는 Application Programming Interface의 약자로 Software개발시에 특정기능을 구현하려고 처음부터 새로 Program을 작성하는 것이 아니라 다른 Library에 의해 이미 구현되어 있는 기능을 개발하고자 하는 Software에 손쉽게 추가할 수 있는 것을 말합니다.

예를 들어 영어사전이나 국어사전 Program을 구현하고자 하는 경우 Naver나 Google등에서 제공하는 API를 끌어다 쓰면 단 몇줄 만으로도 훌륭한 사전 Program을 개발할 수 있게 되는 것입니다.

여기서 Windows API는 System에 대한 각종 정보를 알아내거나 운영체제(OS : 여기서는 Windows)의 특정 기능을 Program안에서 구현하고자 할때마다 편리하고도 간단하게 작업할 수 있는 OS Library입니다.

2. API 구현을 위한 Windows Library종류및 역활

 Library 파일  역활
 Advapi32.dll  Registry및 보안 관련
 Comdlg32.dll  대화상자 관련
 Gdi32.dll  GDI및 Graphic 관련
 Kernel32.dll  Windows Kernel 관련
 Shell32.dll  명령어 해석 관련
 User32.dll  사용자 Interface 관련
 Lz32.dll  압축 관련
 Netapi32.dll  Network 관련
 Winmm.dll  Multimedia 관련
 Winspool.drv  Print spoller 관련

위 File명에서 뒤의 32는 32bit를 의미합니다. 윈도우 3.1이하에서는 16bit였다가 95부터 32bit로 바뀌기 시작해 File명뒤에 32라는 숫자가 붙게 된것입니다.

3. API 선언및 사용

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer

<DllImport("user32.dll")> _
Friend Shared Function GetKeyState(ByVal keyCode As Integer) As Short
End Function

Private Declare Sub ReleaseCapture Lib "user32" ()

▶VB.NET 선언

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern void ReleaseCapture();

▶C# 선언

VB.net과 C#에서 gid32와 user32 Library를 통해 CreateRoundRectRgn및 ReleaseCapture함수를 호출하고 있습니다. 이때 API선언부분에서 Function(VB.net)과 int(C#)은 해당 함수가 수행되고 난 후 특정값을 반환하다는 것을 의미하고 있으며 반면 Sub(VB.net)와 void(C#)은 반환하는 값이 없음을 의미합니다.

보시는 바와 같이 VB.NET에서나 C#에서나 Import를 쓰게 되면 호출하는 방식은 거의 비슷합니다. 하지만 명확한 구분을 위해서 나중에 API함수를 설명할때는 VB.NET부분에 Lib 형식으로 호출하는 방법을 기술할 것입니다.

예제에서 처럼 API함수를 정의한 후 해당 API의 함수 수행을 위해 각각의 Library File(예제에서는 gid32.dll 및 user32.dll)을 찾아야 하는데 이때 File을 찾는 순서는 다음과 같습니다.

(1) 현재 program이 실행중인 Folder에서 찾는다.
(2) C:\Windows\System32 Folder에서 찾는다.
(3) C:\Windows\System Folder에서 찾는다.
(4) C:\Windows Folder에서 찾는다.

만일 File이 특정위치에 있다는것을 알리려면 다음처럼 경로명까지 포함하여 선언하면 됩니다.

Private Declare Function CreateRoundRectRgn Lib "C:\Windows\System32\gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer, ByVal X3 As Integer, ByVal Y3 As Integer) As Integer
▶VB.NET

[System.Runtime.InteropServices.DllImport(@"C:\Windows\System32\gdi32.dll")]
private static extern int CreateRoundRectRgn(int X1, int Y1, int X2, int Y2, int X3, int Y3);
▶C#
0 0
Programming/Windows API
AddFontResource함수는 현재 System에 지정된 Font(글꼴)를 추가시키는 함수입니다.

Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int AddFontResource(string lpFileName);
▶C# 선언

AddFontResource(path)
▶VB.NET 호출

AddFontResource(path);
▶C# 호출

함수의 path인수에는 추가할 Font File을 지정합니다. 예를 들어 abc.TTF(true type) 라는 글꼴 File이 C:\ 에 위치해 있을경우 다음과 같이 함수를 호출할 수 있습니다.

AddFontResource("C:\abc.TTF")
▶VB.NET 호출

AddFontResource("C:\\abc.TTF");
▶C# 호출

글꼴이 추가되면 다른 Program에서도 추가된 글꼴을 사용할 수 있게 됩니다. 하지만 글꼴이 추가된 이후 해당 글꼴이 다른 위치로 이동되거나 삭제되는 일은 없어야 합니다.

AddFontResource함수가 성공적으로 글꼴을 추가시키면 추가된 글꼴의 수를 반환하지만 실패한 경우 0을 반환합니다.
0 0
Programming/Windows API
GetTextFace함수는 현재 Windows화면의 글꼴관한 정보를 반환합니다.

Declare Function GetTextFace Lib "gdi32" Alias "GetTextFaceA" (ByVal hdc As Integer, ByVal nCount As Integer, ByVal lpFacename As String) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int GetTextFace(int hdc, int nCount, StringBuilder lpStr);
▶C# 선언

GetTextFace함수의 첫번째 인수로는 현재 Windows화면의 Device Context를 지정해야 합니다.

[Develop/Windows API] - GetDesktopWindow - 현재 Windows 화면의 Handle구하기
[Develop/Windows API] - GetWindowDC - 현재 Windows화면의 Device Context 구하기

두번째 인수에서는 세번째 인수에 전달한 String변수의 크기값을 전달하며 세번째 인수에서는 확인된 글꼴이름이 저장될 변수를 전달합니다.

위 내용을 토대로 실제 함수를 작성해 보면 다음과 같이 될 것입니다.

Dim sName As String = Space(50)
GetTextFace(GetWindowDC(GetDesktopWindow()), 50, sName)
▶VB.NET 호출

StringBuilder sName = new StringBuilder(50);
GetTextFace(GetWindowDC(GetDesktopWindow()), 50, sName);
▶C# 호출
0 0
Programming/Windows API
MoveToEx함수는 그리기 위치의 시작점을 재설정하고 기존 위치값을 획득하는 함수입니다.

Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer, ByRef lpPoint As POINTAPI) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int MoveToEx(int hdc, int x, int y, ref POINTAPI lpPoint);
▶C# 선언

MoveToEx함수의 첫번째 인수는 시작점을 설정할 Device Context를 지정해야 합니다.

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

MoveToEx함수의 두번째와 세번째 인수는 시작점을 설정할 x와 y좌표를 설정하는 인수이며 네번째 함수는 시작점을 변경하기전의 기존시작점 위치를 얻기위한 구조체를 기술합니다.

예를 들어 시작점을 지정한 Device Context의 x - 50, y - 50으로 설정하고자 한다면 MoveToEx함수는 다음과 같이 호출될 수 있습니다.

Public Structure POINTAPI
        Public x As Integer
        Public y As Integer
End Structure

Dim ptapi As POINTAPI
MoveToEx(idc, 50, 50, ptapi)

▶VB.NET 호출

public struct POINTAPI
{
      public int x;
      public int y;
}

POINTAPI ptapi = new POINTAPI();
MoveToEx(idc, 50, 50, ref ptapi);

▶C# 호출
0 0
Programming/Windows API
Rectangle함수는 지정된 Device Context에 사각형 모양의 그림을 그립니다.

Declare Function Rectangle Lib "gdi32" Alias "Rectangle" (ByVal hdc As Integer, ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int Rectangle(int hdc, int x1, int y1, int x2, int y2);
▶C# 선언

Rectangle의 첫번째 인수는 실제 사각형이 그려질 Object의 Device Context를 기술하면 됩니다.

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

나머지 인수는 사각형이 어떻게 그려질지를 지정하는 것으로 예를 들어 왼쪽 10부터 가로 100만큼, 위쪽 20부터 세로 200만큼의 크기로 사각형을 그리려면 Rectangle함수는 다음과 같이 호출될 수 있습니다.

Dim idc As Integer
idc = GetDC(Me.Handle)

Rectangle(idc, 10, 20, 100, 200)

▶VB.NET 호출

int idc;
idc = GetDC((int)this.Handle);

Rectangle(idc, 10, 20, 100, 200);

▶C# 호출
0 0
Programming/Windows API
RoundRect함수는 모서리가 둥근 사각형을 그리는 함수입니다.

Declare Function RoundRect Lib "gdi32" Alias "RoundRect" (ByVal hdc As Integer, ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer, ByVal x3 As Integer, ByVal y3 As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int RoundRect(int hdc, int x1, int y1, int x2, int y2, int x3, int y3);
▶C# 선언

RoundRect함수의 첫번째 인수는 사각형을 그릴 Device Context를 기술합니다.

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

RoundRect함수의 나머지 인수는 사각형이 그려질 위치와 크기를 지정하는 인수인데 특히 마지막 2개의 인수는 기본적인 사각형에서 모서리가 얼마나 둥근형태로 나타날지를 지정하는 부분입니다.

만일 이 2개의 인수를 0으로 한다면 모서리에 각이 전혀 없는 형태로 나타나게 됩니다. 예를 들어 왼쪽 10부터 가로 100만큼, 위쪽 20부터 200만큼의 크기에 모서리 각도가 가로세로 20만큼 휘어진 사각형을 그리려면 RoundRect 함수는 다음과 같이 호출될 수 있습니다.

Dim idc As Integer
dc = GetDC(Me.Handle)

RoundRect(idc, 10, 20, 100, 200, 20, 20)

▶VB.NET 호출

int idc;
idc = GetDC((int)this.Handle);

RoundRect(idc, 10, 20, 100, 200, 20, 20);

▶C# 호출
0 0
Programming/Windows API
BitBlt함수는 인수로 지정된 해당 Device Context의 특정 영역을 Bitmap으로 복사하는 함수입니다.

Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As Integer, ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal dwRop As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int BitBlt(int hDestDC, int x, int y, int nWidth, int nHeight, int hSrcDC, int xSrc, int ySrc, int dwRop);
▶C# 선언

BitBlt의 첫번째 함수는 복사하여 붙여넣을 대상 Device Context를 기술하며 여섯번째 인수는 복사할 대상의 Device Context를 기술합니다.

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

두번째와 세번째 인수는 복사할 대상의 복사위치를 지정하는 인수이며 네번째, 다섯번째 인수는 복사대상의 복사영역을 지정하는 인수입니다.

일곱번째와 여덟번째 인수에는 복사된 Bitmap을 표시할 대상 Device Context의 위치를 지정합니다. 마지막 아홉번째 인수는 대상 Device Context에 복사된 Bitmap영역을 표시할때 어떠한 방식으로 표시할지를 지정하는 부분으로 다음과 같은 상수를 사용할 수 있습니다.

 상수  값  설명
 BLACKNESS  42  검은색으로 표시
 DSTINVERT  550009  대상을 반전
 MERGECOPY  C000CA  원본과 대상을 AND조합
 MERGEPAINT  BB0226  원본과 대상을 OR조합
 NOTSRCCOPY  330008  원본을 반전
 NOTSRCERASE  1100A6  원본과 대상을 OR조합/반전
 PATCOPY  F00021  pattern 복사
 PATINVERT  5A0049  대상을 pattern과 XOR조합
 PATPAINT  FB0A09  pattern을 반전과 OR조합
 SRCAND  8800C6  원본을 AND연산
 SRCCOPY  CC0020  복사
 SRCERASE  440328&  반전된 대상을 원본과 AND연산
 SRCINVERT  660046  원본과 대상을 XOR조합
 WHITENESS  HFF0062&  흰색으로 표시

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

함수 사용은 예를 들어 Picturebox1에 그려져 있는 이미지를 왼쪽 10에서 가로 50만큼, 위쪽 10에서 세로 70만큼 복사하여 Picturebox2에 표시하는 Program을 만드려면 다음과 같이 호출될 수 있습니다.

Const SRCCOPY As Integer = &HCC0020

Dim idcd, idcs As Integer
idcs = GetDC(PictureBox1.Handle)
idcd = GetDC(PictureBox2.Handle)

BitBlt(idcd, 10, 10, 50, 70, idcs, 0, 0, SRCCOPY)

▶VB.NET 호출

const int SRCCOPY = 0xCC0020;

int idcd, idcs;
idcd = GetDC((int)pictureBox1.Handle);
idcd = GetDC((int)pictureBox2.Handle);

BitBlt(idcd, 10, 10, 50, 70, idcs, 0, 0, SRCCOPY);

▶C# 호출

복사대상이나 표시할대상에 Picturebox Control의 Device Context를 지정하였지만 BitBlt함수는 사실 Image를 대상으로 복사하고 표시하는 것이 아니라 단순 Device Context를 대상으로 복사를 수행하는 것입니다.

이는 Image뿐만 아니라 Device Context로 지정될 수 있는 거의 모든 Object의 표시화면을 복사할 수 있다는 의미가 됩니다.
0 0
Programming/Windows API
StretchBlt함수는 지정된 Device Context영역을 Bitmap복사합니다. 이 기능은 BitBlt함수와 같지만 StretchBit함수는 복사된 Bitmap을 늘이거나 축소하고 좌우대칭을 바꾸는등의 추가적인 작업이 가능합니다.

Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDc As Integer, ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal nSrcWidth As Integer, ByVal nSrcHeight As Integer, ByVal dwRop As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int StretchBlt(int hdc, int x, int y, int nWidth, int nHeight, int hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, int dwRop);
▶C# 선언

StretchBlt함수의 첫번째인수는 복사된 영역이 표시될 대상 Device Context를 기술하고 여섯번째 인수는 복사할 영역의 Device Context를 기술합니다.

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

두번째와 세번째인수는 복사된 영역이 표시될 시작좌표를 설정하며 네번째 다섯번째 인수는 앞에서 지정한 영역에서부터 복사된 영역을 표시할 크기를 지정합니다.

일곱번째와 여덟번째 인수는 지정된 Device Context로 부터 복사할 시작영역의 좌표를 설정하고 아홉번째와 열번째 인수에서 지정된 영역으로부터 복사할 영역의 크기를 기술합니다.

마지막인수는 복사된 영역이 표시될 형태를 지정하는 것으로 다음 인수중 하나를 설정하거나 필요에 따라 or단위(VB에서는 Or, C#에서는 |)로 중복하여 기술합니다.

 상수  값  설명
 BLACKNESS  42  검은색으로 표시
 DSTINVERT  550009  대상을 반전
 MERGECOPY  C000CA  원본과 대상을 AND조합
 MERGEPAINT  BB0226  원본과 대상을 OR조합
 NOTSRCCOPY  330008  원본을 반전
 NOTSRCERASE  1100A6  원본과 대상을 OR조합/반전
 PATCOPY  F00021  pattern 복사
 PATINVERT  5A0049  대상을 pattern과 XOR조합
 PATPAINT  FB0A09  pattern을 반전과 OR조합
 SRCAND  8800C6  원본을 AND연산
 SRCCOPY  CC0020  복사
 SRCERASE  440328&  반전된 대상을 원본과 AND연산
 SRCINVERT  660046  원본과 대상을 XOR조합
 WHITENESS  HFF0062&  흰색으로 표시

값에서 VB.NET은 &H, C#은 0x로 16진수로 표시합니다.

위 인수를 토대로 PictureBox가 두개인 상황에서 대상 Device Context의 PictureBox1으로 부터 왼쪽 0부터 가로 100까지, 위쪽 0부터 세로 100까지 해당 Image를 복사한 다음 지정된 Device Context의 PictureBox2에 왼쪽 0부터 가로 100까지, 위쪽 0부터 세로 100까지 똑같이 표시하려면 함수는 다음과 같이 호출될 수 있습니다.

Const SRCCOPY As Integer = &HCC0020

Dim idcd, idcs As Integer
idcd = GetDC(PictureBox2.Handle)
idcs = GetDC(PictureBox1.Handle)

StretchBlt(idcd, 0, 0, 100, 100, idcs, 0, 0, 100, 100, SRCCOPY)

▶VB.NET 호출

Const int SRCCOPY = 0xCC0020;

int idcd, idcs;
idcd = GetDC((int)PictureBox2.Handle);
idcs = GetDC((int)PictureBox1.Handle);

StretchBlt(idcd, 0, 0, 100, 100, idcs, 0, 0, 100, 100, SRCCOPY);

▶C# 호출

이때 만일 복사된 Image를 전체적으로 2배 확대하여 표시하려면 네번째와 다섯번째 인수에서 표시할 크기를 다음과 같이 늘려주면 됩니다.

StretchBlt(idcd, 0, 0, 200, 200, idcs, 0, 0, 100, 100, SRCCOPY)
▶VB.NET 호출

StretchBlt(idcd, 0, 0, 200, 200, idcs, 0, 0, 100, 100, SRCCOPY);
▶C# 호출

또한 좌우 혹은 상하대칭을 바꾸어 표시하려면 두번째와 세번째 인수값을 조정하여 표시를 시작할 위치를 바꾸고 네번째와 다섯번째 인수에서 크기를 역으로 지정하면 자연스럽게 대칭이 바뀌어 표시됩니다.

StretchBlt(idcd, 100, 0, -100, 100, idcs, 0, 0, 100, 100, SRCCOPY)
▶VB.NET(좌우바뀜 예제)

StretchBlt(idcd, 0, 100, 100, -100, idcs, 0, 0, 100, 100, SRCCOPY)
▶VB.NET(상하바뀜 예제)

StretchBlt(idcd, 100, 0, -100, 100, idcs, 0, 0, 100, 100, SRCCOPY);
▶C#(좌우바뀜 예제)

StretchBlt(idcd, 0, 100, 100, -100, idcs, 0, 0, 100, 100, SRCCOPY);
▶C#(상하바뀜 예제)
0 0
Programming/Windows API
Ellipse함수는 Window나 Control에 타원형의 그림을 그리는 함수입니다.

Declare Function Ellipse Lib "gdi32" Alias "Ellipse" (ByVal hdc As Integer, ByVal x1 As Integer, ByVal y1 As Integer, ByVal x2 As Integer, ByVal y2 As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int Ellipse(int hdc, int x1, int y1, int x2, int y2);
▶C# 선언

Ellipse함수의 첫번째 인수로는 실제 타원을 그릴 Window나 Control의 Device Context가 기술되어야 합니다.

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

그 다음 인수는 타원을 그릴 시작 지점과 크기를 지정하는 인수인데 예를 들어 타원을 좌측 10지점부터 가로 100까지 그리고 세로 20지점부터 70까지의 타원을 그리려면 Ellipse함수를 다음과 같이 호출합니다.

Dim idc As Integer
idc = GetDC(Me.Handle)

Ellipse(idc, 10, 20, 100, 70)

▶VB.NET 호출

int idc;
idc = GetDC((int)this.Handle);

Ellipse(idc, 10, 20, 100, 70);

▶C# 호출
0 0
Programming/Windows API
FloodFill함수는 지정한 Device Context에서 특정 색상의 영역을 표시하는 함수입니다.

Declare Function FloodFill Lib "gdi32" Alias "FloodFill" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer, ByVal crColor As Integer, ByVal wFillType As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int FloodFill(int hdc, int x, int y, int crColor, int wFillType);
▶C# 선언

선언 FloodFill함수의 첫번째 인수는 영역을 표시할 Device Context를 기술합니다. 이때 GetDC, GetWindowDC함수로 Device Context를 가져올 수 있습니다.

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

FloodFill함수의 두번째와 세번째 인수는 해당 색상을 칠할 시작좌표를 설정하는 부분이며 네번째인수는 영역을 표시할 대상 색상을 기술하는 부분입니다. 그리고 마지막 다섯번째 인수는 색상을 칠할 형태를 지정하는 것으로 다음 2가지를 기술할 수 있습니다.

 상수  값  설명
 FLOODFILLBORDER  0  경계부분만 칠함
 FLOODFILLSURFACE  1  지정된 색상으로 칠할 영역을 결정

위 인수를 토대로 FloodFill함수는 다음과 같이 호출될 수 있습니다.

FloodFill(GetWindowDC(GetDesktopWindow()), 0, 0, ColorTranslator.ToWin32(Color.Black), 0)
▶VB.NET 호출

FloodFill(GetWindowDC(GetDesktopWindow()), 0, 0, ColorTranslator.ToWin32(Color.Black), 0)
▶C# 호출
0 0
Programming/Windows API
LineTo는 Window나 Control에 직선을 그리는 함수입니다.

Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int LineTo(int hdc, int x, int y);
▶C# 선언

LineTo함수의 첫번째 인수는 Line을 그릴 Window나 Control의 Device Context가 기술되어야 합니다.

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

두번째와 세번째 인수는 실제 Line을 그릴 X와 Y의 좌표를 기술합니다. 그런데 Line을 그릴 시작위치는 0부터 시작하기 때문에 만일 다음과 같이 함수를 호출하면

Dim idc As Integer
idc = GetDC(Me.Handle)

LineTo(idc, 100, 100)

▶VB.NET 호출

int idc;
idc = GetDC((int)this.Handle);

LineTo(idc, 100, 100);

▶C# 호출

Line은 세로 0부터 100까지, 가로 0부터 100까지 그려지게 됩니다.
0 0
Programming/Windows API
CreateSolidBrush함수는 다른 API를 통해 Graphic를 그릴때 사용되는 Solid Brush를 생성하고 생성된 해당 Brush의 Handle을 반환합니다.

Declare Function CreateSolidBrush Lib "gdi32" Alias "CreateSolidBrush" (ByVal crColor As Integer) As Integer
▶VB.NET 선언

[DllImport("gdi32")]
public static extern int CreateSolidBrush(int crColor);
▶C# 선언

CreateSolidBrush는 말 그대로 그림을 그릴 수 있는 붓을 생성하는데 이때 붓의 색상을 CreateSolidBrush함수의 인수로 전달해야 합니다.

예를 들어 파란색 brush를 생성하고자 한다면 함수는 다음과 같이 호출될 수 있습니다.

Dim brh As Integer
brh = CreateSolidBrush(RGB(0, 0, 255))
▶VB.NET 호출

int brh;
brh = CreateSolidBrush(ColorTranslator.ToWin32(Color.Blue));
▶C# 호출
0 0
1
블로그 이미지

클리엘