컨트롤에 속성 추가(ATL 자습서, 3부)
IPolyCtl
은 컨트롤의 사용자 지정 메서드 및 속성을 포함하는 인터페이스이며, 컨트롤에 속성을 추가합니다.
프로젝트에 속성 정의를 추가하려면
클래스 뷰에서 분기를 확장합니다
Polygon
.를 마우스 오른쪽 단추로 클릭합니다
IPolyCtl
.바로 가기 메뉴에서 추가를 클릭한 다음 속성 추가를 클릭합니다. 속성 추가 마법사가 나타납니다.
속성 이름으로 입력
Sides
합니다.속성 형식의 드롭다운 목록에서 .를 선택합니다
short
.확인을 클릭하여 속성 추가를 완료합니다.
솔루션 탐색기 Polygon.idl을 열고 인터페이스 끝에
IPolyCtl : IDispatch
있는 다음 줄을 바꿉니다.short get_Sides(); void set_Sides(short value);
다음과 같이 바꿉니다.
[propget, id(1), helpstring("property Sides")] HRESULT Sides([out, retval] short *pVal); [propput, id(1), helpstring("property Sides")] HRESULT Sides([in] short newVal);
솔루션 탐색기 PolyCtl.h를 열고 다음 줄을 다음 정의
m_clrFillColor
다음에 추가합니다.short m_nSides; STDMETHOD(get_Sides)(short* pval); STDMETHOD(put_Sides)(short newval);
이제 속성을 설정하고 검색할 기본 함수와 속성을 저장할 변수가 있지만 그에 따라 함수를 구현해야 합니다.
get 및 put 메서드를 업데이트하려면
의 기본값을
m_nSides
설정합니다. PolyCtl.h의 생성자에 선을 추가하여 기본 셰이프를 삼각형으로 만듭니다.m_nSides = 3;
Get
및Put
메서드를 구현합니다.get_Sides
및put_Sides
함수 선언이 PolyCtl.h에 추가되었습니다. 이제 다음을 사용하여get_Sides
put_Sides
PolyCtl.cpp 코드를 추가합니다.STDMETHODIMP CPolyCtl::get_Sides(short* pVal) { *pVal = m_nSides; return S_OK; } STDMETHODIMP CPolyCtl::put_Sides(short newVal) { if (2 < newVal && newVal < 101) { m_nSides = newVal; return S_OK; } else { return Error(_T("Shape must have between 3 and 100 sides")); } }
메서드는 get_Sides
포인터를 통해 속성의 Sides
현재 값을 반환합니다 pVal
. 메서드에서 put_Sides
코드는 사용자가 속성을 허용 가능한 값으로 설정 Sides
하도록 합니다. 최소값은 3이어야 하며 점 배열이 각 면에 사용되므로 최대값에 대해 100은 적절한 제한입니다.
이제 .라는 Sides
속성이 있습니다. 다음 단계에서는 그리기 코드를 사용하도록 변경합니다.