Windowsプログラミングを始めたばかりの人がよく起こす現象だな。
C言語風にたとえていえば
int a = 10;
void functionB()
{
int c;
c = 5; // これを実行しても a の値は5にならない。
}
上記は判りますよね。
intをCDlg_Mainに置き換えてみてください。
--------------------------------------------------------------------
Active X Controlが原因となると俺にはそこまで手伝えないな。
解決ってことになっているけど、解決?
解決してないのに無理に解決にしなくてもいいと思いますよ~。
私もCすらまともに知らない状態で、MFCで作られた粗悪なWindowsソフトの
バージョンアップを命ぜられた事がありますので、みらくるさんの状況もよくわかりま
す。
おそらく、起きている問題の本質はActiveXとはあまり関係なくて
親ダイアログの関数を無事に呼べれば解決しそうな気がします。
↓こんなんでダメですかね?
CDlg_Main* pDlg = (CDlg_Main*)GetParent(); // 親ダイアログのポインタを取得
pDlg->Open_Function(size_data, data); // メンバ関数を呼び出す
#protectedなメンバ関数をpublicなメンバ関数を通して呼び出すのは
#設計的にどうなの?、っていう事についてはここで言及しません。
>>MFCを使うのは難しいんじゃないかと思います。
>私も同感です。
SDKを使ってすべてC言語でWindowのアプリケーションを作るよりは楽だと思います。
確かにC++を使うので、その分難しいところもあります。
>親ダイアログの関数を無事に呼べれば解決しそうな気がします。
ダイアログではないですが僕が良く使う方法は、
グロ-バル変数でCXXXDlg *Dlgを作成する。
(CXXXDlgは親ダイアログのクラス名)
親ダイアログのOnInitDialogでなく以下のところで
Dlg = this;を作成する。
XXXXDlg::CBALOOKDlg(CWnd* pParent /*=NULL*/)
: CDialog(XXXXDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CBALOOKDlg)
//}}AFX_DATA_INIT
Dlg = this ←ココ
// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しませ
ん。
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
あとは、関数を呼びたい所から「Dlg->XXXX」XXXは関数名
とすればいいと思います。
注意として、ウィンドウの操作、親ダイアログ固有のイベントに関する動作の関数
は、SetEvent,フラグを利用して親ダイアログで動かさないとまずいと思います。
例外が発生して、(ウィンドウの操作で多いのがHWND == NULL) 途中でソフトが
中断される可能性があります。
追加です。
まだ、解決してないのなら、続けたほうがみらくるさん、後にみらくるさんと
同じように分らなくて過去ログをみにきた人のためにもなります。
遠慮は必要ですが、解からないのに解決にすることはないと思います。
連投すみません
>遠慮は必要ですが
自分で解決しようとしないで何でも質問すればいいと言うのはまずいです。
少しでも努力することが大切です。