VCで簡単なプログラムを造っています。
ダイアログベースです。

エディットボックスへのアクセス方法がわかりません。
識者の方、ご教授願います。

簡単にソースを載せます。
以下は、ボタンを押した時に動作するルーチンです。

void CTestDialog::OnButton1()
{
CreateThread(, , Sub, , ,);
}


Sub() が作成されたスレッドで動作する関数です。

void Sub()
{
CString csText;

csText.Format("てすと");
SetDlgItemText(IDC_EDIT1, csText);
}

IDC_EDIT1 が CTestDialogクラスのエディットボックスです。
Sub() の中でこのエディットボックスに書きたい。

Sub() を CTestDialogクラスとして定義するのか、または
SetDlgItemText関数で IDC_EDIT1 が CTestDialogクラスであると
指定するのか、などわかりません。

どこに、どういう記述をすればいいか教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

こんにちは。

itohhといいます。

akino4さんが言われるようにわたしも、引数としてthis(自分自身という意味)を渡します。
ワーカースレッドは、同じクラス内でも別領域になってしまうからです。
下記に簡単な例を載せます、参考にしてください。

※CreateThreadの代わりにAfxBeginThreadを使用するようにしましょう。

※テキストボックスを前もってCString型のメンバ変数(m_text)としておきます。

long CAbc::test()
{
CWinThread* wkpThread=NULL;

wkpThread = AfxBeginThread( CAbc::m_Thread, this );

return 0;
}

UINT CAbc::m_Thread( LPVOID n )
{
CAbc* wkThis;

wkThis = (CAbc *)n;

n->m_text = "テストだよ!!";

return 0;
}

他のメンバ関数やメンバ変数を使う場合もn->xxxxxxとします。
ただし、メインスレッドとワーカースレッドは同時に動作するので何らかの排他制御が必要になることもある。
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変参考になりました。

お礼日時:2001/05/18 10:21

スレッドを開始するときに引数でそのクラスへのポインタとか


データコンテナつくってそれのポインタ渡してますわたしのばあい
あとは。。。。メッセージなげるとか
    • good
    • 0
この回答へのお礼

ありがとうございました。
クラスのポインタを渡すことで解決しました。

お礼日時:2001/05/18 10:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング