다음을 통해 공유


Windows 정보

이 항목에서는 애플리케이션이 창을 만들고 사용하는 데 사용하는 프로그래밍 요소에 대해 설명합니다. 창 간의 관계 관리; 및 크기를 지정하고 창을 이동하고 표시합니다.

개요에는 다음 항목이 포함되어 있습니다.

바탕 화면 창

시스템을 시작하면 바탕 화면 창이 자동으로 만들어집니다. 바탕 화면 창 화면의 배경을 그리는 시스템 정의 창이며 모든 애플리케이션에서 표시하는 모든 창의 기본으로 사용됩니다.

바탕 화면 창은 비트맵을 사용하여 화면의 배경을 그립니다. 비트맵에 의해 생성된 패턴은 바탕 화면이라고 합니다. 기본적으로 바탕 화면 창은 레지스트리에 지정된 .bmp 파일의 비트맵을 바탕 화면 배경 화면으로 사용합니다.

GetDesktopWindow 함수는 바탕 화면 창에 대한 핸들을 반환합니다.

제어판 항목과 같은 시스템 구성 애플리케이션은 wAction 매개 변수가 SPI_SETDESKWALLPAPER 설정된 SystemParametersInfo 함수와 비트맵 파일 이름을 지정하는 lpvParam 매개 변수를 사용하여 바탕 화면 배경 화면을 변경합니다. systemParametersInfo 지정된 파일에서 비트맵을 로드하고, 비트맵을 사용하여 화면 배경을 그리고, 레지스트리에 새 파일 이름을 입력합니다.

응용 프로그램 창

모든 그래픽 Windows 기반 애플리케이션은 사용자와 애플리케이션 간의 기본 인터페이스 역할을 하는 주 창하나 이상의 창을 만듭니다. 또한 대부분의 애플리케이션은 주 창과 관련된 작업을 수행하기 위해 직접 또는 간접적으로 다른 창을 만듭니다. 각 창은 출력을 표시하고 사용자로부터 입력을 받는 역할을 합니다.

애플리케이션을 시작할 때 시스템은 작업 표시줄 단추를 애플리케이션과 연결합니다. 작업 표시줄 단추 프로그램 아이콘과 제목을 포함합니다. 애플리케이션이 활성화되면 해당 작업 표시줄 단추가 푸시된 상태로 표시됩니다.

애플리케이션 창에는 제목 표시줄, 메뉴 모음, 창 메뉴(이전의 시스템 메뉴), 최소화 단추, 최대화 단추, 복원 단추, 닫기 단추, 크기 조정 테두리, 클라이언트 영역, 가로 스크롤 막대 및 세로 스크롤 막대와 같은 요소가 포함됩니다. 애플리케이션의 주 창에는 일반적으로 이러한 모든 구성 요소가 포함됩니다. 다음 그림에서는 일반적인 주 창에서 이러한 구성 요소를 보여 줍니다.

일반적인 창

클라이언트 영역

클라이언트 영역 애플리케이션이 텍스트 또는 그래픽과 같은 출력을 표시하는 창의 일부입니다. 예를 들어 데스크톱 게시 애플리케이션은 클라이언트 영역에 있는 문서의 현재 페이지를 표시합니다. 애플리케이션은 창에 대한 입력을 처리하고 클라이언트 영역에 출력을 표시하기 위해 창 프로시저라는 함수를 제공해야 합니다. 자세한 내용은 창 프로시저참조하세요.

비클라이언트 영역

제목 표시줄, 메뉴 모음, 창 메뉴, 최소화 및 최대화 단추, 크기 조정 테두리 및 스크롤 막대는 창의 비클라이언트 영역통칭합니다. 시스템은 비클라이언트 영역의 대부분의 측면을 관리합니다. 애플리케이션은 클라이언트 영역의 모양과 동작을 관리합니다.

제목 표시줄 애플리케이션 정의 아이콘과 텍스트 줄을 표시합니다. 일반적으로 텍스트는 애플리케이션의 이름을 지정하거나 창의 용도를 나타냅니다. 응용 프로그램은 창을 만들 때 아이콘과 텍스트를 지정합니다. 제목 표시줄을 사용하면 사용자가 마우스 또는 다른 포인팅 장치를 사용하여 창을 이동할 수도 있습니다.

대부분의 애플리케이션에는 애플리케이션에서 지원하는 명령을 나열하는 메뉴 모음 포함되어 있습니다. 메뉴 모음의 항목은 명령의 주요 범주를 나타냅니다. 메뉴 모음에서 항목을 클릭하면 일반적으로 항목이 지정된 범주 내의 작업에 해당하는 팝업 메뉴가 열립니다. 명령을 클릭하면 사용자가 애플리케이션에 작업을 수행하도록 지시합니다.

창 메뉴 생성되고 시스템에서 관리됩니다. 여기에는 사용자가 선택할 때 창의 크기 또는 위치를 설정하거나 애플리케이션을 닫거나 작업을 수행하는 표준 메뉴 항목 집합이 포함되어 있습니다. 자세한 내용은 메뉴참조하세요.

오른쪽 위 모서리에 있는 단추는 창의 크기와 위치에 영향을 줍니다. 최대화 버튼을 클릭하면 시스템이 창을 화면 크기로 확대하고 창이 작업 표시줄을 제외한 전체 바탕 화면을 덮도록 배치합니다. 동시에 시스템은 최대화 단추를 복원 단추로 바꿉니다. 복원 단추를 클릭하면 시스템이 창을 이전 크기와 위치로 복원합니다. 최소화 단추를 클릭하면 시스템에서 작업 표시줄 단추의 크기로 창을 줄이고, 작업 표시줄 단추 위에 창을 배치하고, 작업 표시줄 단추를 정상 상태로 표시합니다. 애플리케이션을 이전 크기 및 위치로 복원하려면 해당 작업 표시줄 단추를 클릭합니다. 닫기 단추클릭하면 애플리케이션이 종료됩니다.

크기 조정 테두리 사용자가 마우스 또는 다른 포인팅 디바이스를 사용하여 창의 크기를 설정할 수 있는 창 경계 주변 영역입니다.

가로 스크롤 막대세로 스크롤 막대는 마우스 또는 키보드 입력을 클라이언트 영역의 내용을 가로 또는 세로로 이동시키는 데 응용 프로그램에서 사용하는 값으로 변환합니다. 예를 들어 긴 문서를 표시하는 워드 프로세싱 응용 프로그램은 일반적으로 사용자가 문서를 위아래로 페이즈업할 수 있도록 세로 스크롤 막대를 제공합니다.

컨트롤 및 대화 상자

애플리케이션은 컨트롤 및 대화 상자를 포함하여 주 창 외에도 여러 유형의 창을 만들 수 있습니다.

컨트롤 열려는 파일의 이름 또는 텍스트 선택 영역의 원하는 포인트 크기와 같은 사용자로부터 특정 정보를 얻기 위해 애플리케이션에서 사용하는 창입니다. 또한 애플리케이션은 컨트롤을 사용하여 애플리케이션의 특정 기능을 제어하는 데 필요한 정보를 얻습니다. 예를 들어, 워드 프로세싱 애플리케이션은 일반적으로 사용자가 단어 줄 바꿈을 켜고 끌 수 있도록 하는 컨트롤을 제공합니다. 자세한 내용은 Windows 컨트롤 참조하세요.

컨트롤은 항상 다른 창(일반적으로 대화 상자)과 함께 사용됩니다. 대화 상자는 하나 이상의 컨트롤이 포함된 창입니다. 애플리케이션은 대화 상자를 사용하여 명령을 완료하는 데 필요한 입력을 사용자에게 표시합니다. 예를 들어 파일을 여는 명령이 포함된 애플리케이션에는 사용자가 경로 및 파일 이름을 지정하는 컨트롤이 포함된 대화 상자가 표시됩니다. 대화 상자는 일반적으로 주 창과 동일한 창 구성 요소 집합을 사용하지 않습니다. 대부분 제목 표시줄, 창 메뉴, 테두리(비사이징) 및 클라이언트 영역이 있지만 일반적으로 메뉴 모음, 최소화 및 최대화 단추 또는 스크롤 막대가 없습니다. 자세한 내용은 대화 상자를 참조하세요.

