ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CPropertieswnd에서의 데이터 입/출력
    Window Programming/Feature Pack 2008. 12. 7. 23:10
    728x90

    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를 호출해 원하는 작업을 수행하시면 됩니다~^^
    }

    댓글

Designed by black7375.