
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クラスであると
指定するのか、などわかりません。
どこに、どういう記述をすればいいか教えてください。
No.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とします。
ただし、メインスレッドとワーカースレッドは同時に動作するので何らかの排他制御が必要になることもある。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
(UWSC) 「#32770」の意味わかり...
-
既定のコンストラクタがない?
-
MFCアプリのコマンドラインでパ...
-
【C++】vectorについて
-
MFCのドラッグ&ドロップについて
-
DataContextについて
-
オーバーライド関数の呼び出し...
-
ソケットを使った「非同期」通...
-
C++では構造体がメンバ関数をも...
-
DataGridViewのセルに斜線を引...
-
Visual C++ 6.0 でクラス表示が...
-
OnInitDialog()の関数の組み込み方
-
オブジェクト指向 集約の実装...
-
privateなメンバ関数をテストす...
-
C#のクラス設計について教えて...
-
[MFC] CWnd::MessageBoxの警告...
-
MFCでSDIからダイアログの呼び出し
-
継承を重ねた場合のコストはど...
-
不要になった、普通の構造体の処理
-
SetTimerの行でアサートエラー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
既定のコンストラクタがない?
-
ダイアログ表示時にチェックボ...
-
FriendとPublicの違い。。。
-
(UWSC) 「#32770」の意味わかり...
-
エディットコントロールでEnter...
-
イベントにAddHandlerされてい...
-
MFCアプリのコマンドラインでパ...
-
ボタンのオーナードローについて
-
MFCのドラッグ&ドロップについて
-
このコンパイルエラーの意味に...
-
オーバーライド関数の呼び出し...
-
C++ protectedにアクセス不可
-
【ASP.NET】 独自で作成したク...
-
個々の関数について継承してい...
-
MFCのCListCtrlでスクロールを検出
-
ダイアログクラスのコントロー...
-
DataGridViewのセルに斜線を引...
-
[MFC] CWnd::MessageBoxの警告...
-
CMainFrameクラスの使い方
-
関数の呼び出し元の検索
おすすめ情報