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);
...
}
> 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)
> CMyStaticの親がCMyDlgで固定ならば、
> ((CMyDlg*)GetParent())->func1();
うぅ、GetParent()を使うんだろうとは思っておりましたが、
(CMyDlg*)GetParent()->func1();
とやっていて、コンパイルが通らずに悩んでおりました。。。
> ベタな方法なら、
> switch(GetDlgCtrlID()) {
> case IDC_MY_STATIC1:
> // 1の場合
> case IDC_MY_STATIC2:
> // 2の場合
> }
なるほど!
GetDlgCtrlID()を使えばいいんですね!
気付きませんでした。。。
おかげさまで、所望する動作を実現させることができました。
ありがとうございます。