다음을 통해 공유


Windows Forms 컨트롤 만들기(C++)

업데이트: 2007년 11월

Windows Forms 컨트롤은 공용 언어 런타임을 대상으로 하는 GUI 응용 프로그램인 Windows Forms 응용 프로그램에 추가할 수 있는 구성 요소입니다. Visual C++의 Windows Forms 응용 프로그램에서는 .NET Framework 클래스를 비롯하여 새로운 Visual C++ 구문에서 제공하는 기타 .NET 기능을 사용합니다.

이 절차에서는 숫자를 표시하는 Windows Forms 컨트롤을 만듭니다. 이 숫자는 사용자가 응용 프로그램에서 레이블을 클릭할 때마다 하나씩 증가합니다. 이 컨트롤을 테스트하기 위한 Windows Forms 응용 프로그램 프로젝트도 만듭니다.

이 연습에서는 다음과 같은 내용을 다룹니다.

  • 새 프로젝트 만들기

  • 컨트롤 디자인

  • 컨트롤에 사용자 지정 속성 추가

  • 컨트롤을 테스트할 프로젝트 추가

  • 응용 프로그램에 컨트롤 배치

  • 응용 프로그램 실행

사전 요구 사항

이 항목에서는 사용자가 C++ 언어의 기본적인 사항을 알고 있는 것으로 가정합니다. 이제 C++를 배우기 시작하는 초보자는 Herb Schildt가 쓴 "C++ Beginner's Guide"(https://go.microsoft.com/fwlink/?LinkId=115303)를 참조하는 것이 좋습니다.

비디오에 링크 비디오 데모를 보려면 Video How to: Creating a Windows Forms Control (C++)을 참조하십시오.

새 프로젝트 만들기

이 단원에서 사용할 Windows Forms 컨트롤 프로젝트 템플릿은 다른 컨트롤을 포함하는 합성 컨트롤인 사용자 정의 컨트롤을 만듭니다.

또는 Control 클래스(코드에서 직접 컨트롤을 그리는 경우)나 Component 클래스(UI가 없는 컨트롤)에서 직접 클래스를 파생하여 Windows Forms 컨트롤을 만들 수도 있습니다.

새로운 Windows Forms 컨트롤 프로젝트를 만들려면

  1. 파일 메뉴에서 새로 만들기를 클릭한 다음 프로젝트...를 클릭합니다.

  2. 프로젝트 형식 창의 Visual C++ 노드에서 CLR을 선택한 다음 Visual Studio에 설치되어 있는 템플릿 창에서 Windows Forms 컨트롤 라이브러리를 선택합니다.

    프로젝트의 이름(예: clickcounter)을 입력합니다.

    솔루션에는 다른 이름(예: controlandtestapp)을 입력합니다.

    기본 위치를 적용하거나, 원하는 위치를 입력하거나, 원하는 디렉터리를 찾아 선택할 수 있습니다.

  3. Windows Forms 디자이너가 열리고 컨트롤 디자인 화면에 배치할 컨트롤을 추가할 수 있는 영역이 표시됩니다.

컨트롤 디자인

이 단계에서는 컨트롤 디자인 화면에 Label 컨트롤을 추가합니다. 그런 다음 컨트롤 자체와 이 컨트롤에 포함된 Label 컨트롤에 대한 몇 가지 속성을 설정합니다.

사용자 정의 컨트롤의 속성을 설정하려면

  1. 속성 창이 열려 있지 않으면 보기 메뉴에서 속성 창을 클릭합니다.

    컨트롤을 클릭하여 선택하고 다음과 같이 그 속성을 설정합니다.

    • Size 속성을 100, 100으로 설정합니다.

    • BorderStyle을 Fixed3D로 설정합니다.

      컨트롤을 응용 프로그램에 배치한 후에는 레이블 경계가 표시됩니다.

  2. 도구 상자 창이 표시되어 있지 않으면 보기 메뉴에서 도구 상자를 선택합니다.

    Label 컨트롤을 도구 상자에서 디자인 화면으로 끌어 컨트롤의 중간에 놓습니다.

    다음과 같이 레이블 속성을 설정합니다.

    • BorderStyle을 FixedSingle로 설정합니다.

    • Text를 숫자 0으로 설정합니다.

    • Autosize를 False로 설정합니다.

    • Size를 30, 20으로 변경합니다.

    • TextAlign을 MiddleCenter로 설정합니다.

    Name 속성(코드에서 참조하는 이름)은 변경하지 말고 label1로 그대로 둡니다. 컨트롤은 다음과 유사해야 합니다.

    컨트롤의 레이아웃

  3. 레이블을 두 번 클릭하여 레이블 Click 이벤트(레이블의 기본 이벤트)에 대한 이벤트 처리기를 추가합니다.

  4. clickcounter.h 파일이 편집 영역에 빈 이벤트 처리기 메서드와 함께 표시됩니다.

    참고:

    작업 공간이 더 많이 필요하면 도구 상자나 속성 창의 닫기 상자를 클릭하여 창을 닫거나 고정 해제하여 창이 자동으로 숨겨지도록 합니다.

  5. label1_Click 메서드의 여는 중괄호 뒤로 커서를 이동하고 Enter 키를 누른 후 다음을 입력합니다.

    int temp = System::Int32::Parse(label1->Text);
    temp++;
    label1->Text = temp.ToString();
    

    범위 확인 연산자(::), 점 연산자(.) 또는 화살표 연산자(->)를 입력하면 IntelliSense에서 선택할 수 있는 항목의 목록을 자동으로 표시합니다. 항목을 선택하고 Tab 키 또는 Enter 키를 누르거나 항목을 두 번 클릭하여 해당 항목을 코드에 삽입할 수 있습니다.

    또한 메서드의 여는 괄호를 입력하면 메서드의 각 오버로드에 대한 유효한 인수 형식이 Visual Studio에 표시됩니다.

컨트롤에 사용자 지정 속성 추가

이 단계에서는 컨트롤에 표시되는 숫자를 사용자가 컨트롤의 임의의 위치를 클릭할 때 하나씩 커지도록 할지 아니면 사용자가 레이블을 클릭할 때 하나씩 커지도록 할지를 결정할 수 있는 사용자 지정 속성을 정의합니다.

컨트롤에 사용자 지정 속성을 추가하려면

  1. clickcounterControl.h 파일의 맨 위에 있는 첫 번째 public 범위 표시기의 콜론 뒤에 커서를 놓고 Enter 키를 누른 후 다음 코드를 입력합니다.

    property bool ClickAnywhere {
        bool get() {
            return (label1->Dock == DockStyle::Fill);
        }
        void set(bool val) {
            if (val) 
                label1->Dock = DockStyle::Fill;
            else 
                label1->Dock = DockStyle::None;
        }
    }
    

    컨트롤의 ClickAnywhere 속성을 true로 설정하면 레이블의 Dock 속성이 DockStyle::Fill로 설정되므로 레이블이 전체 컨트롤 화면에 꽉 차게 됩니다. 이렇게 하면 컨트롤 화면에서 임의의 지점을 클릭할 때 레이블 Click 이벤트가 발생하고 레이블의 숫자가 하나 증가합니다.

    ClickAnywhere 속성을 기본값인 false로 설정하면 레이블의 Dock 속성이 DockStyle::None으로 설정됩니다. 이 경우 레이블이 컨트롤을 꽉 채우지 않으므로 컨트롤에서 레이블 경계 안쪽을 클릭해야 레이블 Click 이벤트가 발생하고 숫자가 하나 증가합니다.

  2. 사용자 정의 컨트롤을 빌드합니다. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

    아무런 오류가 없으면 clickcounter.dll이라는 파일 이름으로 Windows Forms 컨트롤이 생성됩니다. 이 파일은 프로젝트 디렉터리 구조에서 찾을 수 있습니다.

컨트롤을 테스트할 프로젝트 추가

이 단계에서는 clickcounter 컨트롤의 인스턴스를 폼에 배치할 Windows Forms 응용 프로그램 프로젝트를 만듭니다.

참고:

컨트롤을 테스트하기 위해 여기서 만드는 Windows Forms 응용 프로그램은 Visual C++를 사용하여 작성하거나 C# 또는 Visual Basic 같은 다른 .NET 언어를 사용하여 작성할 수 있습니다.

Windows Forms 응용 프로그램 프로젝트를 만들려면

  • 파일 메뉴에서 새로 만들기를 선택한 다음 프로젝트...를 클릭합니다.

솔루션 탐색기에서 controlandtestapp 솔루션을 마우스 오른쪽 단추로 클릭하고 추가를 가리킨 다음 새 프로젝트...를 클릭하여 프로젝트를 추가할 수도 있습니다.

  1. 프로젝트 형식 창의 Visual C++ 노드에서 CLR을 선택한 다음 Visual Studio에 설치되어 있는 템플릿 창에서 Windows Forms 응용 프로그램을 선택합니다.

    프로젝트의 이름(예: testapp)을 입력합니다.

    솔루션 드롭다운 목록에서 새 솔루션 만들기 기본 설정을 적용하는 대신 솔루션에 추가를 선택한 다음 확인을 클릭합니다.

  2. 이 그림처럼 새 프로젝트의 Windows Forms 디자이너가 열리고 Form1이라는 새 폼이 표시됩니다.

    새로 만든 폼

도구 상자에 컨트롤을 추가하려면

  1. 컨트롤에 참조를 추가합니다. 프로젝트 메뉴에서 참조를 선택하거나 솔루션 탐색기에서 testapp 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조를 클릭합니다.

    새 참조 추가 단추를 클릭하고 이 솔루션의 다른 프로젝트에 대한 참조를 추가하기 위해 프로젝트 탭을 클릭한 다음 clickcounter 프로젝트를 선택합니다. 확인을 두 번 클릭합니다.

  2. 도구 상자 창이 표시되지 않으면 보기 메뉴에서 도구 상자를 선택합니다.

  3. 도구 상자를 마우스 오른쪽 단추로 클릭하고 항목 선택을 클릭합니다.

    찾아보기 단추를 클릭하고 솔루션 디렉터리 구조에서 clickcounter.dll 파일을 찾습니다.이 파일을 선택하고 열기를 클릭합니다.

    clickcounter 컨트롤이 .NET Framework 구성 요소 목록에 표시되고 확인 표시가 옆에 나타납니다. 확인을 클릭합니다.

    기본 "기어" 아이콘과 함께 컨트롤이 도구 상자에 나타납니다.

응용 프로그램에 컨트롤 배치

이 단계에서는 컨트롤의 두 인스턴스를 응용 프로그램 폼에 배치하고 해당 속성을 설정합니다.

컨트롤의 인스턴스를 폼에 배치하려면

  1. clickcounter 컨트롤의 두 인스턴스를 도구 상자에서 끌어 옵니다. 이 인스턴스를 서로 겹치지 않게 폼에 배치합니다.

    폼을 더 넓히려는 경우 폼을 클릭하여 선택하고 선택 핸들 중 하나를 바깥쪽으로 끕니다.

  2. 속성 창이 표시되지 않으면 보기 메뉴에서 속성을 선택합니다.

    속성이 범주별로 정리되어 있는 경우 ClickAnywhere 속성은 속성 창의 기타 섹션에 있습니다.

  3. 폼에서 clickcounter 컨트롤의 인스턴스 하나를 클릭하여 선택한 다음 해당 ClickAnywhere 속성을 true로 설정합니다.

  4. clickcounter 컨트롤의 다른 인스턴스의 ClickAnywhere 속성은 변경하지 말고 기본값인 false로 설정합니다.

  5. 솔루션 탐색기에서 testapp 프로젝트를 마우스 오른쪽 단추로 클릭하고 시작 프로젝트로 설정을 선택합니다.

  6. 빌드 메뉴에서 솔루션 다시 빌드를 선택합니다.

    두 프로젝트가 오류 없이 빌드됩니다.

응용 프로그램 실행

이 단계에서는 응용 프로그램을 실행하고 컨트롤을 클릭하여 동작을 테스트합니다.

응용 프로그램을 테스트하려면

  1. 디버그 메뉴에서 디버깅 시작을 선택합니다.

    컨트롤의 두 인스턴스가 표시된 폼이 나타납니다.

  2. 응용 프로그램을 실행하고 두 clickcounter 컨트롤을 모두 클릭합니다.

    • ClickAnywhere가 true로 설정되어 있는 컨트롤을 클릭합니다.

      컨트롤에서 임의의 위치를 클릭할 때마다 레이블의 숫자가 하나씩 증가합니다.

    • ClickAnywhere가 false로 설정되어 있는 컨트롤을 클릭합니다.

      레이블의 표시된 경계 안쪽을 클릭할 때만 레이블의 숫자가 하나씩 증가합니다. 다음 스크린 샷은 몇 차례 클릭한 후에 응용 프로그램이 어떤 모습인지를 보여 줍니다.

컨트롤을 보여 주는 응용 프로그램 테스트

  1. Form1 창의 오른쪽 위 모퉁이에 있는 닫기 상자를 클릭하여 테스트 응용 프로그램을 닫습니다.

다음 단계

이전:.NET Framework를 사용하여 Windows Forms 응용 프로그램 만들기(C++) | 다음:DirectX를 사용하여 게임 만들기(C++)

참고 항목

작업

Visual C++ 둘러보기

참조

System.Windows.Forms

기타 리소스

Windows 기반 응용 프로그램 만들기

Windows Forms 컨트롤