コンボボックスにファイルをドラッグ&ドロップするには? – 固定ページ 4 – プログラミング – Home

コンボボックスにファイルをドラッグ&ド...
 
通知
すべてクリア

コンボボックスにファイルをドラッグ&ドロップするには?

固定ページ 4 / 4

Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

というわけで、結果は同じではなかったわけです。
では、

クラス AAAA から CXXXDlg のコントロール変数の list,m_text を操作したい。
では、 AAAA はどのようにメンバ変数+メソッドを組み込めばよいか?

// CXXXDlg.h
class CXXXDlg : public CDialog
{
・・・
public:
CComboBox m_list;
CEdit m_text;
・・・
protected:
・・・
afx_msg void OnButton1();
・・・
};

//--------------------------------------
// CXXXDlg.h
#include XXXDlg.h
#include AAAA.h

void CXXXDlg::OnButton1()
{
AAAA a;

// ここにはどのような記述が必要?

a.UpDate();
}

//--------------------------------------
// AAAA.h
#include XXXDlg.h
class AAAA
{
public:
// ここにはどんなメンバ変数が必要?
void UpDate()
{
// ここにはどのような記述を書くべき?
}
};

ちなみに、CXXXDlgのメンバ(親子関係でいうと子)であるCDropComboBoxには極力、
親に依存しないように実装すべきです。(今回はそんなことする必要はないですけど)


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

>nの値はm_iに代入してるだけで変化なし

上の式ではnに変化はないが
下の式ではn=11になります。
勘違いしてました。


返信引用
リンク
 リンク
(@リンク)
ゲスト
結合: 22年前
投稿: 35
Topic starter  

>クラス AAAA から CXXXDlg のコントロール変数の list,m_text を操作したい。
>では、 AAAA はどのようにメンバ変数+メソッドを組み込めばよいか?

質問内容をもうちょっと詳しくお願いできますか?


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

>void CXXXDlg::OnButton1()
>{
> AAAA a;
>
> // ここにはどのような記述が必要?
>
> a.UpDate();
>}

普通は、AAAAには結果を返すようにつくればよいのですが、

void CXXXDlg::OnButton1()
{
AAAA a;
CString s1, s2;

// a で処理した結果を s1, s2 に格納
a.UpDate( s1, s2 );

m_text.SetWindowText( s1 );
m_list.AddString( s2 );
}

class AAAA
{
public:
void UpDate( CString& s1, CString& s2 )
{
s1 = 適当; s2 = 適当;
}
};

今までのやり取りから、ダイアログクラスを直接操作したいというのがあったので、
UpDateメソッドの引数を1ないし0にするにはどうしたらいいかというのが質問です。
・引数をとる場合は、UpDateメソッドの引数の型はなにか?
・引数をとらない場合、メンバ変数を使うが、メンバ変数の型はなにか?


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

一つ抑えておくべき事は、MFCのクラスであるCDialogからの派生クラスは、
あくまでも制御を行う為の実体であって実際のウインドウそのものではないという事です。
CDialogクラスはウインドウを制御する事ができますが、実際にはその制御には
内部で保持しているウインドウのハンドルを使ってWin32APIで制御しています。
(全てそうとは言いませんが、概念的にはそう考えて良いと思います)

CDialogクラスのインスタンスを作成しただけの状態(CXXXDlg dlg;とかしただけの時)では
まだ、クラス内に制御対象のウインドウのハンドルはありません。
実際にはDoModal等のウインドウを表示する為の動作をして始めてハンドルが設定されます。
ですから既に表示されているウインドウに対して制御を行う時にはそのウインドウを表示
した時に
使ったクラスのインスタンスである必要があります。
(実際には他にも方法がありますけれど、ここでは書きません。
上記の部分が理解できていないとかえって混乱すると思うので)

画面上のウインドウとクラスインスタンスは関連する物ではありますが、
同じ物ではありません。そこのところをきちんと認識しておく必要があると思います。
また、クラスが同じでもインスタンスが違えば、物としては別物になります。
例えば、
CXXXDlg a;
CXXXDlg b;
この場合、aもbもCXXXDlgクラスのインスタンスですが、
aとbはインスタンスとしても、ウインドウとしても別物と考えるべきです。


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

返信する

投稿者名

投稿者メールアドレス

タイトル *

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