VisualStudio.C++.C#2017. 6. 28. 15:13



 

개요

 

CMFCPropertyGridCtrl

 

1. Toolbox 에서 MFC PropertyGrid Control 선택하여 대화상자에 배치.


속성 Notify 를 True 로 하기.

- Notify 설정을 true 로해야  Property Grid 마우스 클릭등이 가능해진다.



2. 실행샷 보기.

Proprty Grid 포함만 시키고, 코드 전혀 추가 하지 않은 상태에서 실행해보면 아래 처럼 보인다.

파랑색박스 영역 : Property Grid 전체영역.
녹색부분 : 특정 프로퍼티 선택시 보이는 설명문 표시되는 자리. 속성설정에서 diable, enable 가능. 줄수 조절가능.
붉은색 부분 : 원래 Property 라는 컬럼이 보이는 자리인데 추가 설정하지 않으면 폭이 매우 좁게 보인다. 이 상태에서 마우스로 경계선 잡고 늘리면 폭은 늘어난다.


3. Propety Grid 멤버변수 추가.


대화상자에서 Property Grid 컨트롤 선택하여 우마우스클릭 메뉴에서 Add Variable.. 클릭하여 아래 붉은 박스처럼 멤버 변수 기록하고 버튼 Finish 클릭.



그럼 해당 대화상자 클래스에 멤버변수 추가 되고 이 변수명 m_PropGrid1 으로 핸들링 가능하다.


 public:


 CMFCPropertyGridCtrl m_PropGrid1;





 


 


 

Property Grid 에 요소들  추가.

 

1. 그룹 추가하기.

 

 void CCyPropPageSignalGen0_1::PropGrid1()
{
 CMFCPropertyGridProperty* pGroupInput = new CMFCPropertyGridProperty(_T("Input"));


 m_PropGrid1.AddProperty(pGroupInput);
}

위 코드 실행되면 아래 화면처럼 Input 이라는 그룹이 추가된다.



2. 그룹하위에 SubItem 추가하기.

- 상기 그룹 추가했던것 하단에 subitem 추가하는 코드 추가했다. 아래 녹색 글자들.

 void CCyPropPageSignalGen0_1::PropGrid1()
{
 CMFCPropertyGridProperty* pGroupInput = new CMFCPropertyGridProperty(_T("Input"));
 m_PropGrid1.AddProperty(pGroupInput);


 CMFCPropertyGridProperty* pPropEMAShort = new CMFCPropertyGridProperty(_T("EMAShort"), _T("None"), _T("Select object for EMAShort"));
 pPropEMAShort->AddOption(_T("None"));
 pPropEMAShort->AddOption(_T("here"));
 pPropEMAShort->AddOption(_T("threre"));
 pPropEMAShort->AddOption(_T("somewhere"));
 pPropEMAShort->AllowEdit(FALSE);

 pGroupInput->AddSubItem(pPropEMAShort); //
}


실행샷.

아래 붉은 박스 부분에 SubItem 추가된 것이 보이고 선택가능한 콤보도 보인다.


3. 색상선택기 추가해보기.



아래 녹색 코드부분이  색상 선택기 추가한것.

void CCyPropPageSignalGen0_1::InitPropGrid1()
{
 CMFCPropertyGridProperty* pGroupInput = new CMFCPropertyGridProperty(_T("Input"));
 m_PropGrid1.AddProperty(pGroupInput);

 CMFCPropertyGridProperty* pPropEMAShort = new CMFCPropertyGridProperty(_T("EMAShort"), _T("None"), _T("Select object for EMAShort"));
 pPropEMAShort->AddOption(_T("None"));
 pPropEMAShort->AddOption(_T("here"));
 pPropEMAShort->AddOption(_T("there"));
 pPropEMAShort->AddOption(_T("somewhere"));
 pPropEMAShort->AllowEdit(FALSE);

 pGroupInput->AddSubItem(pPropEMAShort); //


 CMFCPropertyGridProperty* pGroupChart = new CMFCPropertyGridProperty(_T("챠트설정"));
 m_PropGrid1.AddProperty(pGroupChart);

 CMFCPropertyGridColorProperty* pColorProp = new CMFCPropertyGridColorProperty(_T("선색상"), RGB(210, 192, 254), NULL, _T("선의 기본 색상을 지정합니다."));
 pColorProp->EnableOtherButton(_T("기타..."));
 pColorProp->EnableAutomaticButton(_T("기본값"), ::GetSysColor(COLOR_3DFACE));
 pGroupChart->AddSubItem(pColorProp);


실행샷.



 


 

 

CMFCPropertyGridCtrl 의 이벤트 받기.

 

CMFCPropertyGridCtrl 의 어떤 값을 변경한 경우 프레임웍에서 owner 측으로 AFX Message 중 AFX_WM_PROPERTY_CHANGED 메시지를 전송하므로 코드에서 메시지 핸들러를 추가해줘야 한다. 수동으로 메시지 맵과 핸들러 함수를 추가해도 되고 클래스 위저드에서 Custom 메시지 추가 기능 이용해서 추가해도 된다. 클래스 위저드에서 커스텀 메시지 추가하는 법 보기 -> http://igotit.tistory.com/1347

추가된 메시지 핸들러 함수. 
인자 
wParam : property list 의 control id.
lParam : 변경된 CMFCPropertyGridProperty 의 object pointer.  

이벤트 핸들러 함수내에서 어떤 속성이 변경되었는지 식별하는 방법. 

여러 방법 가능하여, 구현하기 나름이다.

 

예1 . 등록시 아이디 임의 할당하고 메시지 수신시 해당 아이디 인지 점검하는 방법.

1. 등록시 아이디 할당. 
new CMFCPropertyGridProperty(   , 1234 ) ; // 생성자의 마지막 인자에 1234 기록했다.

2. 이벤트 핸들러 함수내에서 아래와 같은 식으로 식별처리. 

 CMFCPropertyGridProperty* p_propgrid_property = (CMFCPropertyGridProperty*)lParam;
 if (p_propgrid_property->GetData() == 1234) 
 {

 }


예2. 등록시 캡션으로 등록한 이름으로 어떤 것이 변경되었는지 식별. 


1. 등록시 캡션. 

new CMFCPropertyGridProperty(_T("Line Color")   ,) ; // 생성자의 첫 인자에 Line Color 기록했다.

2. 이벤트 핸들러 함수내에서 문자열 비교로 식별처리. 

 CString cst = p_propgrid_property->GetName();
 if (cst.Compare(_T("Line Color")) == 0)
 {

 }






 
 


 


 본 글이 포함된 상위 정리 장소.

 

 Visual Studio/VC++/C/C# 활용정리 -> http://igotit.tistory.com/11

 


///1336.


Posted by 리치굿맨
TAG ,

댓글을 달아 주세요