UserControlのイベント取得
説明
こちらで作成したダイアログを例に、UserControlの値が変更された時のイベントを取得する方法を紹介します。
イベントを取得して必要な処理を行うことができます。
Observerを継承
- UserControlObserverクラスを継承
- UserControlChanged関数をオーバーライド
#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) {
}
else if (ev.GetSource() == &fill) {
}
else if (ev.GetSource() == &material) {
}
else if (ev.GetSource() == &zonecat) {
}
else if (ev.GetSource() == &layer) {
}
else if (ev.GetSource() == &profile) {
}
else if (ev.GetSource() == &buildingmaterial) {
}
else if (ev.GetSource() == &textPopup) {
if (newValue == 1) {
}
else if (newValue == 2){
}
else if (newValue == 3) {
}
}
else if (ev.GetSource() == &uc258) {
}
else if (ev.GetSource() == &uc259) {
}
else if (ev.GetSource() == &uc261) {
}
else if (ev.GetSource() == &uc262) {
}
else if (ev.GetSource() == &popupMenu) {
if (newValue == 1) {
}
else if (newValue == 2) {
}
else if (newValue == 3) {
}
}
}
UserControlのイベント取得
説明
こちらで作成したダイアログを例に、UserControlの値が変更された時のイベントを取得する方法を紹介します。
イベントを取得して必要な処理を行うことができます。
Observerを継承
オーバーライドした関数を実装する