-PR-
解決済み

クラスの扱いについて

  • すぐに回答を!
  • 質問No.77399
  • 閲覧数50
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 71% (83/116)

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クラスであると
指定するのか、などわかりません。

どこに、どういう記述をすればいいか教えてください。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 45% (210/459)

こんにちは。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とします。
ただし、メインスレッドとワーカースレッドは同時に動作するので何らかの排他制御が必要になることもある。
お礼コメント
nabezo-

お礼率 71% (83/116)

ありがとうございました。
大変参考になりました。
投稿日時 - 2001-05-18 10:21:52
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル10

ベストアンサー率 18% (35/185)

スレッドを開始するときに引数でそのクラスへのポインタとか
データコンテナつくってそれのポインタ渡してますわたしのばあい
あとは。。。。メッセージなげるとか
お礼コメント
nabezo-

お礼率 71% (83/116)

ありがとうございました。
クラスのポインタを渡すことで解決しました。
投稿日時 - 2001-05-18 10:19:54


このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