タブコントロール – プログラミング – Home

通知
すべてクリア

[解決済] タブコントロール


みかん
 みかん
(@みかん)
ゲスト
結合: 16年前
投稿: 12
Topic starter  

表記の件で質問があります。

タブコントロール内にエディットボックスがあってそのエディットボックス内に
計算結果を表示させたいのですが、どのようなやりかたがあるでしょうか?
エディットボックス内に直接入力してその文字を取得はできたのですが・・・

開発環境はWindows XP Visual Studio2005 VC++ MFCです。


引用未解決
トピックタグ
みかん
 みかん
(@みかん)
ゲスト
結合: 16年前
投稿: 12
Topic starter  

ちなみに
タブ内にはエディットボックスだけがあり、そのエディットボックスの変数
(m_EditNAme)を親ダイアログでも使用できるようになると有難いです。

//タブコントロール表示
BOOL CTabCtrlDlg::OnInitDialog()
{
CDialog::OnInitDialog();

SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定

// TODO: 初期化をここに追加します。
{
int err = 0;
CRect rect;

// 子ダイアログ作成
if (!err) if (!m_dlgTabName.Create(CDlgTabName::IDD, this)) err = 1;
if (!err) if (!m_dlgTabPrice.Create(CDlgTabPrice::IDD, this)) err = 1;
if (!err) if (!m_dlgTabNum.Create(CDlgTabNum::IDD, this)) err = 1;
// 子ダイアログ移動
if (!err)
{
m_dlgTabName.GetClientRect(&rect);
rect.OffsetRect(20, 40);
m_dlgTabName.MoveWindow(&rect, FALSE);
m_dlgTabPrice.MoveWindow(&rect, FALSE);
m_dlgTabNum.MoveWindow(&rect, FALSE);
}
// タブ作成
if (!err) if (m_xcTab.InsertItem(0, _T(名前)) == -1) err = 1;
if (!err) if (m_xcTab.InsertItem(1, _T(体重)) == -1) err = 1;
if (!err) if (m_xcTab.InsertItem(2, _T(人数)) == -1) err = 1;
// 初期表示
if (!err) OnTcnSelchangeTab(0, 0);
}
return TRUE;
}


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

親ダイアログってCTabCtrlDlgの親って意味ですか?
m_EditNAmeってどのクラスの変数なんでしょう?

例えばですが、ダイアログAにタブコントロールがあって
タブのページにあたるダイアログがダイアログPageとします。
ダイアログPageにm_edtNameというエディットコントロールクラスの
変数があったとすると、

ダイアログPageはダイアログAのメンバー変数として定義するでしょうから
m_edtNameと言う変数がpublicなメンバー変数で、
ダイアログPageのインスタンスもダイアログAのpublicなメンバー変数で
あれば、普通にメンバー変数を参照する方法でアクセスできるはずです。

ですが、クラスとして考えるならば、メンバー変数を直接扱わせるのでは
なくてクラスにその変数を操作するメンバー関数を用意する方が
安全性が高くできるのでダイアログPageにGetName等の関数を作って
関数内でm_edtNameに対して操作をするようにするのが常套手段だと思います。
これと同じ考え方でダイアログAにもGetNameというメンバー関数を用意し、
その関数の中でダイアログPageのGetNameを呼ぶようにすれば、
ダイアログPageのm_edtNameを直接操作する必要は無いはずです。

この辺のカプセル化の概念は複雑なアプリを組み始める前にちゃんと理解して
置いた方が良いです。
カプセル化がなぜ良いのかと言う話はオブジェクト指向の入門書等を
御自分で読んで見られることをお勧めします。

なんにせよ、C++言語を使うのであれば、クラスの概念とか、
カプセル化、継承、仮想関数といった考え方をちゃんと理解した方がいいです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

あうあう。
表示したいのでしたね。
GetNameをSetNameと読み替えて
ダイアログPageのSetNameでm_edtNameに引き渡された文字列を
設定すると言う風に考えて見てください。
GetがSetになるだけの話で基本的なスタンスは同じです。


返信引用
みかん
 みかん
(@みかん)
ゲスト
結合: 16年前
投稿: 12
Topic starter  

PATIOさん有難うございます。

子ダイアログでSetNameの関数を作成して、
それを親ダイアログ関数内で呼ぶようにしたらできました。

どうも有難うございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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