既存のオブジェクトをタブのページに分ける際の現象について – 固定ページ 2 – プログラミング – Home

既存のオブジェクトをタブのページに分け...
 
通知
すべてクリア

[解決済] 既存のオブジェクトをタブのページに分ける際の現象について

固定ページ 2 / 2

超初心者
 超初心者
(@超初心者)
ゲスト
結合: 23年前
投稿: 139
 

Windowsプログラミングを始めたばかりの人がよく起こす現象だな。

C言語風にたとえていえば

int a = 10;

void functionB()
{
int c;
c = 5; // これを実行しても a の値は5にならない。
}

上記は判りますよね。
intをCDlg_Mainに置き換えてみてください。

--------------------------------------------------------------------

Active X Controlが原因となると俺にはそこまで手伝えないな。

解決ってことになっているけど、解決?


返信引用
rikizo
 rikizo
(@rikizo)
ゲスト
結合: 18年前
投稿: 20
 

解決してないのに無理に解決にしなくてもいいと思いますよ~。
私もCすらまともに知らない状態で、MFCで作られた粗悪なWindowsソフトの
バージョンアップを命ぜられた事がありますので、みらくるさんの状況もよくわかりま
す。

おそらく、起きている問題の本質はActiveXとはあまり関係なくて
親ダイアログの関数を無事に呼べれば解決しそうな気がします。

↓こんなんでダメですかね?

CDlg_Main* pDlg = (CDlg_Main*)GetParent(); // 親ダイアログのポインタを取得
pDlg->Open_Function(size_data, data); // メンバ関数を呼び出す

#protectedなメンバ関数をpublicなメンバ関数を通して呼び出すのは
#設計的にどうなの?、っていう事についてはここで言及しません。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

>>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) 途中でソフトが
中断される可能性があります。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

追加です。
 まだ、解決してないのなら、続けたほうがみらくるさん、後にみらくるさんと
 同じように分らなくて過去ログをみにきた人のためにもなります。

遠慮は必要ですが、解からないのに解決にすることはないと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

連投すみません
>遠慮は必要ですが
自分で解決しようとしないで何でも質問すればいいと言うのはまずいです。
少しでも努力することが大切です。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました