本項では視点変更ダイアログクラスの大まかな機能を実装していきます。
スライダーの値の範囲を設定する処理を追加して、前項で追加したスライダーの変更を検知するためのメッセージハンドラーに意図したスライダーが変更されたか解析する処理を追加してみましょう。
視点変更ダイアログクラスの大まかな機能を実装していきます。
1. メンバー変数に CSTLViewerView* を保持しているので前方宣言しておきます。
【CViewChangeDlg.h】
#pragma once
#include "afxdialogex.h"
class CSTLViewerView;
// CViewChangeDlg ダイアログ
2. メンバー変数で CSTLViewerView* を保持するためにコンストラクタで渡すように変更します。
【CViewChangeDlg.h】
class CViewChangeDlg : public CDialogEx
{
DECLARE_DYNAMIC(CViewChangeDlg)
public:
CViewChangeDlg(CSTLViewerView* pParent = nullptr); // 標準コンストラクター
virtual ~CViewChangeDlg();
CSTLViewerView を参照するためのヘッダーファイルを追加しておきます。
【CViewChangeDlg.cpp】
// CViewChangeDlg.cpp : 実装ファイル
//
#include "pch.h"
#include "STLViewer.h"
#include "afxdialogex.h"
#include "STLViewerDoc.h"
#include "STLViewerView.h"
#include "CViewChangeDlg.h"
メンバー変数で CSTLViewerView* を保持するためにコンストラクタで渡すように変更します。
【CViewChangeDlg.cpp】
CViewChangeDlg::CViewChangeDlg(CSTLViewerView* pParent /*=nullptr*/)
: CDialogEx(IDD_VIEW_CHANGE, pParent)
, m_pView(pParent)
{
}
スライダーの範囲を設定しておきます。
【CViewChangeDlg.cpp】
BOOL CViewChangeDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// スライダー範囲設定
m_ctrlSliderEyeX.SetRange(-1000, 1000, TRUE);
m_ctrlSliderEyeY.SetRange(-1000, 1000, TRUE);
m_ctrlSliderEyeZ.SetRange(-1000, 1000, TRUE);
m_ctrlSliderCenterX.SetRange(-1000, 1000, TRUE);
m_ctrlSliderCenterY.SetRange(-1000, 1000, TRUE);
m_ctrlSliderCenterZ.SetRange(-1000, 1000, TRUE);
return TRUE; // return TRUE unless you set the focus to a control
// 例外 : OCX プロパティ ページは必ず FALSE を返します。
}
スライダー変更時の処理を追加しておきます。
【CViewChangeDlg.cpp】
void CViewChangeDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// スライダー変更検知
switch (pScrollBar->GetDlgCtrlID()) {
case IDC_SLIDER_EYE_X:
case IDC_SLIDER_EYE_Y:
case IDC_SLIDER_EYE_Z:
case IDC_SLIDER_CENTER_X:
case IDC_SLIDER_CENTER_Y:
case IDC_SLIDER_CENTER_Z:
break;
}
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}