유용한 정보

[clr] Window Forms 컨트롤 라이브러리 MFC에서 사용하기 사용

DevReff 2025. 5. 6. 12:39
728x90
728x90
SMALL

1. CLR (Common Language Runtime)은? 

    - CLR은 마이크로소프트의 .NET 프레임워크에서 프로그램을 실행하는 환경입니다. 
    - CLR은 C#, VB.NET, F# 등 다양한 언어로 작성된 코드를 실행할 수 있도록 지원합니다. 
    - CLR은 코드의 실행, 메모리 관리 (가비지 컬렉션), 보안, 예외 처리 등의 기능을 제공합니다. 

 

2. Window Forms 컨트롤 라이브러리 사용

1) C#에서 라이브러리 (.dll)을 생성한다.

2) MFC 프로젝트를 생성한다.

3) MFC 프로젝트의 속성 중에서 아래와 같이 <공용 언어 런타임 지원> 속성을 .NET Framework 런타임 지원(/clr)로 설정한다.

반응형

4) 윈도우를 생성한 후 컨트롤과 관련 된코드를 추가한다. (예: 다이얼로그)

    - 헤더파일(.h)에 컨트롤 라이브러리에서 사용하려는 컨트롤을 아래와 같은 형식으로 변수로 선언한다.

      CWinFormsControl<컨트롤_라이브러리의_nammespace:: 컨트롤_라이브러리의_컨트롤명> 변수명;

      예: CWinFormsControl<MyControls::MyLabel> m_Name;

 

    - 소스파일(.cpp)의 DoDataExchange(CDataExchange* pDX) 함수에서

      선언한 변수와 컨트롤을 연결하기 위해서 아래와 같이 코드를 추가한다.

      DDX_ManagedControl(pDX, 컨트롤ID, 변수명);

      예: DDX_ManagedControl(pDX, IDC_MYLABEL, m_Name);

 

   - 컨트롤에서 발생하는 이벤트를 처리하기 위해서는 아래처럼 코드를 추가한다.

     헤더파일에 아래와 같은 코드를 추가하고

          public:

          BEGIN_DELEGATE_MAP( CMFCTestDialog )
               //EVENT_DELEGATE_ENTRY( 이벤트명칭, 이벤트발생컨트롤^, 이벤트정보를담고있는매개변수^ )
               EVENT_DELEGATE_ENTRY( OnClick, System::Object^, System::EventArgs^ )
          END_DELEGATE_MAP()

          //void 이벤트명 (이벤트발생컨트롤^ 변수명1, 이벤트정보를담고있는매개변수^ 변수명2);
          예: void OnClick( System::Object^ sender, System::EventArgs^ e );

 

       그리고 소스파일(.cpp)에서 컨트롤이 표시되기 전에 처리되는 함수 즉, 다이얼로그의 OnInitDialog() 함수 속에

       아래와 같은 형식으로 코드를 추가한다.

           //변수명.이벤트명 += MAKE_DELEGATE( System::EventHandler, OnClick );
           예: m_ctrl1.GetControl()->button1->Click += MAKE_DELEGATE( System::EventHandler, OnClick );

 

        BEGIN_DELEGATE_MAP 매크로는, 
        Windows Form 컨트롤에서 발생한 이벤트(Managed Event)에 대한 Call-Back 처리가 가능하도록 연결다. 
        그러므로 .NET 사용자 컨트롤에서 발생한 버튼 클릭 이벤트는 .NET 코드에서 먼저 처리되고, 
        연결된 C++ 다이얼로그 클래스에 구현된 OnClick 함수를 통하여 처리된다.

 

728x90
728x90
LIST