ピクチャーボックスに画像ファイルをドロップした後の動作

[戻る]
えふ 2002/10/22(火) 15:24:03
Win2000 VC6.0SP5 MFCを使用しています。

ダイアログに貼り付けた2つのピクチャーボックスにドロップされた画像ファイルに対して、そ
れぞれ異なる別の関数(ダイアログの派生クラスのメンバ関数)を呼んで処理したいのですが、
以下の2点がわかりません。

1.作成したCStaticの派生クラスから、ダイアログ派生クラスのメンバ関数を呼ぶ方法
2.1つのCStatic派生クラスから、ピクチャーボックスに応じた関数を呼ぶ方法

コードイメージは以下の通りです。
よろしくお願いします。

<MyStatic.h>
class CMyStatic : public CStatic
{
  ...
}

<MyStatic.cpp>
void CMyStatic::OnDropFiles(HDROP hDropInfo)
{
  CStatic::OnDropFiles(hDropInfo);

  ★ここに、ピクチャーボックスに応じた、ダイアログ派生クラスのメンバ関数を呼びたい
  ★m_MyStatic1に対してはfunc1()、m_MyStatic2に対してはfunc2()を呼びたい
}

<MyDlg.h>
class CMyDlg : public CDialog
{
  ...

public:
  void func1();
  void func2();

private:
  CMyStatic m_MyStatic1;
  CMyStatic m_MyStatic2;
}

<MyDlg.cpp>
BOOL CMyDlg::OnInitDialog()
{
  CDialog::OnInitDialog();

  m_MyStatic1.SubclassDlgItem(IDC_MY_STATIC1, this);
  m_MyStatic2.SubclassDlgItem(IDC_MY_STATIC2, this);

  ...
}

dairygoods 2002/10/23(水) 13:18:50
> 1.作成したCStaticの派生クラスから、ダイアログ派生クラスのメンバ関数を呼ぶ方法

いろいろな方法で可能ですが、

CMyStaticの親がCMyDlgで固定ならば、
((CMyDlg*)GetParent())->func1();

Win32風にするなら、独自のコマンドを定義してもよいです。
#define MY_COMMAND  1
GetParent()->SendMessage(WM_COMMAND,
  MAKEWPARAM(MY_COMMAND, GetDlgCtrlID()), (LPARAM)m_hWnd);


> 2.1つのCStatic派生クラスから、ピクチャーボックスに応じた関数を呼ぶ方法

ベタな方法なら、
switch(GetDlgCtrlID()) {
case IDC_MY_STATIC1:
  // 1の場合
case IDC_MY_STATIC2:
  // 2の場合
}

WM_COMMANDを使う場合は、CMyDlgのメッセージマップで振り分けることができます。
  ON_COMMAND(MY_COMMAND, IDC_MY_STATIC1, func1)
  ON_COMMAND(MY_COMMAND, IDC_MY_STATIC2, func2)

えふ 2002/10/23(水) 14:11:40
[[解決]]
> CMyStaticの親がCMyDlgで固定ならば、
> ((CMyDlg*)GetParent())->func1();

うぅ、GetParent()を使うんだろうとは思っておりましたが、
(CMyDlg*)GetParent()->func1();
とやっていて、コンパイルが通らずに悩んでおりました。。。

> ベタな方法なら、
> switch(GetDlgCtrlID()) {
> case IDC_MY_STATIC1:
>   // 1の場合
> case IDC_MY_STATIC2:
>   // 2の場合
> }

なるほど!
GetDlgCtrlID()を使えばいいんですね!
気付きませんでした。。。

おかげさまで、所望する動作を実現させることができました。
ありがとうございます。

古いスレッドには追加発言できません。