CPropertieswnd에서의 데이터 입/출력
PropertyWnd는 각 그리드의 값이 변경되면 AFX_WM_PROPERTY_CHANGED 메세지를 발생시킵니다.고로
ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, &CPropertiesWnd::OnPropertyGridNotify)
위와 같이 해당 메세지가 발생하면 바로 함수를 호출하게 메세지맵에 등록하면 됩니다.
함수 이름은 뭐 맘에 드시는데로 하시면 되고요. 리턴형은 RESULT, 인자는 WPARAM과 LPARAM으로 받으시면 됩니다.
이중 LPARAM이 변경메시지가 발생한 CMFCPropertyGridProperty객체의 포인터입니다.
요놈을 조사하면 원하는 값을 변경할 수 있지요~^^
체크하는 방식은 이렇게~
CString str;
str.Format(TEXT("%s"),pProp->GetName());
if ( str.Compare(TEXT("Left")) == 0) {
data = (CxArea*)pProp->GetData();//이건 프로퍼티 초기화할때 각 객체마다 SetData로 포인터 넘긴걸 받아오는 겁니다.
if (data == NULL) break;//예외처리~!!
_variant_t v = pProp->GetValue();//이건 변경되거나 수정된값!!
data->m_rc[0] = v;//v는 =연산자를 오버라이딩해서 텍스트값을 해당 변수형태로 캐스팅해줍니다.
}
보통 수같은 경우 위와 같이 처리하면 되는데 만약 DropList를 이용해서 변경할 경우는 따로 처리를 해줘야 합니다.
variant_t v = pProp->GetValue();//그리드의 값을 얻고요.
std::wstring text = (LPCTSTR)(_bstr_t)v;//전 항상 유니코드로 작성하기에... 이런식으로 케스팅해줘야 합니다~^^
std::wstring option1 = TEXT("오른쪽열림");
if (text.compare(option1)==0) {
;//여기에서 GetData를 호출해 원하는 작업을 수행하시면 됩니다~^^
}