메시지 상자는 사용자에게 메모, 주의 또는 경고를 표시하는 특수 대화 상자입니다. 예를 들어 메시지 상자는 작업을 수행하는 동안 애플리케이션에서 발생한 문제를 사용자에게 알릴 수 있습니다. 자세한 내용은 메시지 상자참조하세요.

창 특성

애플리케이션은 창을 만들 때 다음 정보를 제공해야 합니다. (생성 함수가 새 창을 고유하게 식별하기 위해 반환하는 창 핸들예외입니다.)

이러한 창 특성은 다음 섹션에서 설명합니다.

클래스 이름

모든 창은 창 클래스에 속합니다. 애플리케이션은 해당 클래스의 창을 만들기 전에 창 클래스를 등록해야 합니다. 창 클래스 창의 모양과 동작의 대부분의 측면을 정의합니다. 창 클래스의 주요 구성 요소는 창에 전송된 모든 입력 및 요청을 수신하고 처리하는 함수인 창 프로시저입니다. 시스템은 입력 및 요청을 메시지 형식으로 제공합니다. 자세한 내용은 창 클래스, 창 프로시저메시지 및 메시지 큐참조하세요.

창 이름

창 이름 사용자의 창을 식별하는 텍스트 문자열입니다. 주 창, 대화 상자 또는 메시지 상자는 일반적으로 제목 표시줄에 창 이름을 표시합니다(있는 경우). 컨트롤의 클래스에 따라 컨트롤이 창 이름을 표시할 수 있습니다. 예를 들어 단추, 편집 컨트롤 및 정적 컨트롤은 컨트롤이 차지하는 사각형 내에 창 이름을 표시합니다. 그러나 목록 상자 및 콤보 상자와 같은 컨트롤에는 창 이름이 표시되지 않습니다.

창을 만든 후 창 이름을 변경하려면 SetWindowText 함수를 사용합니다. 이 기능은 GetWindowTextLengthGetWindowText 함수를 사용하여 창에서 현재 창 이름 문자열을 검색합니다.

창 스타일

모든 창에는 하나 이상의 창 스타일이 있습니다. 창 스타일은 창의 클래스에서 지정하지 않은 창 모양 및 동작의 측면을 정의하는 명명된 상수입니다. 애플리케이션은 일반적으로 창을 만들 때 창 스타일을 설정합니다. SetWindowLong 함수를 사용하여 창을 만든 후 스타일을 설정할 수도 있습니다.

시스템 및 클래스의 창 프로시저는 어느 정도 창 스타일을 해석합니다.

일부 창 스타일은 모든 창에 적용되지만 대부분 특정 창 클래스의 창에 적용됩니다. 일반 창 스타일은 WS_ 접두사로 시작하는 상수로 표시됩니다. OR 연산자와 결합하여 주 창, 대화 상자 및 자식 창을 비롯한 다양한 유형의 창을 형성할 수 있습니다. 클래스별 창 스타일은 미리 정의된 컨트롤 클래스에 속하는 창의 모양과 동작을 정의합니다. 예를 들어 SCROLLBAR 클래스는 스크롤 막대 컨트롤을 지정하지만 SBS_HORZSBS_VERT 스타일은 가로 또는 세로 스크롤 막대 컨트롤을 만들지 여부를 결정합니다.

Windows에서 사용할 수 있는 스타일 목록은 다음 항목을 참조하세요.

확장 창 스타일

