■過去ログ置き場に戻る■ 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.