새소식

DEV/C++

Win32 Window관리 함수들

  • -
728x90

BOOL DestroyWindow(HWND hWnd);

윈도우를 파괴

BOOL CloseWindow(HWND hWnd);

윈도우를 최소화

 

BOOL GetWindowRect(HWND hWnd, LPRECT lpRect);

윈도우의 위치와 좌표

BOOL GetClientRect(HWND hWnd, LPRECT lpRect);

대상 윈도우의 작업영역의 크기를 구함

 

BOOL MoveWindow(HWND hWnd, int X, int Y, int nWidth, int nHeight,

                           BOOL bRepaint);

윈도우의 위치와 크기를 동시에 변경하는 기본적인 함수

 

BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter,

                                int X, int Y, int cx, int cy, UINT uFlags);

크기 변경및 이동, Z순서를 주고 몇가지 옵션을 줄수 있음

 

hWndInsertAfter에는 어느 윈도우 다음에 배치할가 인데 아래의 옵션을 줄수도 있다

HWND_TOP (Z순서의 제일 위에 배치

HWND_BOTTOM (Z순서의 바닥에 윈도우를 배치
HWND_TOPMOST 탑 모스트 윈도우로 설정

HWND_NOTOPMOST 탑 모스트 윈도우 설정을 취소

 

uFlags 값들

SWP_NOSIZE 크기 변경하지 않음

SWP_NOMOVE 위치 변경하지 않음

SWP_NOZORDER 현재의 Z순서를 유지

SWP_SHOWWINDOW 윈도우를 보임

SWP_HIDEWINDOW 윈도우를 숨김

SWP_NOACTIVE 크기 변경후 윈도우를 활성화 하지 않음

 

HDWP BeginDeferWindowPos(int nNumWindows);

복수 윈도우의 크기와 위치를 저장하기 위한 메모리 할당

HDWP DeferWindowPos(HDWP hWinPosInfo, HWND hWnd, HWND hWndInsertAfter,

                                  int x, int y, int cx, int cy, UINT uFlags);

윈도우의 배치 상태를 배열에 기록

BOOL EndDeferWindowPos(HDWP hWindPosInfo);

이렇게 만들어진 정보대로 윈도우를 일괄 재배치

 

BOOL GetWindowPlacement(HWND hWnd, WINDOWPLACEMENT* lpwndpl);

BOOL SetWindowPlacement(HWND hWnd, CONST WINDOWPLACEMENT* lpwndpl);

윈도우의 위치, 크기, 최대, 최소화 상태를 한꺼번에 조사하고 변경

lpwndpl구조체

lenght

flags

showCmd;

ptMinPosition

ptMaxPosition

RECT rcNormalPosition

 

BOOL ScreenToClient(HWND hWnd, LPPOINT lpPoint);

화면좌표를 작업영역 좌표로

BOOL ClientToScreen(HWND hWnd, LPPOINT lpPoint);

작업영역 좌표를 화면좌표로

 

int MapWindowPoints(HWND hWndFrom, HWND hWndTo, LPPOINT lpPoints,

                             UINT cPoints);

특정 윈도우를 기준으로 한 좌표들을 다른 윈도우를 기준으로 한 좌표로 변환

 

BOOL AdjustWindowRect(LPRECT lpRect, DWORD dwStyle, BOOL bMenu);

BOOL AdjustWindowRectEx(LPRECT lpRect, DWORD dwStyle, BOOL bMenu,

                                        DWORD dwExstyle);

원하는 작업영역 크기에 맞는 윈도우 크기를 계산

 

int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount);

BOOL SetWindowText(HWND hWnd, LPCTSTR lpString);

int GetWindowTextLength(HWND hWnd);

윈도우의 타이틀 바에 나타나는 캡션 문자열을 조사 변경

 

BOOL EnableWindow(HWND hWnd, BOOL bEnable);

윈도우 사용 금지, 허가

BOOL ShowWindow(HWND hWnd, int nCmdShow);

윈도우를 보이기, 숨기기

 

BOOL SetForegroundWindow(HWND hWnd);

HWND GetForegroundWindow(void);

이 윈도우가 속한 스레드를 포그라운드 상태로하고 메인 윈도우를 활성화

 

HWND SetActiveWindow(HWND hWnd);

HWND GEtActiveWindow(void);

같은 스레드내의 윈도우에 대해서 활성화 윈도우를 변경

 

HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);

최상위 윈도우들중 조건에 맞는 윈도우를 검색, 이름이나 캡션을 조건으로

 

HWND WindowFromPoint(POINT Point);

Point 화면 좌표 아래에 있는 윈도우를 조사해서 그 핸들을 리턴

 

HWND ChildWindowFromPonit(HWND hWndParent, POINT Point);