모든 창에는 필요에 따라 하나 이상의 확장 창 스타일이 있을 수 있습니다. 확장 창 스타일 창 클래스 또는 다른 창 스타일에 의해 지정 되지 않은 창 모양 및 동작의 측면을 정의 하는 명명 된 상수입니다. 애플리케이션은 일반적으로 창을 만들 때 확장 창 스타일을 설정합니다. SetWindowLong 함수를 사용하여 창을 만든 후 스타일을 설정할 수도 있습니다.

자세한 내용은 CreateWindowEx참조하세요.

위치

창의 위치는 왼쪽 위 모서리의 좌표로 정의됩니다. 창 좌표라고도 하는 이러한 좌표는 항상 화면의 왼쪽 위 모서리 또는 자식 창의 경우 부모 창 클라이언트 영역의 왼쪽 위 모서리를 기준으로 합니다. 예를 들어 좌표(10,10)가 있는 최상위 창은 화면의 왼쪽 위 모서리 오른쪽에 10픽셀, 아래쪽에서 10픽셀로 배치됩니다. 좌표(10,10)가 있는 자식 창은 부모 창 클라이언트 영역의 왼쪽 위 모서리 오른쪽에 10픽셀, 아래쪽 10픽셀로 배치됩니다.

WindowFromPoint 함수는 화면의 특정 지점을 차지하는 창에 대한 핸들을 검색합니다. 마찬가지로 ChildWindowFromPointChildWindowFromPointEx 함수는 부모 창의 클라이언트 영역에서 특정 지점을 차지하는 자식 창에 대한 핸들을 검색합니다. ChildWindowFromPointEx는 보이지 않는, 비활성화된, 및 투명한 자식 창을 무시할 수 있지만, ChildWindowFromPoint는 무시할 수 없습니다.

크기

창의 크기(너비 및 높이)는 픽셀 단위로 제공됩니다. 창의 너비 또는 높이가 0일 수 있습니다. 애플리케이션에서 창의 너비와 높이를 0으로 설정하면 시스템에서 크기를 기본 최소 창 크기로 설정합니다. 기본 최소 창 크기를 검색하기 위해 애플리케이션은 SM_CXMINSM_CYMIN 플래그와 함께 GetSystemMetrics 함수를 사용합니다.

애플리케이션은 특정 크기의 클라이언트 영역을 사용하여 창을 만들어야 할 수 있습니다. AdjustWindowRectAdjustWindowRectEx 함수는 클라이언트 영역의 원하는 크기에 따라 필요한 창 크기를 계산합니다. 애플리케이션은 결과 크기 값을 CreateWindowEx 함수에 전달할 수 있습니다.

애플리케이션은 창의 크기를 매우 크게 지정할 수 있습니다. 그러나 화면보다 크도록 창의 크기를 조정해서는 안 됩니다. 창의 크기를 설정하기 전에 애플리케이션은 SM_CXSCREENSM_CYSCREEN 플래그와 함께 GetSystemMetrics 사용하여 화면의 너비와 높이를 확인해야 합니다.

부모 또는 소유자 창 핸들

창에는 부모 창이 있을 수 있습니다. 부모가 있는 창은 자식 창이라고 합니다. 부모 창 자식 창을 배치하는 데 사용되는 좌표계를 제공합니다. 부모 창을 갖는 것은 창 모양에 영향을 줍니다. 예를 들어 자식 창은 자식 창의 일부가 부모 창의 테두리 밖에 나타나지 않도록 잘립니다.

부모가 없거나 부모가 바탕 화면 창인 경우, 이러한 창을 최상위 창이라고 불립니다. 애플리케이션은 EnumWindows 함수를 사용하여 화면의 각 최상위 창에 대한 핸들을 가져올 수 있습니다. EnumWindows는 각 최상위 창의 핸들을 애플리케이션이 정의한 콜백 함수 EnumWindowsProc에 순차적으로 전달합니다.

최상위 창은 다른 창을 소유하거나 소유될 수 있습니다. 소유 창 항상 소유자 창 앞에 표시되고, 소유자 창이 최소화되면 숨겨지고, 소유자 창이 제거되면 제거됩니다. 자세한 내용은 소유 Windows참조하세요.

