■ MFC相談室 MFC12.dll■

このエントリーをはてなブックマークに追加
938デフォルトの名無しさん:05/02/20 11:42:49
ビジーループしてたりWaitFor〜で待ってる間は、他スレッドからのSendMessageはブロックされるよ。

詳しくは下記のMessage Deadlocksを参照
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp
939933:05/02/20 14:03:07
レスありがとうございます。遅れますた

>>937
::AfxGetApp()->GetMainWnd()->SendMessage(WM_UPDATESTATUSBAR, ...)
みたいな感じでメッセージを投げています。(WM_UPDATESTATUSBARはユーザメッセージ
です)

>>938
WaitForSingleObjectで測定終了を待っていました。これが原因のようです。
教えていただいたMSDN読んだのですがデッドロックの項目にWait〜の件は
書かれてないですね。
Win32マルチスレッドプログラミングという書籍も読んだのですがやはり書かれて
ませんでした。
Wait〜で待っている以上、SendMessageといえどもOSはCPU時間を割いてくれないのですね。
勉強になりますた。

レスくださったみなさんどうもありがとうございました。。。
940デフォルトの名無しさん:05/02/20 15:55:12
質問です。VC++にて開発中です。
クラスウィザードでCEdtiにint型の変数を設定すると、
実行時にDoDataExchangeで以下のような警告が出力されます。
Warning: initial dialog data is out of range.
変数の範囲を1-9999にすると警告が出ます。0-9999だと出ません。
解決方法をご存知の方がいらっしゃいましたらお願いします。
941デフォルトの名無しさん:05/02/20 16:04:45
>>940
コンストラクタで1(つーか自分の指定した範囲内の数値)を入れて味噌。
942デフォルトの名無しさん:05/02/20 16:08:15
>>940
変数の初期化をしてないからでは?
943942:05/02/20 16:10:19
941とかぶっちゃいましたが
意図するところは同じです orz
944940:05/02/20 17:45:09
>>941, 942
解決しました。ありがとうございました。
945??:05/02/20 20:40:01
AppWizardで自動生成されるWindowsメニューでの
IDR_MAINFRAMEの、

MENUITEM "ツール バー(&T)", ID_VIEW_TOOLBARや、
MENUITEM "ステータス バー(&S)", ID_VIEW_STATUS_BAR

は、MFCのどこでハンドルされているのでしょうか?
−− 消去や再表示など。

又はデバッガでトレースする方法(適当なブレーク
ポイントなど)を教えて下さい。

946デフォルトの名無しさん:05/02/20 20:59:52
>>945
MFCソース内をID_VIEW_TOOLBARやID_VIEW_STATUS_BARで検索してみる気はないのかい?
947デフォルトの名無しさん:05/02/21 02:06:38
>>946
検索する気がないから尋ねているんです。
948デフォルトの名無しさん:05/02/21 02:31:18
ワロス
949デフォルトの名無しさん:05/02/21 22:22:14
主張としては正当だね。
回答者も答えるかどうかで自らの主張を示せばいい。
950945:05/02/21 22:27:29
>>947は偽物です
951945:05/02/21 22:49:00
>>950こそ偽物です
952945:05/02/21 23:07:30
>>950
>>951
やめてください・・・
953デフォルトの名無しさん:05/02/22 17:01:24
CWinThreadの派生クラスを作ってCreateThread(0,0)を呼び出すとRun()が
動き始めるんですが、これをワーカースレッドとして使うのは問題ないですか?
954デフォルトの名無しさん:05/02/22 17:36:54
>>953
多分永遠にメッセージを待つことになるのでスレッドが終わらなくなる。
InitInstanceがFALSEを返せばRunは呼ばれない。
955デフォルトの名無しさん:05/02/22 17:45:05
>>954
そうなんですか・・・ありがとう御座います。
続けざまの質問且つCWinThreadの理解不足で申し訳ないのですが、
CWinThread::CreateThreadというのはどういう用途で使われるのでしょうか?
AfxBeginThreadのようにスレッド関数のポインタを渡したりはしないのですよね?
956デフォルトの名無しさん:05/02/22 18:31:13
>>955
以下、MSDN
| 呼び出したプロセスのアドレス空間内で実行されるスレッドを作成します。
| 1 ステップでスレッドを作成し実行するには AfxBeginThread 関数を使います。
| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。
957デフォルトの名無しさん:05/02/22 18:38:25
>>956
私もそれはMSDNで読んだのですが、どうも下記の

| 連続したスレッドの作成とスレッドの実行を繰り返すときに
| スレッド オブジェクトを再利用したいときは CreateThread を使います。

この意味がよくわからなかったんですよね・・・。
CreateThreadを呼び出す事でどのスレッドが起動されるのかと言う所が
わからないと言った感じです。抽象的な物言いで申し訳ありません。
958デフォルトの名無しさん:05/02/22 19:38:46
MFCとちょっと離れるかもしれませんが・・・

CString str = "0x12345678";
これをDWORD型に格納したいのですが、
何か良い関数等ありますでしょうか?

