폼의 위치, 크기 정보를 가져오기 위해 GetWindowRectGetClientRect 를 사용합니다.

이 둘의 차이점은 

GetWindowRect 는 화면좌표를 기준으로 하여 비 클라이언트 영역(Non Client Area)을 포함한 각 면의 위치좌표를 가져오고

GetClientRect 는 컨트롤 등을 디자인하는 클라이언트 영역(Client Area)에 크기 정보만을 취득합니다.

쓰다보니 알아먹기 힘든 소리가 되어버렸는데 아래 이미지를 참고하면 이해가 될 겁니다.


     

 GetWindowRect

 

 GetClientRect



Private Declare Function GetWindowRect Lib "user32" _

                        (ByVal hwnd As Long, _

                         lpRect As RECT) As Long


Private Declare Function GetClientRect Lib "user32" _

                        (ByVal hwnd As Long, _

                         lpRect As RECT) As Long


Private Type RECT

        Left As Long

        Top As Long

        Right As Long

        Bottom As Long

End Type



Private Sub Form_Load()


  Dim WindowRect As RECT

  Dim ClientRect As RECT


  GetWindowRect Me.hwnd, WindowRect


  GetClientRect Me.hwnd, ClientRect


  Debug.Print WindowRect.Left

  Debug.Print WindowRect.Top

  Debug.Print WindowRect.Right

  Debug.Print WindowRect.Bottom


  Debug.Print ClientRect.Left

  Debug.Print ClientRect.Top

  Debug.Print ClientRect.Right

  Debug.Print ClientRect.Bottom


End Sub



약 폼안에 있는 PictureBox를 GetWindowRect 로 위치정보를 가져오면 어디를 기준으로 가져올까요?

화면 좌표 기준이니 화면내 PictureBox의 위치정보를 가져오게됩니다.

 

Tip.

프로젝트 내의 폼 크기나 위치정보를 얻기위해 굳이 API 안써도 된다고 하지만 몰라서 해될건 없으니..^^

RECT 구조체로 얻은 결과를 Form 속성과 비교하여 보면 더 이해가 쉽다.


Me.Left \ 15 = WindowRect.Left

Me.Top \ 15 = WindowRect.Top

Me.Width \ 15 = WindowRect.Right - WindowRect.Left

Me.Height \ 15 = WindowRect.Bottom - WindowRect.Top

Me.ScaleWidth \ 15 = ClientRect.Right

Me.ScaleHeight \ 15 = ClientRect.Bottom




'VB6 > Interface' 카테고리의 다른 글

폼에 보여줄 영역 만들기(구멍난 폼)  (0) 2013.03.28
폼 타이틀바 Show/Hide  (0) 2013.03.28
바탕화면 아이콘 Show/Hide  (0) 2013.03.28
폼 투명도 주기  (0) 2013.03.27
폼 타이틀바 이동효과  (0) 2013.03.26

텍스트나 이미지 등의 데이터를 포함하여 배포하고자 할때 리소스 편집기를 이용하여 리소스 파일을 생성할 수 있다.

아래 이미지는 도구>리소스 편집기 를 이용하여 문자열, 비트맵, 웨이브 파일을 포함하여 생성하였다.



이렇게 생성된 리소스를 코드에서 사용하는 방법에는


 함수

설명 

 LoadResString

텍스트 문자열을 가져옵니다. 

 LoadResPicture 

비트맵, 아이콘 또는 커서와 같은 Picture 개체를 가져옵니다. 

 LoadResData

Byte 배열을 가져옵니다. 이것은 .wav 파일 등에 사용됩니다. 



1. 문자열 테이블에 저장된 텍스트 문자열을 가져오는 예

Debug.Print LoadResString(101)


2. 비트맵 등의 이미지를 가져오는 예

Me.Picture = LoadResPicture("IMG1", vbResBitmap)


3. Custom으로 정의된 Byte 배열을 가져오는 예

Private Declare Function PlaySoundData Lib "winmm.dll" _

                  Alias "PlaySoundA" _

                        (lpData As Any, _

                         ByVal hModule As Long, _

                         ByVal dwFlags As Long) As Long


Private Const SND_ASYNC = &H1

Private Const SND_NODEFAULT = &H2

Private Const SND_MEMORY = &H4


  Dim arrData() As Byte

  arrData = LoadResData(301, "CUSTOM")

  PlaySoundData(arrData(0), ByVal 0&, SND_MEMORY Or SND_ASYNC Or SND_NODEFAULT)



Tip.

리소스 편집기 메뉴가 안보이는 경우에는 추가기능>추가기능관리자 에서 아래와 같이 VB 6 리소스 편집기를 선택한 후 로드 동작에 체크해주면 기능이 활성화 된다.


대기시간을 주고자 할때 아래 코드를 참고하자.

Delay 와 같이 함수형태로 만들어 놓고 1/1000초 단위로 인자값을 넘겨주면 된다.


Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


Private Sub Delay (Optional ByVal lDelayTime As Long = 100)

  On Error Resume Next

  lDelayTime = GetTickCount + lDelayTime

  Do Until GetTickCount > lDelayTime

    Sleep 1

    DoEvents

  Loop

End Sub

'VB6 > Function' 카테고리의 다른 글

Desktop 이름 구하기  (0) 2013.04.01
마우스커서가 위치한 윈도우 핸들 구하기  (0) 2013.03.27

+ Recent posts