자식 창에는 자식 창과 연결된 고유한 애플리케이션 정의 값인 자식 창 식별자가 있을 수 있습니다. 자식 창 식별자는 여러 자식 창을 만드는 애플리케이션에서 특히 유용합니다. 자식 창을 만들 때 애플리케이션은 자식 창의 식별자를 지정합니다. 창을 만든 후 애플리케이션은 SetWindowLong 함수를 사용하여 창의 식별자를 변경하거나 GetWindowLong 함수를 사용하여 식별자를 검색할 수 있습니다.

자식 창을 제외한 모든 창에는 메뉴가 있을 수 있습니다. 애플리케이션은 창의 클래스를 등록할 때 또는 창을 만들 때 메뉴 핸들을 제공하여 메뉴를 포함할 수 있습니다.

애플리케이션 인스턴스 핸들

모든 애플리케이션에는 연관된 인스턴스 핸들이 있습니다. 시스템은 애플리케이션이 시작될 때 애플리케이션에 인스턴스 핸들을 제공합니다. 동일한 애플리케이션의 여러 복사본을 실행할 수 있으므로 시스템은 내부적으로 인스턴스 핸들을 사용하여 애플리케이션의 한 인스턴스를 다른 인스턴스와 구분합니다. 애플리케이션은 창을 만드는 창을 포함하여 다양한 창에서 인스턴스 핸들을 지정해야 합니다.

데이터 만들기

모든 창에는 애플리케이션 정의 생성 데이터가 연결될 수 있습니다. 창이 처음 만들어지면 시스템은 생성되는 창의 창 프로시저에 데이터에 대한 포인터를 전달합니다. 창 프로시저는 데이터를 사용하여 애플리케이션 정의 변수를 초기화합니다.

창 핸들

창을 만든 후 생성 함수는 창을 고유하게 식별하는 창 핸들 반환합니다. 창 핸들에는 HWND 데이터 형식이 있습니다. 애플리케이션은 창 핸들을 포함하는 변수를 선언할 때 이 형식을 사용해야 합니다. 애플리케이션은 다른 함수에서 이 핸들을 사용하여 해당 작업을 창으로 전달합니다.

애플리케이션은 FindWindow 함수를 사용하여 지정된 클래스 이름 또는 창 이름을 가진 창이 시스템에 있는지 여부를 검색할 수 있습니다. 이러한 창이 있는 경우 FindWindow 창에 핸들을 반환합니다. 검색을 특정 애플리케이션의 자식 창으로 제한하려면 FindWindowEx 함수를 사용합니다.

IsWindow 함수는 창 핸들이 유효한 기존 창을 식별하는지 여부를 결정합니다. 특정 함수에서 창 핸들을 대체할 수 있는 특수 상수가 있습니다. 예를 들어 애플리케이션은 SendMessageSendMessageTimeout 함수의 HWND_BROADCAST 사용하거나 MapWindowPoints 함수의 HWND_DESKTOP 사용할 수 있습니다.

창 만들기

애플리케이션 창을 만들려면 CreateWindow 함수를 사용하거나 CreateWindowEx 함수를 사용하십시오. 창 특성을 정의하는 데 필요한 정보를 제공해야 합니다. CreateWindowEx에는 dwExStyle라는 매개 변수가 있으며, 이 매개 변수는 CreateWindow에 없습니다. 그렇지 않으면 이 함수들은 동일합니다. 실제로 CreateWindowdwExStyle 매개 변수가 0으로 설정된 CreateWindowEx를 단순히 호출합니다. 이러한 이유로 이 개요의 나머지 부분에서는 CreateWindowEx참조합니다.

이 섹션에는 다음 항목이 포함되어 있습니다.

메모

대화 상자 및 메시지 상자와 같은 특수한 용도의 창을 만들기 위한 추가 함수가 있습니다. 자세한 내용은 DialogBox, CreateDialog및 messageBox참조하세요.

 

