■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
Win32API質問箱 Build40
501
名前:
デフォルトの名無しさん
:2006/02/21(火) 11:10:45
>>500
そのGetLastErrorの値は意味が無い。
GetLastErrorでエラー情報が取れると明記されたAPIの呼び出し直後のみ、意味がある値が取れる。
502
名前:
デフォルトの名無しさん
:2006/02/21(火) 12:38:35
>>501
気にしないことにします。
ありがとうございました。
503
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:09:29
ファイルを完全に削除する方法はないですか?
deletefile関数はダメでした。
504
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:13:03
>>503
何がやりたいかわからない
何がどうダメなのか書け
505
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:15:22
完全という意味がわからないか?
悲しいな、逝ってよし。
506
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:16:48
何時代の人間だ
507
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:18:41
>>503
NTなら、MoveFileEx()を使う。
9xなら、WININIT.INIを使う。
詳しくはMSDNのMoveFileExの説明に載っている。
508
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:20:33
説明不足でした、すみません。
deletefileを使用すると、ゴミ箱にはファイルは入らないのですが
ファイル復活ツール(ノートンのゴミ箱)だとしっかり復活できて
しまいます、早い話が復活できないようにファイルを削除したいのです。
509
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:23:31
sageもせず、大文字小文字の区別すら出来ないヤツは信用できん
510
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:24:10
ファイルのサイズ分だけ0で埋めてから消せば?
511
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:25:01
>>508
よからぬことを考えてるヨカーン
512
名前:
デフォルトの名無しさん
:2006/02/21(火) 15:26:43
>>508
ノートンはいろいろと面白いことをごにょごにょしているからね。
だいたい、ノートンがなくても、結局HDDに残って入れば、復旧できる可能性はあるわけだし。
まずまず信頼性の高い方法
ファイル全体に対して、ランダムな値を何度か書き込んだ後、削除すること。
完全を求める場合
HDDを物理的に破壊する。
513
名前:
デフォルトの名無しさん
:2006/02/21(火) 16:12:58
>>508
とりあえず、これに返事した方がいいよ
http://forums.belution.com/ja/vc/000/350/26s.shtml
514
名前:
デフォルトの名無しさん
:2006/02/21(火) 16:34:21
>>513
ワロス。少なくとも3か所にマルチポストか。
HM3さんよ、マルチポストはダメですよ。
515
名前:
デフォルトの名無しさん
:2006/02/21(火) 16:45:51
ち、マルチかよ。
答えて損した
516
名前:
デフォルトの名無しさん
:2006/02/21(火) 16:47:17
これは非道ぃ
517
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:02:50
一体マルチのどこが悪いのかわからない。
複数のスレに質問することでレイテンシが最小に抑えられるし
複数のレスが得られれば情報の確度も飛躍的に向上する。
忌むべきはレスをもらった後に放置することでありマルチ自体ではないはずだ。
518
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:03:07
はずれ
519
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:04:14
>>517
無知にして無恥
520
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:06:03
>>517
お前は銀バエの鼻くそより価値が無い
521
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:17:30
百歩譲ってマルチ自体が悪くないとしても、マルチするヤツは概して
まともな後始末できないから結局ダメ。
522
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:18:39
いつか答える側になればわかる
523
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:20:59
一般的に言って質問する側は緊急度が高く
答える側はたいてい暇なことが多い。
また答えが重複したところでコミュニティの大きさが十分大きければ
その無駄も相対的に0に等しい。
よってマルチの価値は高く、反面実害はほぼ0であることが証明された。
524
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:22:49
仮定の上に話を進めて何が証明か
525
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:23:17
2:ごくまれな反例をとりあげる
4:主観で決め付ける
20:条件の包含関係を間違える
526
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:27:41
>>517
>>523
これでも読んでろ
ttp://www.ippo.ne.jp/g/53.html
527
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:29:13
>>523
裸の自作自演王
528
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:31:54
>>526
掲示板、特に質問と冠されたもの質問する側の人間の為に存在する物だ。
そのような主客の転倒した論調には首肯しかねる。
529
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:32:19
ていうかパソコンの仕組みを勉強した方がいいような
530
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:36:07
>>528
じゃぁ一片首折ってみる?
531
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:36:24
同じ質問をいくつもの掲示板に投稿するのは、
その掲示板に集まる人を自分の質問に答えるための道具のように扱っていると思われても仕方ありません。
そのような扱いを受ければ誰だって気分を害します。
質問への回答は善意から行なわれるもの
532
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:40:15
質問は蓄積されて、後から見る人間に役に立てば良いんだが・・
ま、2chにあるうちは無理だろうなぁ
533
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:43:48
>>531
そんなの、513みたいな暇人が指摘しなければ気がつかんよ
534
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:44:02
かつてインターネットといえばネットニュースだった時代、同じ記事を複数のニュースグループに投稿するという行為は普通に行われていた。
しかしネットニュースにはクロスポストというシステムがあり、これを使っている限り複数のグループに投稿された記事は同じものとして扱われ、
適切なクライアントソフトを使っていれば何度も同じ記事を読まされるということはなかった。
マルチポストをするなというのはその時代の名残。決して同じ記事を複数の場所に投稿すること自体を禁じるものではない。
535
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:46:36
マルチタスクは体に良くないってのが起源だろ?
536
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:48:36
>複数のレスが得られれば情報の確度も飛躍的に向上する。
そんなことでしか情報の確度とやらを上げられない^^;
>答える側はたいてい暇なことが多い。
回答者は日々勉強した知識で答えているのに、それを「暇」だって?
回答者やってみろよ。まともに答えたことないだろ?
537
名前:
デフォルトの名無しさん
:2006/02/21(火) 17:57:58
マルチしても、それぞれ質問した場所で答えている人間に重複が多ければ
それは無駄になる割合が高いと言える。(その割合と言うのがどれくらいかは知りようが無いけれど)
答える人間も答えたくてうずうずしていてあちこちを回っているかもしれない、というより俺がそうだ。
だからマルチしなくてもいいのに、と俺は思っている。
538
名前:
デフォルトの名無しさん
:2006/02/21(火) 18:01:13
知ったかぶりの517を笑うスレだと聞いてやってきました。
539
名前:
デフォルトの名無しさん
:2006/02/21(火) 18:38:12
505 :デフォルトの名無しさん :2006/02/21(火) 15:15:22
完全という意味がわからないか?
悲しいな、逝ってよし。
508 :デフォルトの名無しさん :2006/02/21(火) 15:20:33
説明不足でした、すみません。
540
名前:
デフォルトの名無しさん
:2006/02/21(火) 20:56:53
WM_CREATE内に重い処理があったので、
最初ウインドウが現れるまでに時間がありました。
ウインドウが現れてからその処理をするように変えたいのですが、
どうしたらいいのでしょうか?
ウインドウが表示されるタイミングっていつですか?
541
名前:
デフォルトの名無しさん
:2006/02/21(火) 20:59:48
WM_CREATEで適当なメッセージを自分にPOSTするという手はある。
ただ、どっちにしろメッセージループを回さないと、ウインドウは固まってしまうけど。
542
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:03:54
スレッドを使え
543
名前:
540
:2006/02/21(火) 21:06:40
>>541
以下のようには試してみたんですが、
ダメでした・・・
(ウインドウが表示されるまでに時間がかかる)
なぜなんですかね?
541さんが言っているのは全然別のことですか?
switch (msg) {
case WM_CREATE:
SendMessage(hWnd,WM_PAINT,0,0);
SendMessage(hWnd,WM_USERDEFINE,0,0);
break;
case WM_USERDEFINE:
// 重い処理
break;
case WM_PAINT:
// 描画処理
break;
}
544
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:11:41
SendじゃなくてPostじゃね?
545
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:13:57
>>543
WM_CREATEからWM_PAINTをSendMessageすんなバカ
SendMessageは対象ウィンドウのウィンドウプロシージャを直接呼び出して、
メッセージの処理が終了するまで呼び出し元に返ってこないから、
それだとWM_CREATEに重い処理書いてるのと一緒だ
>>541
がわざわざPOSTすると言ってるのに何やってんだよ
ウィンドウが表示されるタイミングは、ShowWindowなどによってウィンドウの表示状態が「表示」にセットされた時
メッセージで知りたいならWM_SHOWWINDOW
546
名前:
540
:2006/02/21(火) 21:16:13
>>544
、545
ご、ごめんよ・・・
一つ賢くなったよ。
ありがとう
とりあえず、postで実装してスレッドに進化してみます。
547
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:17:53
>>546
今の貴方にスレッドは・・・
うーん・・・
548
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:20:28
>>543
あとWM_PAINTはSendするものでもPostするものでもない。
InvalidateRectなんかを使え。
549
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:21:38
処理を1つの関数にまとめといて、
CreateWindow → ShowWindow → 関数呼び出し
とやった方が今の
>>540
には優しいかもしらん
550
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:22:16
期待として(今WM_PAINTを処理したい)、それにプラス、UpdateWindow、なのかなー。
551
名前:
540
:2006/02/21(火) 21:38:48
スレッドってもしかして・・・
グローバル変数とか使えなくなりますか?
メモリが共有できないとか?
552
名前:
デフォルトの名無しさん
:2006/02/21(火) 21:40:01
共有できるからこそ問題にもなる。
553
名前:
540
:2006/02/21(火) 21:41:21
あれ、グローバルは使えますよね。
これまでWM_CREATEメッセージ時に呼んでた関数を、
スレッドから呼んだらエラーになるようになったんですけど・・・
あー、なんて質問していいのかもわかんね
554
名前:
540
:2006/02/21(火) 21:42:11
>>552
同期に関してはある程度分かってるつもりなんだけど、
これまで机上だったもんで、
スレッドわかんね
555
名前:
デフォルトの名無しさん
:2006/02/21(火) 22:02:58
どーせC++のメンバ関数が呼べないとかそんな話だろ。
556
名前:
デフォルトの名無しさん
:2006/02/21(火) 22:13:00
おまいのやりたいことは本当にスレッドで行うべきなのか?
WM_CREATE 中の「重い処理」とやらを見直すべきかも知れない。
起動に時間が掛かることを許容すべきかも知れない。
557
名前:
デフォルトの名無しさん
:2006/02/21(火) 22:30:25
>>540
はGUIより先にスレッドの使い方覚えろ。
両方同時に覚えたら収集付かないぞ。
558
名前:
540
:2006/02/21(火) 22:59:56
やってることはDDE通信なんです。
グローバル変数のクラスの関数内で、
DdeInitialize()を行うんですが、
それがエラーになってしまうようになりました。
559
名前:
デフォルトの名無しさん
:2006/02/22(水) 02:40:46
>>556
どっかの本のコピペだな。
560
名前:
デフォルトの名無しさん
:2006/02/22(水) 03:54:15
CreateProcess でプロセスが作れ、作った方を親、作られた側を子と呼び、
親がCloseHandleすれば子と縁が切れる(デタッチ)ところまで理解しました。
デタッチすれば、親を先に終了しても子には全く関係無し(実行されつづける)
つう理解でOKですか?
561
名前:
デフォルトの名無しさん
:2006/02/22(水) 07:12:15
WIN32でデタッチといえば、デバッグ関係だとおもっていた。
CreateProcessで作られた子供が親の寿命と同期して自動的に
死ぬってことは、ないんじゃないかなー。
562
名前:
デフォルトの名無しさん
:2006/02/22(水) 10:10:25
そもそもプロセスの親子関係なんてWindowsには無かった希ガス。
563
名前:
デフォルトの名無しさん
:2006/02/22(水) 10:23:50
いや。CreateProcess()の説明読め。ちゃんと親子関係はある。
564
名前:
デフォルトの名無しさん
:2006/02/22(水) 12:13:55
WIN32APIなんか詳しくなってもしかたねぇじゃん。
それで大金稼いだりできりゃ多少の救いは有るが
忘れたくても忘れられないまま墓まで付き合いたくねぇよ。
なるべく覚えないでかつうまく捜して使いこなすのがコツだな。
565
名前:
デフォルトの名無しさん
:2006/02/22(水) 12:14:49
何か嫌な事でもあったのか
566
名前:
デフォルトの名無しさん
:2006/02/22(水) 12:27:39
セディール効くなぁ…
567
名前:
デフォルトの名無しさん
:2006/02/22(水) 12:38:36
>>564
=馬鹿の真骨頂
みなさん、真似しないように。
568
名前:
デフォルトの名無しさん
:2006/02/22(水) 14:36:32
>>523
緊急度が高いならいつ返事が来るかもわからず信頼性も不明な掲示板で聞かずに、メーカーに直接聞けや
569
名前:
デフォルトの名無しさん
:2006/02/22(水) 16:01:25
ずっと隠してた事をここで言います。
俺。中卒だから関数とか習ってません。
ありがとう。
570
名前:
デフォルトの名無しさん
:2006/02/22(水) 16:09:18
その関数って、f(x) の関数か
571
名前:
デフォルトの名無しさん
:2006/02/22(水) 17:16:10
中学でも関数は習うだろ。
572
名前:
^ω^
◆8vOv.D2p4.
:2006/02/22(水) 18:36:48
Winsockについて聞いてもいい?
573
名前:
デフォルトの名無しさん
:2006/02/22(水) 18:40:35
ネットワークスレ池
574
名前:
^ω^
◆8vOv.D2p4.
:2006/02/22(水) 18:41:02
>>573
わかった
575
名前:
デフォルトの名無しさん
:2006/02/22(水) 23:58:24
CreateThreadや_beginthreadで作成するスレッドにデータを渡さなくてもオケですか?
_beginthread(Thread, 0, 0);とか
576
名前:
デフォルトの名無しさん
:2006/02/23(木) 00:26:53
>>575
そりゃもちろんできる。
577
名前:
デフォルトの名無しさん
:2006/02/23(木) 01:27:10
_beginthread を使っちゃいけない理由って何だったっけ?
578
名前:
デフォルトの名無しさん
:2006/02/23(木) 01:37:27
CreateThreadでCRTの話か?
579
名前:
デフォルトの名無しさん
:2006/02/23(木) 04:02:35
勝手にスレッドのハンドルをクローズしちゃうことじゃなかったっけ。
580
名前:
デフォルトの名無しさん
:2006/02/23(木) 09:44:18
メモリリークだった気が
581
名前:
デフォルトの名無しさん
:2006/02/23(木) 09:49:07
すみません、win32APIの初心者です。
ダイアログの中でCreateWindowを使って釦を作成しました。
その釦のタイトルフォントとサイズを変えたいのですが、どうすればいいのか分かりません。
.rcのソースリストからでは簡単に出来るのですが、APIではどうすればいいのでしょう。
ご存知の方、よろしくご教示ください。
582
名前:
デフォルトの名無しさん
:2006/02/23(木) 10:00:17
WM_SETFONT
583
名前:
デフォルトの名無しさん
:2006/02/23(木) 10:04:31
http://pc8.2ch.net/test/read.cgi/tech/1131603113/
から誘導。
あっちで物知らずの池沼がスレ違いの話題をして困っています。
だれか2k以降のSleepの精度が駄目駄目でSleep(1)とSleep(10)が等価な事、
timeBeginPeriodやQueryPerformanceCounterを使えば回避できることを
優しく丁寧に、莫迦に分かるように教えてやって下さい。
584
名前:
デフォルトの名無しさん
:2006/02/23(木) 10:20:37
>>583
Sleep(1)を1000回ほど繰り返すロジック書いて実測しろと。
585
名前:
デフォルトの名無しさん
:2006/02/23(木) 10:42:10
>>582
早速のご教示、ありがとうございます。
しらべて見ます。
586
名前:
デフォルトの名無しさん
:2006/02/23(木) 14:50:23
窓の話だけど
Sleepの精度が低い環境があるのは事実。
timeBeginPeriodで精度を上げられるのも事実。
timeBeginPeriodが他のプログラムに影響するのも事実。
他のプログラムが、精度の低いSleep(1)を期待している
もしくは精度が低いとは知らずに利用している場合は問題となる。
Sleepは0以外の値が指定されたときに、
指定された時間"以上"スレッドを中断させる。
587
名前:
デフォルトの名無しさん
:2006/02/23(木) 14:52:17
誤爆った
588
名前:
デフォルトの名無しさん
:2006/02/23(木) 15:17:10
Win32APIなあたり、あながちゴバクとも言えないこの不思議
589
名前:
デフォルトの名無しさん
:2006/02/23(木) 16:12:41
ディレクトリ内にファイルがいくつあるか返すAPIを教えてください
590
名前:
デフォルトの名無しさん
:2006/02/23(木) 16:15:04
FindFirst/NextFileでカウント汁
591
名前:
デフォルトの名無しさん
:2006/02/23(木) 16:29:10
やっぱそうかぁ〜
答えを見る前に既に作ってた
592
名前:
デフォルトの名無しさん
:2006/02/23(木) 16:51:31
>>589
APIはないが、popen("dir <target directory>", "r")とでもして数えてみたらどうだろう。
593
名前:
デフォルトの名無しさん
:2006/02/23(木) 16:58:19
ファイルがあるかどうかをチェックするだけなら、
PathIsDirectoryEmptyってのもあるな
594
名前:
デフォルトの名無しさん
:2006/02/23(木) 17:57:39
>>592-593
ちょ、おまwwwwwwwwwwww
その2つをちょっと調べてみます!
595
名前:
デフォルトの名無しさん
:2006/02/23(木) 18:12:31
VIP臭いお(;^ω^)
596
名前:
デフォルトの名無しさん
:2006/02/23(木) 18:17:05
オマエモナー( ´∀`)
597
名前:
デフォルトの名無しさん
:2006/02/23(木) 18:19:49
この板でもVIP臭いを導入したのかと思ってシマタ。
598
名前:
デフォルトの名無しさん
:2006/02/23(木) 18:27:30
>>589
dir /b の結果を取り込めばOK
599
名前:
デフォルトの名無しさん
:2006/02/23(木) 18:29:55
int iFileCnt = `ls -1 hogehoge | wc -l`;
600
名前:
デフォルトの名無しさん
:2006/02/23(木) 20:30:04
あるアプリが、立ち上げ時にどんなファイルやどんなDLLをどんな順番で触っているかを
ログファイルに書き出したい。
APIフックとか使えば何とかなるんでしょうが、
既存のツールでなんかないですか?
なお、「あるアプリが」という条件がつくとキツい、というなら、
単に、NTFSのファイルリード関数をフックして、
すべてのファイルアクセスをロギングするツールでもOKです。
ただ、データファイルへのアクセスだけではなく、
DLLファイルや関連アプリファイルへのアクセスもロギングできるとうれしいです。
601
名前:
デフォルトの名無しさん
:2006/02/23(木) 20:40:25
ここはツールをクレクレする板ではなく、自分でプログラムを作る板です。
602
名前:
デフォルトの名無しさん
:2006/02/23(木) 20:46:45
windows2000上のVC++のVer6.0でプログラムしてます。
CWinThread *tAcFlash[TCP_SOCK_NO+1];
for( i=0;i<TCP_SOCK_NO+1;i++){
tAcFlash[i]=AfxBeginThread(AcceptSock,this,THREAD_PRIORITY_NORMAL,NULL,NULL,NULL);
if(tAcFlash[i] == NULL){
Ercount++;
sprintf(wkText,"%d番目のスレッドを開始できませんでした",i);
AddLog(wkText);
}else{
count++;
Sleep(5);
}
}
みたいな感じでスレッドを立ち上げていくんですが、
1992個でスレッドの開始ができなくなります。
マシンはCeleron 666MHz mem256MBとDuron1.2GHz mem128MBのマシンの
両方で実験してみましたけど、時間が違うだけで立ち上がる数は一緒でした。
スレッドの最大数って何によって制限されるのでしょうか?
また、スレッドのエラーの取得方法はどうすればよいでしょうか?
603
名前:
デフォルトの名無しさん
:2006/02/23(木) 20:57:50
>>601
イジワルいわずにおしえてよ。
つーか、このスレがスレ違いならどこがいーんだYO!。
604
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:04:31
>>600
>>601
>>603
ねーねーね、おしえてよーーーん。
ぶーすかぶー。おしえてーーー。
605
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:05:59
visual c++.netというコンパイラがあるようですが無料ですか?有料ですか?
606
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:12:40
>>604
http://www.sysinternals.com/Utilities/Filemon.html
607
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:13:42
>>602
まずそんなにスレッドを起こして何をするのかはっきりしる
返答によっては当局に通報する
608
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:36:23
>>602
普通はOSのバージョンで変わるもの
ハンドル数とかもな
609
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:47:12
>>600
=603
失せろよ精神障害
610
名前:
デフォルトの名無しさん
:2006/02/23(木) 21:56:07
>>605
そんなコンパイラはありません
611
名前:
デフォルトの名無しさん
:2006/02/23(木) 22:18:36
>>605
こちらへどうぞ
Visual Studio 2005スレ Part11
http://pc8.2ch.net/test/read.cgi/tech/1140652366/
612
名前:
デフォルトの名無しさん
:2006/02/23(木) 22:19:50
>>600
デバッガでプロセスにアタッチ
613
名前:
602
:2006/02/23(木) 22:29:12
>>600
の人気に嫉妬
>>607
ソケットのコネクトをポーリングで待ち受けてます。
1ポートでマルチコネクトを実現する場合、スレッドで立ち上げるものじゃないんでしょうか?
>>608
つ〜ことは、OSが起動しているスレッドやハンドルを減らさないと、
スレッドでマルチコネクトは1992までしか確率できないって事でしょうか?orz
windowsでマルチコネクトを実現する手法ってどんななんだろ?
614
名前:
デフォルトの名無しさん
:2006/02/23(木) 22:37:44
>>613
それは同時接続数が少ないときのやり方。
同時接続数を大きく取りたいのなら、IOCP or 1つのスレッド当り32個くらいの
ソケットを同時に処理するように作ると世ろし。
615
名前:
デフォルトの名無しさん
:2006/02/23(木) 22:40:56
>>613
基本的にはスレッドでいいと思うが、入り制御をしないと
死ぬほど接続しに来たときにそういうこと(スレッド生成不可)になっちゃうね
最大数を超える分はエラーで弾くか、キューイングするかかな
616
名前:
615
:2006/02/23(木) 22:42:53
ぬ かぶったスマソ
617
名前:
602
:2006/02/23(木) 22:47:56
>>614
IOCP調べてみた。難しそうだけど頑張ってみる
ありがとう
>>615
条件が2000コネクトで、サンプルで動いていると言われて貰ったプログラムが
1992個以降のスレッド作成でこけてたわけです。
(サンプルは、エラー出力してないからわからなかったんだと思う)
Linuxの場合は、無駄は多いけどワーッとプロセス立ち上げて対処できた気がする
とりあえず、ありがとう
618
名前:
デフォルトの名無しさん
:2006/02/23(木) 22:51:16
>>613
I/O完了ポート なら個数制限に悩まない。
でも、切断でバグらないようにするのが大変だったりもする。
619
名前:
デフォルトの名無しさん
:2006/02/23(木) 23:10:43
>Linuxの場合は、無駄は多いけどワーッとプロセス立ち上げて対処できた気がする
Windowsでもできるがな
620
名前:
602
:2006/02/23(木) 23:18:28
>>618
IOCP難しい。とりあえず、サンプルプログラム探してる。
>>619
プロセスなら数に制限ないのか〜。
どうしても駄目ならそっちに逃げます。
621
名前:
デフォルトの名無しさん
:2006/02/23(木) 23:20:23
>617
スタックサイズの制限はかけてる?
スレッドひとつに1MB割り付けば、それで2GBいく。
仮想メモリの上限が2GB.
622
名前:
602
:2006/02/23(木) 23:31:06
>>621
前に調べてかけた気がするけど、現状、どこでかけるか忘れて試せない。
仮想メモリの上限が2Gとしても、同じプログラムで物理メモリが違うマシンで実行して
同じ数しか起動できないのは、別の問題な希ガス。
623
名前:
デフォルトの名無しさん
:2006/02/23(木) 23:36:41
どっちにしろ、CPUが何千個もあるわけじゃないんだから、
現状で、スレッドを何十何百と作るのは間違っているだろ。
>>620
IO完了ポートについて解説した、ただで読める文章は、ほとんどない。
たしかCodeProjectに、サンプルコードがあったはず。。
それと、SysInternalsに、IO完了ポートの詳細な説明がある。
まあ、基本的にはスレッドプーリングという考えだから、
Advanced Windowsも多少は参考になるかと。
624
名前:
デフォルトの名無しさん
:2006/02/23(木) 23:41:11
32bitの壁にぶち当たってるんだから、物理メモリの搭載量が4GBだろうが16GBだろうが関係ない。
ふつーの32bitプロセスが使えるメモリ量は2GB−α。
625
名前:
デフォルトの名無しさん
:2006/02/24(金) 00:04:37
物理メモリの搭載量に関係なくWin32アプリケーションにはプロセス毎に4GBのアドレス空間が与えられる。
そのうち2GBはシステムが予約しているのでアプリ側で使用可能なのは2GB。
ただし、Windows Serverでは設定によってアプリが使用可能なアドレス空間を3GBまで拡張可能。
これとは別に、物理メモリ搭載量+ページファイルの上限サイズでシステム全体の使用可能なメモリ量が決定される。
626
名前:
602
:2006/02/24(金) 00:18:43
>>623
それも調べて見ます。
とりあえず間違いなのはわかったけど、サンプルの間違いを指摘するなら、
原因は別かなと思っただけです。
win32マルチスレッドプログラミングって本にもあるらしいから、
土日にでも本屋にいってみます。
>>624
なるほど。そういう事ですか。納得。
windows2000の仮想メモリは可変だったと思うけど、
最大値を超えて変更されたりしますか?
しないなら、32bitの壁以前に、物理メモリ+仮想メモリの限界が
32bitの壁以前に来るので、原因ではなさそう。
627
名前:
602
:2006/02/24(金) 00:22:23
>>625
通常であれば、メモリ128M、仮想メモリ最大値の設定256Mであれば
2G+128M+256Mがシステム最大のメモリ使用量と考えてOKですか?
ん〜、なんか難しいです。
単純に、メモリ不足のダイアログが出てないから全然疑っていませんでした。
628
名前:
デフォルトの名無しさん
:2006/02/24(金) 00:23:59
>>627
っ[とりあえず仮想メモリを仲間にしてあげて]
629
名前:
デフォルトの名無しさん
:2006/02/24(金) 00:26:19
っ[完全に誤爆した]
630
名前:
デフォルトの名無しさん
:2006/02/24(金) 00:29:18
ポップアップメニューにフォーカスが無くなった時に閉じる方法ってありますか?
どのようにすればいいかご教示ください。
631
名前:
630
:2006/02/24(金) 00:42:31
SetForegroundWindow(hwnd);
でできました。すみません、ありがとうございました。
632
名前:
デフォルトの名無しさん
:2006/02/24(金) 00:54:10
>>631
( ´・∀・`)へーthx
633
名前:
デフォルトの名無しさん
:2006/02/24(金) 04:28:05
TLSの制限かなと思ったけど違うか>大量スレッド
それだと1088が上限だしねぇ。
634
名前:
デフォルトの名無しさん
:2006/02/24(金) 07:27:15
>>602
GetLastErrorの値は?
635
名前:
デフォルトの名無しさん
:2006/02/24(金) 07:56:20
>>627
そのアドレス空間はアドレスの空間であって実際のメモリではない。
636
名前:
デフォルトの名無しさん
:2006/02/24(金) 10:34:16
なるべくメモリ使用量の少ないアプリを作っています。
窓を開けただけで1800KBほどのメモリを食っているのですが、
メモリを削っていく方法ってないですか?
Delphiで書いていてメモリを食うので、今はCで書いているのですが、
実行ファイルサイズは小さくなったのですが、メモリ使用量は
あまり小さくなりませんでした。
このパラメータをこれにしたら小さくなるというようなのがあれば、
教えてください。
637
名前:
デフォルトの名無しさん
:2006/02/24(金) 10:48:10
InvalidateRect関数を頻繁に使うと画面がちらつくのですが、
画面がちらつかない方法ってないですか?
画面上の更新したい部分だけ更新とかってできないものでしょうか?
638
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:01:01
InvalidateRect
~~~~~~
639
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:05:35
>>636
SetProcessWorkingSetSizeを試してみては?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdnaskdr/htm/gui45.asp
640
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:06:41
メッセージの送信元のスレッドを調べるにはどうしたらいいの?
641
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:08:41
ごめんちゃい。
もう一つ質問。
タイマーのイベントでタイマーの間隔以上の処理をしたらどうなりますか?
例えば、
1000ms間隔でタイマーを作っといて、
そのタイマーイベントで3000msの処理をした時など。
やりたいことは、
3000ms処理→1000ms休む→3000ms処理→1000ms休む・・・
メッセージ処理内でSleepなんか使うとメッセージ処理できなくなりますよね?
スレッドを作ったりするしかないですか?
642
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:41:21
タイマーメッセージはその処理が完了しない限り、
新たなメッセージがキューに積まれないようになっている。
長時間占有するような処理を書くなら普通は別のスレッドを使う。
643
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:45:49
>>642
ありがとうございます。
スレッドを使ってやりたいのですが、
スレッド内でDDE通信を開始すると、
そこで登録した割り込みが入って来ないんです・・・
スタックが別であることが問題となっているのでしょうか?
644
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:47:46
DDEなんかじゃなくてもいいんじゃないの
645
名前:
デフォルトの名無しさん
:2006/02/24(金) 11:55:52
そこでMsgWaitForMultipleObjects
646
名前:
デフォルトの名無しさん
:2006/02/24(金) 12:06:00
>>644
すでにあるアプリと通信するためにDDE通信を使う必要があるんです。
>>645
どういう意味でしょうか?
スレッド内でDDE通信登録
↓
ホットリンクなので値が変わると割り込みがくるはずが来ない
647
名前:
デフォルトの名無しさん
:2006/02/24(金) 12:10:42
別スレッド側からSendMessageを投げて、ユーザメッセージとして処理する。
648
名前:
デフォルトの名無しさん
:2006/02/24(金) 12:12:57
>>646
DDE はウィンドウメッセージベースでの通信なので、
ウィンドウをCreateWindow したスレッドでしか使えません。
ウィンドウを持つほうのスレッド(UIスレッドなどと言う)側で
DDE の処理を行って、ワーカスレッドではそういうことは
しないようにしましょう。
っていうかDDEごと別スレッドにもっていったんじゃ、
結局時間のかかる処理中にDDEに反応できなくなって、
DDE ブロードキャスト使ってる他のアプリが迷惑する。
649
名前:
デフォルトの名無しさん
:2006/02/24(金) 12:22:12
>>648
わかりづらくてすいません。
結局やりたいことは、DDE通信だけなんです。
ただTOPICが300ほどでITEMもできれば30000ほど登録したいと思ってます。
(これはDDE通信する相手のアプリの仕様です)
時間のかかる処理っていうのは、
DDE通信のための接続処理なんです。
だいたい20秒ほどかかってしまうので、
それをどうしたらスマートなのか悩んでいます。
650
名前:
デフォルトの名無しさん
:2006/02/24(金) 12:24:06
645さんと647さんは同じことを言っているのでしょうか?
ユーザメッセージとして処理するのは何の処理ですか?
割り込みで行う処理内でメッセージを投げて、
本来行いたい処理をユーザメッセージ処理内で行うという意味ですか?
651
名前:
デフォルトの名無しさん
:2006/02/24(金) 14:05:27
>>626
完全に出遅れてしまった…
CreateThread
http://www.microsoft.com/JAPAN/developer/library/jpwinpf/_win32_createthread.htm
> 解説
> 1 つのプロセスが作成できるスレッドの数は(ry
652
名前:
640
:2006/02/24(金) 14:19:35
>メッセージの送信元のスレッドを調べるにはどうしたらいいの?
これってどんなもんでしょ?
653
名前:
デフォルトの名無しさん
:2006/02/24(金) 14:24:31
>>636
IMEを一切使わないのなら、ImmDisableIME。
654
名前:
636
:2006/02/24(金) 15:18:53
>>639
SetProcessWorkingSetSizeは有用ですね!!
400Kくらいで安定するようになりました!
ありがとうございます。
>>653
IME使わないだけで60%くらいにできました!
ありがとうございます。
655
名前:
デフォルトの名無しさん
:2006/02/24(金) 16:21:24
SendMessageをコールするとたちどころに処理されてreturnされるけど、
これを、ワンクッション置いてから処理するようにしたいのだけど、可能ですか?
656
名前:
デフォルトの名無しさん
:2006/02/24(金) 16:23:07
>>655
何やりたいのかわからん
とりあえずsendmessageを内部で呼ぶラッパー関数でも作ってみたら?
657
名前:
655
:2006/02/24(金) 16:47:45
説明ぶそくですいません。
今考えてるのは、SendMessageから受けたリクエストを即座に処理をするのではなくて、バッファに貯めて処理をせずにreturn
タイマーで定期的にバッファを確認し、貯まってるようだとそれを処理する。
って感じで実装を考えてますけど、そのような事をやってるくれるAPIは無い物かと思いまして。
SendMessagePoolのようなものが無いかと。。。
658
名前:
655
:2006/02/24(金) 16:49:51
あれ、PostMessage
でいいのかな?
659
名前:
デフォルトの名無しさん
:2006/02/24(金) 16:50:57
>>657
そんなAPIは内と思う。自分でキューを作れ。
660
名前:
デフォルトの名無しさん
:2006/02/24(金) 17:01:40
俺も無い(似たようなのはあるかもしれないけど、完全に仕様を満たすものは無い)と思う
postmessage()使っても良いけど、その代わりポインタへ読み書きするようなメッセージは全てできなくなる
そのためのsendmessage()なんだから
661
名前:
655
:2006/02/24(金) 17:28:48
>660
レスどうもです。
そう、今それを質問しようとしたんですけど、パラメータでポインターを渡したとき誰がdeleteしてくれるのかと。。。
BSTRとか、ComPtrで渡せば勝手に解放してくれるのかしら?
662
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:14:15
>>660
> その代わりポインタへ読み書きするようなメッセージは全てできなくなる
それはプロセスを跨いだ時だろ?
>>661
> パラメータでポインターを渡したとき誰がdeleteしてくれるのかと。。。
メモリ管理はプログラマの責任で!
663
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:22:23
Window枠の、現在の色を取得するAPIって何でしたっけ
枠の色とは、XPより前のでいう、明るい灰色の部分(デフォルト)の事です
GetSysColor(COLOR_3DSHADOW)
だと思っていたのですが、今やってみたら微妙に違う感じで
664
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:33:55
VC++2005Expressにて、ポップアップメニューのオーナードローを行っています。
だいたい出来たんですが、メニューの外枠(3D)が邪魔だと思うようになりました。
これをどうにか消したいんですが、調べた所サンプルが見つかりませんでした。
もともと外枠のないポップアップメニュー(フラットなの)を作れたら一番良いのですが、ポップアップメニューのHWNDからGetWindowDCできれば何とかなりそうだと思いました。
ポップアップメニューのHWNDはどうやって取得したら良いでしょうか。
実験として、右クリックした時にGetCursorPosして、その時のPOINT構造体を元にWindowFromPointしてもだめでした。
CreatePopupMenuした後のHMENUからHWNDを逆引きするとか、そんなイメージで考えています。
よろしくお願いします。
665
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:37:41
>>633
COLOR_3DSHADOW
~~~~~~~~~
明るいわけないじゃん。
666
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:38:33
>>665
とりあえず落ち着け
667
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:52:12
落ち着いた。すまなかった。
>>663
最も明るい色 COLOR_3DHILIGHT
ちょっと明るい色 COLOR_3DLIGHT
668
名前:
デフォルトの名無しさん
:2006/02/24(金) 18:54:59
>>664
元々そういうことをするようにはできてないんで、1から自分でポップアップメニュー互換のウィンドウ作ったほうがはやい。
669
名前:
デフォルトの名無しさん
:2006/02/24(金) 19:29:27
>>664
XPではメニューをオーナードローするときのDCはオフスクリーンDCで、
α付き透過ウィンドウとしてスクリーンに表示されます。
(メニューの影とふわっと出てくる視覚効果のため)。
メニューのHWNDが得られたからそのGetDCして何でも描けるかというと
それはかなり難しい。
670
名前:
デフォルトの名無しさん
:2006/02/24(金) 19:31:00
>>669
そういう情報はどこから手に入れてくるのか希望します
671
名前:
デフォルトの名無しさん
:2006/02/24(金) 19:38:28
>>670
日本語でお願いします
672
名前:
デフォルトの名無しさん
:2006/02/24(金) 19:42:50
そういう情報はどこから手に入れてくるのか希望します
↓
Such information is hoped for though doesn't know where to obtain it.
↓
もっとも情報が望まれているそのようなものは、どこでそれを得るかを知りません。
673
名前:
デフォルトの名無しさん
:2006/02/24(金) 19:49:15
もっとも情報が望まれているそのようなものは、どこでそれを得るかを知りません。
↓
As for such the one that information is hoped for, it doesn't know where to obtain it most.
↓
情報が期待されるくらいのものに関して、それは、どこでそれを最も得るかを知りません。
674
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:16:27
日本語でOK
675
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:19:21
英語では王系
676
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:20:26
馬鹿ばっか
677
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:23:26
>676
一番バカっぽく見えるお
678
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:24:56
馬鹿ばっか
↓
Only foolishness
↓
愚かだけ
↓
只愚笨
↓
ただ馬鹿なだけ
679
名前:
663
:2006/02/24(金) 20:30:30
>>665-667
失礼コピペミス。正しくは GetSysColor(COLOR_3DFACE) でした
COLOR_3DLIGHTと同じ色みたいです
GetSysColor(COLOR_3DFACE)で取った値を、そのままDIBのメモリに
入れていたら微妙に変だったのですが、ビットのRとGを入れ替えたら上手く行きました
スレ汚し失礼
680
名前:
デフォルトの名無しさん
:2006/02/24(金) 20:50:57
ttp://www.killsometime.com/Video/video.asp?ID=404
ttp://www.dumpalink.com/media/1140251493/Most_Patient_Guy_In_The_World
↑
>>676
681
名前:
664
:2006/02/24(金) 22:06:22
うーわー、やっぱ無理なんですか。惜しい所まで行ったのになぁ…残念です。
回答ありがとうございました。
682
名前:
デフォルトの名無しさん
:2006/02/24(金) 23:31:48
GetSysColor(COLOR_3DFACE)
~~~~~~~
どう見ても表面の色です、本当にありがとう御座いました
683
名前:
デフォルトの名無しさん
:2006/02/25(土) 02:40:34
スレ伸びるの早すぎ
684
名前:
デフォルトの名無しさん
:2006/02/25(土) 07:21:04
Win98/Win2000を使っています。
Platform SDKなんですが、Win98用(?)とかWin2000用(?)はもう落とせないんでしょうか?
あと、昔はPlatform SDKの各部分が必要なものだけ落とせるようになっていたと思うのですが、もうそういうことはないのでしょうか?(というか各CABの内容リストをどこかに書いておいてくれればいいのに・・・)
685
名前:
デフォルトの名無しさん
:2006/02/25(土) 08:51:51
>Platform SDKなんですが、Win98用(?)とかWin2000用(?)はもう落とせないんでしょうか?
SDKのヘッダファイルを覗いてみれば解決することでしょう。
>あと、昔はPlatform SDKの各部分が必要なものだけ落とせるようになっていたと思うのですが、
ダウンロードした後に自分が必用なものを抽出すれば解決することでしょう。
686
名前:
デフォルトの名無しさん
:2006/02/25(土) 08:56:33
新しいPlatfrom SDKは以前のものを包容している。
WINVERなどを適切に設定してヘッダをインクルードすれば平気。
687
名前:
デフォルトの名無しさん
:2006/02/25(土) 13:32:07
WindowsMeでは、GetKeyState(VK_LBUTTON)は使えないのでしょうか?
マウスの左ボタンを押しても押さなくても、0が返ってきます。
WindowsMeのマシンが2台あり、両方で試してみたのですが、そうなりました。
688
名前:
687
:2006/02/25(土) 13:51:16
すみません、よく調べたらウィンドウプロシージャとは別のスレッドから
GetKeyStateを呼び出していたのが原因のようです。
689
名前:
デフォルトの名無しさん
:2006/02/25(土) 17:09:56
ウィンドウハンドルとかインスタンスハンドルって
グローバル変数にしちゃっていいかしら?
690
名前:
デフォルトの名無しさん
:2006/02/25(土) 17:20:19
イイヨイイヨー
691
名前:
デフォルトの名無しさん
:2006/02/25(土) 17:57:13
あまりお勧めしない
692
名前:
デフォルトの名無しさん
:2006/02/25(土) 17:59:11
スレ違い
693
名前:
デフォルトの名無しさん
:2006/02/25(土) 18:36:58
DLL が2つあるとして、呼び出し側、 DLL それぞれが別々の処理系で作られているとして、
それぞれが自分のメモリ確保ルーチンとか使っても大丈夫なのでしょうか?
開放は、確保したDLL なりが行います(別のランタイムで開放したりはしません)。
bcc32 5.6.4 と、VC++ Express Edition で試したのですが、特に問題が無いようでした。
ランタイムのつくりによるのでしょうか?
それとも、Win32 にそういうことを可能にする仕組みなり規約なりがあるのでしょうか?
または適切なスレへの誘導をお願いします・・・
694
名前:
デフォルトの名無しさん
:2006/02/25(土) 18:59:45
ダイアログボックスからテキストを入力して、それをウィンドウのクライアント領域
に表示したいのですがどうやればいいですか?
次のようにやってみましたが、駄目でした。表示したいテキストはSTLのリストに入れてます。
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
if(!lst.empty()) {
p = lst.begin();
TextOut(hdc, 1, 1, p->title, lstrlen(p->title));
}
EndPaint(hwnd, &ps);
break;
同じコードでWM_PAINTでなく、WM_COMMANDからメニューボタンが押されたら表示
みたいにすればうまくいったのですが、どこがまずいかお願いします。
695
名前:
デフォルトの名無しさん
:2006/02/25(土) 19:03:28
つ 再描画
696
名前:
デフォルトの名無しさん
:2006/02/25(土) 19:10:52
>>693
大丈夫。つーかそれがダメだったら、kernel32.dllとかuser32.dllとか使えないじゃん。
697
名前:
デフォルトの名無しさん
:2006/02/25(土) 19:22:50
std::listにchar*を入れるのはどーなんだろーなー
698
名前:
694
:2006/02/25(土) 20:00:56
もうすこしヒントお願いします。
WM_COMMANDから表示したものも、最小化、最小化から復帰で
消えてしまうのでWM_PAINT内が機能してないみたいなんですが。。
UpdateWindow()は呼んでます。
699
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:12:51
>>698
InvalidateRect()
700
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:21:08
700ゲット
701
名前:
694
:2006/02/25(土) 20:28:49
解決しましたTHX。InvalidateRect()は呼んでましたが、
仮想ウィンドウに書き込んで、WM_PAINT内でコピーにしたら出来ました。
WM_PAINT内でTextOut()って駄目なんですか。
702
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:35:18
WinInetを使用してPOSTを使用するプログラムを作っています。
その中で、InternetConnect関数を使用しているのですが、
第二引数が実際に存在してないサーバー名でも、
関数が失敗せずに値を返してしまいます。
エラー処理はできないのでしょうか?
703
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:41:06
>>701
>WM_PAINT内でTextOut()って駄目なんですか。
だめなわけ無いだろ。
おまいさんの処理がおかしいだけだよ。
704
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:43:12
>>702
内容が↓に酷似しているのは気のせいか
ttp://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200509/05090002.txt
705
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:43:42
まともなアプリなら、メモリDCに描き溜めといて
WM_PAINT時はメモリDC→デバイスDCへのBitBltしか呼ばんと思うけどね
706
名前:
デフォルトの名無しさん
:2006/02/25(土) 20:48:39
これはまた、とんだ「まともな」論ですな。
707
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:04:57
リモート接続ではかえって遅くなるから、ちゃんと判定してね、
ってレイモンドが言ってた記憶がある。
708
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:10:31
>>704
酷使してますね。
解決方法がいまいちよくわからないです。
結局、何か送らないことにはわからないってことですか??
709
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:19:07
>>706
GUIプログラミングの定石だお
710
名前:
>>708
:2006/02/25(土) 21:25:21
>>708
存在しないアドレスを指定しても、何かポインタが返ってくるのは
proxy 経由の場合?それとも直接接続?
711
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:36:50
>>710
直接接続の場合です。
試しにProxy経由でもやってみましたが、
結果は同じで、ハンドルに値がかえってきました。
712
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:39:33
>>706
なるべくデバイスDCに直接描画しないのは当然だよ。
応答速度が速いアプリはみなメモリDC使ってるはず。
最近はVNCとかRDP経由で使う場合も増えてきたし、
データ転送量低減のためにも余計な書き換えはしない。
Officeとかダイアログ系アプリでよくあるけど直接描画していく
類のソフトは、通信でブロック転送される際に更新矩形が
正常に転送されず、イメージを取りこぼす場合が多い。
RDPソフト側のバグなのかもしれないけど
BitBltが安定してるのは確か。
713
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:43:27
メモリDCを使うのは問題ない
重要なのはそこではない
714
名前:
デフォルトの名無しさん
:2006/02/25(土) 21:56:47
>>705
>>712
おれは706じゃないが、なんでもかんでも「メモリDC->BitBlt」というのには反対。
InvalidateRect()で必要なところだけ無効化し、WM_PAINTで必要なところだけ
再描画できるロジックが組める内容の場合には、そのほうがメモリDCより高速。
いまでこそCPUが早くなってビデオカードのアクセラレータなんて2Dではあまり
気にしなくなったが、メモリDCだとこれが効かない。
メモリDCが良いかどうかは、ケースバイケースでしょ。
715
名前:
694
:2006/02/25(土) 22:02:07
>>713
一応言っとくと、、上の方々は俺じゃないっすよ。俺がNOOBなのはわかってます。
716
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:08:15
>>705
世の中のどれだけのアプリケーションが「まとも」かどうかわからない。
717
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:16:13
ある、キー入力を受け付けるソフトがあるのですが、それにソフト的に
入力を与えたいです。
たとえば、「K」を入力すると、10ms間隔で順番にA,B,Cとそのソフトに
入力するなどです。
Win32APIを駆使してこのようなプログラムを作成する場合、
どのような方針、アルゴリズムで進めていけば良いでしょうか??
718
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:19:17
アルゴリズム・・・
719
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:25:48
Kを入力すると順番にA〜Kまでってことか?
720
名前:
717
:2006/02/25(土) 22:28:47
>>719
はい、そんなかんじです。
「K」を受けてタイマーで順番に「A」、「B」、「C」・・・と処理していけばイイとは思うのですが、
それを他のアプリケーションにどうやって渡せば良いか検討がつきません。
721
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:37:33
>>720
WM_KEYDOWN
WM_KEYUP
722
名前:
デフォルトの名無しさん
:2006/02/25(土) 22:48:35
>>720
SendInput
723
名前:
デフォルトの名無しさん
:2006/02/25(土) 23:09:59
まぁ、PostMessageかSendInputだな
724
名前:
717
:2006/02/25(土) 23:12:37
>>721
それは分かるのですが・・・
>>722
>>723
ありがとうございます。
それでやってみます m(_ _)m
725
名前:
デフォルトの名無しさん
:2006/02/26(日) 11:46:48
CDドライブを開閉するにはどうしたらいいでしょうか?
いろいろ探してみるとASPIやらなんやら出てきましたが、
肝心な情報にヒットしなくて困ってます
726
名前:
デフォルトの名無しさん
:2006/02/26(日) 11:54:07
>>696
ありがとう。
727
名前:
デフォルトの名無しさん
:2006/02/26(日) 11:57:20
>>725
単純にあけたかったら、MCI使えばいい。
set cdaudio door open
こんなんだっけ?
728
名前:
デフォルトの名無しさん
:2006/02/26(日) 12:05:18
ejectじゃないか
729
名前:
デフォルトの名無しさん
:2006/02/26(日) 12:07:44
VisualC++6.0のSDK使ってるんですが
Winampのスキンのように、ウインドウの外見を変える方法を教えてください
730
名前:
デフォルトの名無しさん
:2006/02/26(日) 12:12:42
>>729
自前実装してください。
ただ、しっかりと作らないと、
Windowsが用意してくれているGUIより貧弱で、
使い勝手が悪いものが出来上がります。
Winampもそのひとつ。
はい、次の人
731
名前:
デフォルトの名無しさん
:2006/02/26(日) 12:27:10
>>725
DeviceIoControl
732
名前:
デフォルトの名無しさん
:2006/02/26(日) 12:28:02
>>730
WS_POPUPで、縁やタイトルの部分は画像を使うっていう方法でいいのですか?
733
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:04:39
>>732
ケースバイケース。好きなようにやれ。
734
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:14:38
DirectXを使わないで(そこまで出来ないので・・)所謂オフスクリーン/ダブルバッファリングを実装したいのですが、
これはCreateCompatibleDC()関数なんかでメモリデバイスコンテキストを作成して、そこに描画してBitBlt()で転送
という形でいいんでしょうか
735
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:24:40
>>734
訊く前に自分なりにやってみて玉砕しろ。経験だ。
736
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:32:17
>>734
1つだけキーワードをあげよう
CreateDIBSection
737
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:32:25
馬鹿は答えなくていいよ
738
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:34:13
DIBSectionは必ずしも必要じゃないけどな。
便利だけど。
739
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:34:48
バッファ領域を直接操作(ポインタで)しないならOKと思う。
740
名前:
デフォルトの名無しさん
:2006/02/26(日) 13:42:44
DirectXを出してきたから、画像処理系と勝手に脳内補完してしまったけど
そんなことどこにも書いてないか。
たんにGDIの描画をバッファしたいだけなら、CreateCompatibleBitmapでいい。
ただ、これはメモリDC使って作成するとモノクロビットマップを作るから要注意。
俺はつい最近それでハマった。
741
名前:
デフォルトの名無しさん
:2006/02/26(日) 15:01:39
hdc = BeginPaint(hWnd,&ps);
memDC = CreateCompatibleDC(hdc);
として
例えばFillRect(memDC , &rect , (HBRUSH)GetStockObject(BLACK_BRUSH));
としてhdcへBitBltしてみたのですが何故か転送されません
ただしHBITMAPを取得してSelectObject(memDC, hBmp);と選択して転送するとそのビットマップがきちんとhdcに転送されているようです。(描画された)
もう何なんでしょうか(´・ω・`)
742
名前:
デフォルトの名無しさん
:2006/02/26(日) 15:10:56
描画結果を保存する先がないから。
743
名前:
デフォルトの名無しさん
:2006/02/26(日) 15:20:06
>>742
試しに500x500のHBITMAPを作成してSelectObjectでメモリデバイスコンテキスト(以下memDC)に選択させてから
memDCにFillRectで矩形を描画してみたら上手くいきました。
しかしなんか無理やり感があるのでもっと調べたいと思います
すみませんでした
744
名前:
デフォルトの名無しさん
:2006/02/26(日) 15:21:03
>>742
それは間違い。
1x1、モノクロのビットマップがある。
転送されていないんじゃなくて、気付かないだけ。
>>741
適切な大きさ、色深度のビットマップを作成し、Selectしろ。
745
名前:
デフォルトの名無しさん
:2006/02/26(日) 15:23:52
>>744
わかりました、わざわざありがとうございます
746
名前:
デフォルトの名無しさん
:2006/02/26(日) 16:16:33
ttp://www.uploda.org/uporg322480.c.html
左クリック・右クリックを検出して、その座標に図形を描画してます。
クリックされる毎にこれまで描画した位置の図形は消されます。
作れたのはいいんですが、改めて考えるとと、どうして図形が消されるのか
分かりません……。
確かにクリック時一発目のInvalidateRect()では図形のある位置に再描画要求
をかけてますが、「消える」のはおかしいような……。
二回目のInvalidateRect()でクリック位置に描画されるのは納得なんですが。
下らない質問ですいません。
747
名前:
デフォルトの名無しさん
:2006/02/26(日) 16:34:05
ヒント
つ InvalidateRectは、即座に再描画されるわけではない
748
名前:
デフォルトの名無しさん
:2006/02/26(日) 16:35:25
>>746
WM_PAINTで描かないから消える。
749
名前:
デフォルトの名無しさん
:2006/02/26(日) 16:46:52
( ゚д゚)ポカーン
750
名前:
デフォルトの名無しさん
:2006/02/26(日) 16:58:03
( ゚д゚)ポンカーン
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.