テキストファイルに出力された値を読み込みたいのですが…
959958:05/02/22 20:07:56
strtolか・・・
失礼しました。
960デフォルトの名無しさん:05/02/22 20:20:07
StrToInt
961デフォルトの名無しさん:05/02/22 21:02:09
>>957
AfxBeginThread() って、
CWinThread 作って CreateThread 呼び出すくらいしか
やってなくて、で生成したスレッドが実行するのは

  ワーカースレッド: AfxBeginThread に渡した関数
  インタフェーススレッド:_AfxThreadEntry() 関数(非公開)

この _AfxThreadEntry() の中で、CWinThread の InitInstance() だの
Run() だのが呼び出されてる。
962デフォルトの名無しさん:05/02/22 21:36:43
>>961
成る程ですね!ありがとうございました。
963デフォルトの名無しさん:05/02/23 18:07:52
すいません、質問なのですがスプリットウィンドウの幅を動的に変更するにはどの様にすれば良いのでしょうか?
964963:05/02/23 19:11:56
自己解決しました
965デフォルトの名無しさん:05/02/24 15:47:07
VC++6.0を使ってます。

ファイルの読み込み中など、モーダルなダイアログを出して
逐次表示を更新→終わったら即ダイアログ閉 をやりたいのですが、
CDialog::DoModal()で呼び出すとどこに実行が移るのかわかりません。
DoDataExchange()だとウインドウを開いたときと閉じるときに2回実行されてうまくないです。
いちいちOKボタンを押してダイアログを閉じるのも嫌です。

こういう場合は自分でメンバ関数を作って、CDialog::Create()、CDialog::ShowWindow()したあと
そのメンバ関数を呼び出すのがいいのでしょうか?
966デフォルトの名無しさん:05/02/24 15:50:24
いちいちお前の日本語モドキを解読して答えるのも嫌です。
967デフォルトの名無しさん:05/02/24 16:17:09
>>966の日本語の方が変に見える件について。
968デフォルトの名無しさん:05/02/24 16:31:06
>>965
だね。DoModalするとダイアログ側に実行権が移っちゃうんで。
969デフォルトの名無しさん:05/02/24 16:45:50
逐次表示を更新ならスレッド作らないとだめだな
970デフォルトの名無しさん:05/02/24 21:33:05
  SetTimer(1,1000,NULL);
for (aPlaying = TRUE; aPlaying; ) {

//Do somethig

if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
    Sleep(1);
}

こんな感じで擬似スレッドつくれば?
971デフォルトの名無しさん:05/02/24 23:22:37
そんな無茶苦茶な設計にするより、素直にスレッド使ったほうがすっきりする。
972デフォルトの名無しさん:05/02/24 23:30:29
クソスレ立てんなヴォケ!!
973デフォルトの名無しさん:05/02/24 23:54:38
ちょっとワロってしまった…
974デフォルトの名無しさん:05/02/25 16:09:51
これで画面に表示してある、
例えば「1」「2」「3」「4」「5」という文字をを識別して表示するみたいな事って出来るんでしょうか?
975デフォルトの名無しさん:05/02/25 16:11:25
できるよ
976デフォルトの名無しさん:05/02/25 19:37:30
意味がわからん
977デフォルトの名無しさん:05/02/25 23:19:43
画像処理?
978デフォルトの名無しさん:05/02/26 01:07:21
ワンパターンマッチング?
979デフォルトの名無しさん :05/02/27 15:57:03
MFCを始めたばかりの若造です。
CText(ラベルという?)に表示されている文字を画面から
はみ出たら改行されるようにしたいのですが、設定の仕
方が分かりません。

大きな文字をウィンドウ上に表示したいのですが、
SetFontでフォントサイズを大きくしたのですが、
ウィンドウ上に収まりきらない文字の場合、文字
切れしてしまいます。

これを解決する良い方法はないのでしょうか?
980デフォルトの名無しさん:05/02/27 16:04:25
>>979
CTextなんてものはMFCには無い
981デフォルトの名無しさん:05/02/27 16:28:00
>979
スタティックテキストです。
スマソ

これは通常内部でいじったりはしないのですか?
982デフォルトの名無しさん:05/02/27 18:50:26
>>981
何べんも同じこと質問するなドアホ
http://pc5.2ch.net/test/read.cgi/tech/1107926989/274-280n
983デフォルトの名無しさん:05/02/27 19:00:02
MFCならプロパティに改行って項目が普通にあった気がしたが?
984デフォルトの名無しさん:05/02/27 19:02:29
>>983
ないから質問してるんです
知らない人は黙っててください
985デフォルトの名無しさん:05/02/27 19:05:37
つーか、改行使う理由が分からない。
986デフォルトの名無しさん:05/02/27 20:08:15
つーかデフォルトで勝手に改行されはずなんだけど。
987デフォルトの名無しさん
方法を変えてDrawTextで対応してみます。
MFCを行うのは初めてで、どのやり方が一番適切か
分からなかったため聞きました。
ありがとうございました。