주 창 만들기

모든 Windows 기반 애플리케이션에는 진입점 함수로 WinMain 있어야 합니다. WinMain 주 창에 대한 창 클래스를 등록하고 주 창을 만드는 등 다양한 작업을 수행합니다. WinMainRegisterClass 함수를 호출하여 주 창 클래스를 등록하고 CreateWindowEx 함수를 호출하여 주 창을 만듭니다.

WinMain 함수는 애플리케이션을 단일 인스턴스로 제한할 수도 있습니다. CreateMutex 함수를 사용하여 명명된 뮤텍스를 만듭니다. GetLastErrorERROR_ALREADY_EXISTS반환하는 경우 애플리케이션의 다른 인스턴스가 존재하고(뮤텍스를 만들었으므로) WinMain 종료해야 합니다.

기본 창을 만든 후에는 시스템이 자동으로 주 창을 표시하지 않습니다. 대신 애플리케이션은 ShowWindow 함수를 사용하여 주 창을 표시해야 합니다. 주 창을 만든 후 애플리케이션의 WinMain 함수는 ShowWindow 호출하여 주 창에 대한 핸들과 주 창을 처음 표시할 때 주 창을 최소화할지 최대화할지 여부를 지정하는 플래그라는 두 개의 매개 변수를 전달합니다. 일반적으로 플래그는 SW_ 접두사로 시작하는 상수로 설정할 수 있습니다. 그러나 애플리케이션의 주 창을 표시하기 위해 ShowWindow 호출되면 플래그를 SW_SHOWDEFAULT설정해야 합니다. 이 플래그는 애플리케이션을 시작한 프로그램의 지시에 따라 창을 표시하도록 시스템에 지시합니다.

windows 클래스가 RegisterClass유니코드 버전에 등록된 경우 창은 유니코드 메시지만 받습니다. 창에서 유니코드 문자 집합을 사용하는지 여부를 확인하려면 IsWindowUnicode호출합니다.

Window-Creation 메시지

창을 만들 때 시스템은 창에 대한 창 프로시저로 메시지를 보냅니다. 시스템은 클라이언트 영역을 만든 후 창의 비클라이언트 영역과 WM_CREATE 메시지를 만든 후 WM_NCCREATE 메시지를 보냅니다. 창 프로시저는 시스템에서 창을 표시하기 전에 두 메시지를 모두 받습니다. 두 메시지 모두 CreateWindowEx 함수에 지정된 모든 정보를 포함하는 CREATETRUCT 구조체에 대한 포인터를 포함합니다. 일반적으로 창 프로시저는 이러한 메시지를 수신할 때 초기화 작업을 수행합니다.

자식 창을 만들 때 시스템은 WM_NCCREATE 메시지와 WM_CREATE 메시지를 보낸 후, 부모 창에 WM_PARENTNOTIFY 메시지를 보냅니다. 창을 만드는 동안 다른 메시지도 보냅니다. 이러한 메시지의 수와 순서는 창 클래스 및 스타일과 창을 만드는 데 사용되는 함수에 따라 달라집니다. 이러한 메시지는 이 도움말 파일의 다른 항목에 설명되어 있습니다.

다중 스레드 애플리케이션

Windows 기반 애플리케이션에는 여러 스레드의 실행이 있을 수 있으며 각 스레드는 창을 만들 수 있습니다. 창을 만드는 스레드는 창 프로시저에 대한 코드를 포함해야 합니다.

애플리케이션은 EnumThreadWindows 함수를 사용하여 특정 스레드에서 만든 창을 열거할 수 있습니다. 이 함수는 각 스레드 창에 핸들을 전달하고, 애플리케이션에서 정의한 콜백 함수 EnumThreadWndProc를 차례로 호출합니다.

GetWindowThreadProcessId 함수는 특정 창을 만든 스레드의 식별자를 반환합니다.

다른 스레드에서 만든 창의 표시 상태를 설정하려면 ShowWindowAsync 함수를 사용합니다.