UserControlのイベント取得

 

UserControlのイベント取得

説明

こちらで作成したダイアログを例に、UserControlの値が変更された時のイベントを取得する方法を紹介します。
イベントを取得して必要な処理を行うことができます。

Observerを継承

  • UserControlObserverクラスを継承
  • UserControlChanged関数をオーバーライド

	// UCDialog.h
	
	#include "APIEnvir.h"
	#include "ACAPinc.h"
	#include "APICommon.h"
	
	
	#include "DG.h"
	#include "DGModule.hpp"
	
	#include "UC.h"
	#include "UCModule.hpp"
	#include "UCPopup.hpp"
	
	class UCDialog
		: public DG::ModalDialog
		, public DG::PanelObserver
		, public DG::UserControlObserver
		, public DG::CompoundItemObserver
	{
	public:
		UCDialog();
		~UCDialog();
	
	protected:
		virtual void UserControlChanged(const DG::UserControlChangeEvent& ev) override;
		
	private:
		void Initialize();
	
	private:
	
		enum {
			penID = 1,
			fillID,
			materialID,
			zonecatID,
			layerID,
			profileID,
			buildingmaterialID,
	
			textPopupID,
			uc258ID,
			uc259ID,
			uc261ID,
			uc262ID,
			popupMenuID,
		};
	
		UC::UC257 pen;
		UC::UC257 fill;
		UC::UC257 material;
		UC::UC257 zonecat;
		UC::UC257 layer;
		UC::UC257 profile;
		UC::UC257 buildingmaterial;
	
		UC::TextPopup textPopup;
		UC::UC258 uc258;
		UC::UC259 uc259;
		UC::UC261 uc261;
		UC::UC262 uc262;
		UC::PopupMenu popupMenu;
	
		DG::LeftText penText;
		DG::LeftText fillText;
		DG::LeftText materialText;
		DG::LeftText zonecatText;
		DG::LeftText layerText;
		DG::LeftText profileText;
		DG::LeftText buildingmaterialText;	
		DG::LeftText textPopupText;
		DG::LeftText uc258Text;
		DG::LeftText uc259Text;
		DG::LeftText uc261Text;
		DG::LeftText uc262Text;
		DG::LeftText popupMenuText;
	
	};
	
	
	

オーバーライドした関数を実装する

  • ObserverクラスにAttachする(今回は自身)
  • AttachしているUserControlアイテムに変更があった場合UserControlChanged関数が呼ばれる

	
	UCDialog::UCDialog()
		: DG::ModalDialog(ACAPI_GetOwnResModule(), ID_UCDIALOG_ID, ACAPI_GetOwnResModule())
		, pen(GetReference(), penID)
		, fill(GetReference(), fillID)
		, material(GetReference(), materialID)
		, zonecat(GetReference(), zonecatID)
		, layer(GetReference(), layerID)
		, profile(GetReference(), profileID)
		, buildingmaterial(GetReference(), buildingmaterialID)
		, textPopup(GetReference(), textPopupID)
		, uc258(GetReference(), uc258ID)
		, uc259(GetReference(), uc259ID)
		, uc261(GetReference(), uc261ID)
		, uc262(GetReference(), uc262ID)
		, popupMenu(GetReference(), popupMenuID)
	
		, penText(GetReference(), DG::Rect(2, 8, 100, 28))
		, fillText(GetReference(), DG::Rect(2, 38, 100, 58))
		, materialText(GetReference(), DG::Rect(2, 68, 100, 88))
		, zonecatText(GetReference(), DG::Rect(2, 98, 100, 118))
		, layerText(GetReference(), DG::Rect(2, 128, 100, 148))
		, profileText(GetReference(), DG::Rect(2, 158, 100, 178))
		, buildingmaterialText(GetReference(), DG::Rect(2, 188, 100, 208))
		, textPopupText(GetReference(), DG::Rect(2, 218, 100, 238))
		, uc258Text(GetReference(), DG::Rect(2, 248, 100, 268))
		, uc259Text(GetReference(), DG::Rect(2, 318, 100, 338))
		, uc261Text(GetReference(), DG::Rect(2, 368, 100, 388))
		, uc262Text(GetReference(), DG::Rect(2, 492, 100, 528))
		, popupMenuText(GetReference(), DG::Rect(2, 608, 100, 638))
	{
		Attach(*this);
		AttachToAllItems(*this);
		Initialize();
	}
	
	
	
	void UCDialog::UserControlChanged(const DG::UserControlChangeEvent& ev)
	{
		int newValue = ev.GetSource()->GetValue();
		
		if (ev.GetSource() == &pen) {
			// do something
		}
		else if (ev.GetSource() == &fill) {
			// do something
		}
		else if (ev.GetSource() == &material) {
			// do something
		}
		else if (ev.GetSource() == &zonecat) {
			// do something
		}
		else if (ev.GetSource() == &layer) {
			// do something
		}
		else if (ev.GetSource() == &profile) {
			// do something
		}
		else if (ev.GetSource() == &buildingmaterial) {
			// do something
		}
		else if (ev.GetSource() == &textPopup) {
			// do something
			if (newValue == 1) {
			}
			else if (newValue == 2){
			}
			else if (newValue == 3) {
			}
		}
		else if (ev.GetSource() == &uc258) {
			// do something
		}
		else if (ev.GetSource() == &uc259) {
			// do something
		}
		else if (ev.GetSource() == &uc261) {
			// do something
		}
		else if (ev.GetSource() == &uc262) {
			// do something
		}
		else if (ev.GetSource() == &popupMenu) {
			// do something
			if (newValue == 1) {
			}
			else if (newValue == 2) {
			}
			else if (newValue == 3) {
			}
		}
	
	}