HWND ChildWindowFromPointEx(HWND hWndParent, POINT Point, UINT uFlags);

부모 윈도우내의 좌표로 차일드 윈도우를 검색

 

BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);

현재 실행 중인 모든 최상위 윈도우들을 열거하여 첫번째 인수로 지정된 콜백함수를 호출

BOOL EnumChildWindow(HWND hWndParent, WNDENUMPROC lpEnumFunc,

                                    LPARAM lParam);

BOOL EnumThreadWindow(DWORD dwThreadid, WNDENUMPROC lpfn,

                                       LPARAM lParam);

특정 부모 윈도우의 차일드, 특정 스레드에 속한 윈도우 목록 조사

 

WM_SIZE메시지 발생시 wParam에 들어 오는 값

SIZE_MAXHIDE 다른 윈도우가 최대화 되었을 때 모든 팝업 윈도우로 전달

SIZE_MAXIMIZED 최대화

SIZE_MAXSHOW 다른 윈도우가 복구 되었을때 모든 팝업 윈도우로 전달

SIZE_MINIMIZED 최소화

SIZE_RESTORED 최대,최소화가 아닌 크기 변경

 

WM_WINDOWPOSCHANGING

윈도우가 이동중일때 발생하는 메시지

WM_WINDOWPOSCHANGED

윈도우가 이동 완료후 발생하는 메시지

 

WM_ACTIVATEAPP

응용프로그램이 활성화 되거나 비 활성화 될때 보내지는 메시지

WM_NCACTIVE

비 작업영역의 활성화 상태가 변경될때 보내지는 메시지

WM_ACTIVE

활성화 상태가 변경되는 개별윈도우에게 보내지는 메시지

WM_ACTIVE의 wParam의 하위 워드

WA_INACTIVE 윈도우가 비활성화

WA_CLICKACTIVE 마우스 클릭에 의해 윈도우가 활성화

WA_ACTIVE 마우스 클릭 이외의 방법으로 윈도우가 활성화

 

WM_SHOWWINDOW

윈도우가 보여지거나 숨겨지기 직전에 보내지는 메시지

lParam 값(이유)

0 (ShowWindow 함수에 의해 발생함

SW_OTHERUNZOOM 가려졌던 부분이 드러남

SW_OTHERZOOM 이 윈도우가 가려짐

SW_PARENTCLOSING 소유자 윈도우라 최소화

SW_PARENTOPENING 소유자 윈도우가 복구

 

WM_NCHITTEST

마우스 커서 위치가 윈도우의 어떤 부분인지 조사할때 사용하는 메시지

리턴 값

HTBBORDER 크기 조절이 불가능한 경계선

HTBOTTOM 아래쪽 경계선

HTTOP 위쪽 경계선

HTBOTTOMLEFT 아래 왼쪽 경계선

HTBOTTOMRIGHT 아래 오른쪽 경계선

HTTOPLEFT 위 왼쪽 경계선

HTTOPRIHGT 위 오른쪽 경계선

HTLEFT 왼쪽 경계선

HTRIGHT 오른쪽 경계선

HTCAPTION 타이틀바

HTCLIENT 작업영역

HTCLOSE 닫기 버튼

HTSIZE 크기 변경 박스

HTHELP 도움말 버튼

HTHSCROLL 수평 스크롤바

HTVSCROLL 수직 스크롤바

HTMENU 메뉴

HTMAXBUTTON 최대화 버튼

HTMINBUTTON 최소화 버튼

HTSYSMENU 시스템 메뉴

HTTRANSPARENT 같은 스레드의 다른 윈도우에 가려진 부분

 

int SetWindowRgn(HWND hWnd, HRGN hRgn, BOOL bRedraw);

불규칙한 모양의 윈도우를 만들기 위해 리전을 설정

hRgn모양 설정, bRedraw윈도우 리전 설정후 다시 그릴것인가(TRUE하면댐)

 

BOOL SetLayeredWindowAttributes(HWND hWnd, COLORREF crKey,

                                                  BYTE bAlpha, DWORD dwFlags);

윈도우의 투명및 반투명 속성지정, crKey는 투명색으로 처리할 색상

bAlpha는 윈도울 전체의 반투명도(0이면 완전투명 255 불투명)

dwFlags 두효과중 효과적용(LWA_COLORKEY는 투명 색상, LWA_ALPHA는 반투명도)

 

BOOL AnimateWindow(HWND hWnd, DWORD dwTime, DWORD dwFlags);

윈도우에 애니메이션 적용

dwFlags는 애니메이션 종류와 방법

AW_SLIDE, AW_BLEND, AW_CENTER 등

728x90
Contents

Copied the posting URL.

Please sympathize with me if this article was helpful.