掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CPropertyPageでDoDataExchangeとOnInitDialogが呼び出されない (ID:73689)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
CPropertyPageから派生したクラスをCPropertySheetにAddPageするような処理を書いているのですが、2ページ目に追加したプロパティページのDoDataExchangeとOnInitDialogが呼び出されません。1ページ目に追加したプロパティページは正常に動作します。以下の様なソースです。 IMPLEMENT_DYNAMIC(CWipeAttributeDetailPage2, CPropertyPage) CWipeAttributeDetailPage2::CWipeAttributeDetailPage2(CWnd* pParent) : CPropertyPage(CWipeAttributeDetailPage2::IDD) , enable_bright(FALSE) , enable_contrast(FALSE) , enable_blur(FALSE) , flip_vertical(FALSE) , flip_horizontal(FALSE) , flip_hv(FALSE) , enable_negaposi(FALSE) , enable_sepia(FALSE) { } CWipeAttributeDetailPage2::~CWipeAttributeDetailPage2() { } void CWipeAttributeDetailPage2::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); DDX_Control(pDX, IDC_SLIDER_BRIGHTNESS, slider_bright); DDX_Control(pDX, IDC_SLIDER_CONT, slider_contrast); DDX_Control(pDX, IDC_SLIDER_BLUR_INTENSITY, slider_blur); DDX_Check(pDX, IDC_CHECK_USE_BRIGHT, enable_bright ); DDX_Check(pDX, IDC_CHECK_USE_CONT, enable_contrast ); DDX_Check(pDX, IDC_CHECK_USE_BLUR, enable_blur ); DDX_Check(pDX, IDC_CHECK_VFLIP, flip_vertical ); DDX_Check(pDX, IDC_CHECK_HFLIP, flip_horizontal ); DDX_Check(pDX, IDC_CHECK_HVFLIP, flip_hv ); DDX_Check(pDX, IDC_CHECK_NEGAPOSI, enable_negaposi ); DDX_Check(pDX, IDC_CHECK_SEPIA, enable_sepia ); } BEGIN_MESSAGE_MAP(CWipeAttributeDetailPage2, CPropertyPage) ON_BN_CLICKED(IDC_CHECK_USE_BRIGHT, &CWipeAttributeDetailPage2::OnBnClickedCheckUseBright) ON_BN_CLICKED(IDC_CHECK_USE_CONT, &CWipeAttributeDetailPage2::OnBnClickedCheckUseCont) ON_BN_CLICKED(IDC_CHECK_USE_BLUR, &CWipeAttributeDetailPage2::OnBnClickedCheckUseBlur) ON_BN_CLICKED(IDC_CHECK_VFLIP, &CWipeAttributeDetailPage2::OnBnClickedCheckVflip) ON_BN_CLICKED(IDC_CHECK_HFLIP, &CWipeAttributeDetailPage2::OnBnClickedCheckHflip) ON_BN_CLICKED(IDC_CHECK_HVFLIP, &CWipeAttributeDetailPage2::OnBnClickedCheckHvflip) ON_BN_CLICKED(IDC_CHECK_NEGAPOSI, &CWipeAttributeDetailPage2::OnBnClickedCheckNegaposi) ON_BN_CLICKED(IDC_CHECK_SEPIA, &CWipeAttributeDetailPage2::OnBnClickedCheckSepia) //ON_WM_CREATE() ON_WM_HSCROLL() END_MESSAGE_MAP() BOOL CWipeAttributeDetailPage2::OnInitDialog() { CPropertyPage::OnInitDialog(); slider_bright.SetRange(0,1001); slider_contrast.SetRange(0,1001); slider_blur.SetRange(0,1001); slider_bright.SetPos(501); slider_contrast.SetPos(1001); slider_blur.SetPos(501); UpdateData(FALSE); return TRUE; } afx_msg int CWipeAttributeDetailPage2::OnCreate( LPCREATESTRUCT lpCreateStruct ) { //CDialog::OnCreate( lpCreateStruct ); return 0; } afx_msg void CWipeAttributeDetailPage2::OnHScroll( UINT nSBCode , UINT nPos , CScrollBar* pScrollBar ) { CPropertyPage::OnHScroll(nSBCode, nPos, pScrollBar); CSliderCtrl *slider(NULL); if( *pScrollBar == slider_bright ){ slider = &slider_bright; }else if( *pScrollBar == slider_contrast ){ slider = &slider_contrast; } else if( *pScrollBar == slider_blur ){ slider = &slider_blur; } int page = slider->GetPageSize(); double range = (double)slider->GetRangeMax() - (double)slider->GetRangeMin(); int max(0), min(0); slider->GetRange( min, max ); double v(0.0); switch(nSBCode){ case SB_THUMBPOSITION: case SB_THUMBTRACK: v = (double)(nPos) / range - 0.5f; v = 0.5f + v; break; case SB_PAGELEFT: v = (double)(nPos-page) / range - 0.5f; v = 0.5f + v; break; case SB_PAGERIGHT: v = (double)(nPos-page) / range - 0.5f; v = 0.5f + v; break; default: break; } if( *pScrollBar == slider_bright ){ wipe->brightness = v; }else if( *pScrollBar == slider_contrast ){ wipe->contrast = v; } else if( *pScrollBar == slider_blur ){ wipe->blur_intensity = (int)(v * 100.0); } UpdateData(FALSE); view->NotifyRender(); } // CWipeAttributeDetailPage2 message handlers void CWipeAttributeDetailPage2::ReflectWipeAttributes( const boost::shared_ptr<Wipe> &_wipe ) { if( _wipe.get() ) wipe = _wipe; if( ! wipe ) return; // todo enable_bright = static_cast<BOOL>(wipe->use_brightness); enable_contrast = static_cast<BOOL>(wipe->use_contrast); enable_blur = static_cast<BOOL>(wipe->use_blur); flip_vertical = static_cast<BOOL>(wipe->flip_vertical); flip_horizontal = static_cast<BOOL>(wipe->flip_horizontal); flip_hv = static_cast<BOOL>(wipe->flip_hv); enable_negaposi = static_cast<BOOL>(wipe->use_negaposi); enable_sepia = static_cast<BOOL>(wipe->use_sepia); int pos = (int)(wipe->brightness * 1001.0); slider_bright.SetPos(pos); pos = (int)(wipe->contrast * 1001.0); slider_contrast.SetPos(pos); pos = (int)(wipe->blur_intensity * 1001.0); slider_contrast.SetPos(pos); UpdateData(FALSE); } void CWipeAttributeDetailPage2::OnBnClickedCheckUseBright() { UpdateData(); wipe->use_brightness = static_cast<bool>(this->enable_bright); } void CWipeAttributeDetailPage2::OnBnClickedCheckUseCont() { UpdateData(); wipe->use_contrast = static_cast<bool>(this->enable_contrast); } void CWipeAttributeDetailPage2::OnBnClickedCheckUseBlur() { UpdateData(); wipe->use_blur = static_cast<bool>(this->enable_blur); } void CWipeAttributeDetailPage2::OnBnClickedCheckVflip() { UpdateData(); wipe->flip_vertical = static_cast<bool>(this->flip_vertical); } void CWipeAttributeDetailPage2::OnBnClickedCheckHflip() { UpdateData(); wipe->flip_horizontal = static_cast<bool>(this->flip_horizontal); } void CWipeAttributeDetailPage2::OnBnClickedCheckHvflip() { UpdateData(); wipe->flip_hv = static_cast<bool>(this->flip_hv); } void CWipeAttributeDetailPage2::OnBnClickedCheckNegaposi() { UpdateData(); wipe->use_negaposi = static_cast<bool>(this->enable_negaposi); } void CWipeAttributeDetailPage2::OnBnClickedCheckSepia() { UpdateData(); wipe->use_sepia = static_cast<bool>(this->enable_sepia); }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.