[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 12:24 / Filesize : 103 KB / Number-of Response : 480
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Win32API質問箱 Build76



1 名前:デフォルトの名無しさん mailto:sage [2009/02/03(火) 09:56:18 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build75
pc11.2ch.net/test/read.cgi/tech/1231423602/

413 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 13:07:34 ]
Direct2DとかWriteってDirectXになるの?
それともWIn32API?

414 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 14:51:53 ]
1GBくらいのメモリを確保する場合はnewとGlobalAllocどちらがいいですか?
またその他に適した関数はありますか?

415 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 14:57:59 ]
VirtualAlloc

416 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:01:48 ]
>>415
ありがとうございます〜
さっそく調べてみます!

417 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:02:22 ]
そんなに独り占めしてずるいわあ

418 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:24:14 ]
1Gバイトのシリコンメモリ領域を明示的に確保し
それにスワップ無しでランダムアクセスするようなアプリを
動作させることが出来る商用パッケージOSは今のところ無い。
(近い将来出るかも知れないが)

Windowsの場合VirtualAllocとか使って、シリコンメモリに
領域を確保したつもりになってももどうせディスクにスワップ
されるので、1Gバイトのファイルを作成し、それにランダム
アクセスするコードと速度面では大差が無い。

419 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:37:20 ]
>>418
使ったこと無いから詳しくは知らんがAWE APIは?

420 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:45:32 ]
>>418
そうなんですか><


すみません。GlobalAllocもVirtualAllocも500Mくらいを超えたらエラーになってしまうんですが
一度に取ってもダメで500Mを2回に分けても2回目のVirtualAllocでエラーになります。

ちなみにVirtualAllocで1回で取れる最大サイズってなんぼなんですか?

421 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 15:54:29 ]
>>418
本当に欲しければ、VirtualLockがあるよ。Unix系だってmlockがあるだろう。
果たして使いこなせるかどうかはともかく。



422 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:27:46 ]
>>420
環境によるし、その時のアドレス空間の空き状況にもよる。

423 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:35:09 ]
>>422
そうみたいですね・・・
いちおうメモリは4GBあるのですが、1MBづつ取ると970MBの所でエラーになりました
タスクマネージャの利用可能メモリは3.4GBあるのですが
2GBくらい取れないんですか?

424 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:37:58 ]
なるべくプログラム開始直後にVirtualAllocで予約かけたら、
もうちょっと大きくとれないか?

425 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 16:38:48 ]
>>423
環境によるし、その時のアドレス空間の空き状況にもよる。

426 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 17:03:25 ]
特に設定しなければ、ユーザーエリアは最大2GB
そこをプログラムで使用中の上、連続したエリアを取りたいんだろうからそんなもんだな

427 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:40:03 ]
PCに1GBのメモリを確保できるだけの余力がなかったりして。:-)

428 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:43:40 ]
そんな大量に物理メモリを取りたければドライバ書けばいいだろ

429 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:45:44 ]
つーか64bitに移行しろ

430 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 18:57:29 ]
顧客にそんなこと言えますか? ねぇ、あなた

431 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:00:54 ]
こんなとこでそんな質問すんなよ



432 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:02:39 ]
メモリが少ない別PCの方が多く確保できた
これタスクマネージャのコミットチャージの最大値までしか取れないみたいですが
物理メモリが少ない方のPCはここの値がちょっと大きいのですが
これってどこで調整できますか?まあAPIとは関係ないっぽい話になっちゃいますが・・・

433 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:03:09 ]
32APIスレなのに64ビットに移行しろとか言わなくても

434 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:06:56 ]
>>429みたいな馬鹿はスルーしましょう。

435 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:12:15 ]
>>432
強制的にramdiskとしてメインメモリより1GB搾取して
それをおれおれ専用メモリにしたら?
でも、どうやればよいのしらん

436 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:14:13 ]
うんこしてきます。
しばらくお待ちください

437 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:15:02 ]
>432
合計はスワップファイル+物理メモリでしょ。

438 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:21:46 ]
>>413
そもそもDirectX自体、広義にはWin32 APIの一部分ということはともかく、
DirectXの一部みたいだけど、GDI/GDI+の置き換えとか言っているし、
どっちで質問するのがふさわしいかまだよく分かんないね。

439 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:31:47 ]
ここ → DirectXスレへ行け
DirectXスレ → Win32APIスレへ行け
って言われるんですね、分かります

440 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:34:34 ]
だったらDirect2Dのスレでも立てればいいだけだろうが

441 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:38:20 ]
実装はCOMだろうしここになるとは思えない。



442 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:38:32 ]
>>440
スレ立てできないくせにレスしないで下さい。ウザいだけです。

443 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 19:42:29 ]
>>441
(´,_ゝ`)プッ

444 名前:108 mailto:sage [2009/02/12(木) 20:16:11 ]
>>408
ありがとうございます、勉強になりました。
>>409
ありがとうございます。
CommonControl 6.0を使用出来るようになりました。

445 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:21:02 ]
ま、Win7のリボンコントロールもCOMだからな

てかIUIFrameworkでググっても日本語のサイトが1件も出ねぇw

446 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:26:02 ]
これをwin32の質問と見なして良いかどうか微妙ですが、
考えていると脳みそが沸騰して訳が分からなくなったので質問させていただきます。
質問
・VISTAのAero ON でウィンドウを作成する前にそのサイズを知る方法。
開発環境 SDK/VC++ 2005

問題の解決には、通常GetSystemMetrics()かAdjustWindowRectEx()を使うと思います。
ところが、VISTAのAeroが有効なときは奇妙な現象が起こります。
そこで実験してみました。
dwStyleA = (WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_CLIPCHILDREN);
dwStyleB = dwStyleA | WS_THICKFRAME;
の設定で、100,100 (800x600)をAdjustWindowRectEx すると
dwStyleA: 97,76 806x627
border w,h: 3,3
dwStyleB: 92,71 816x637
border w,h: 8,8
という結果が返ります。各borderは、次の式で求めています。
横は(ウィンドウ幅-クライアント幅)/2
縦は(ウィンドウ高-クライアント高-::GetSystemMetrics(SM_CYSMCAPTION))/2
一見して当たり前で、作成されたウィンドウをキャプチャしてサイズを確認した
ところ、確かに2000/Xp/VISTA aero off の時は見た目もこの通りになります。
しかし、VISTAのaeroが有効な環境では、dwStyleAでもdwStyleBでも、
見た目はdwStyleBと同じ(!)になるのです。
しかも、GetSystemMetricsもAdjustWindowRectExもAero on/off で同じ値を返します。
もちろん作成後に GetWindowRect()した場合、AdjustWindowRectEx()と
整合性のある値(つまり見た目とは違った値)を返します。
これがAPIのバグでないとしたら、dwm.exeが独自にウィンドウを装飾している
ものと思われますが、その値を取得する方法がわかりません。

1.Aero on時に見た目通りのウィンドウサイズを取得する方法は?
2.Aero on時のウィンドウサイズは常に thickframeと同じと見なしていいの?
3.2が良いとした場合、Aero on を手軽に知る方法は?

447 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:54:38 ]
Theme系のAPIを使えば、もう少しまともな値が得られそうな予感。
あまりに面倒臭そうで試す気にもならんが。

ちなみに、AdjustWindowRectExは
必要なクライアント領域を確保するのに指定すべきウィンドウサイズを求めるAPIだから、
その周りのフレームについては何の保証もしていないと思う。

448 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 20:57:20 ]
そもそも2000/XPでもメニューが2段以上になる場合とかは想定してくれないからな

449 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:06:00 ]
>>447
theme系APIというと、uxtheme.dll のあれですね?
チェックしてみます。ありがとうございました。

例えば>>446は、800x600のクライアント領域を指定して、AdjustWindowRect を呼び出すことで
作成されるはずのウィンドウの大きさを取得してチェックしたものですが、問題なのはそれが見た目の
サイズと異なってしまうことなのです。
見た目だけの問題なので、だれも気にしないのかな・・・

450 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 21:56:02 ]
 小学生の頃
 必死で買ったエロ本を母親に捨てられた
 恥ずかしいから怒る事もできず
 できるだけゴミ箱から回収するように頑張っていた
 しかし母親が何度も何度も捨てるもんだから
 ついに親父がブチ切れた

 切れた親父は母親に
 「これは!この本は!」とエロ本をゴミ箱からすくい上げ
 見せながら力説してくれた
 「これはな!このくらいの年のガキにとっちゃ!
 金払えば買えるもんじゃないんだ!お前はなぜこれを捨てるんだ!」

 俺は感動した

 親父はエロ本を俺に投げつけて
 「もう絶対捨てさせないし隠す必要もないからな!」
 と言ってくれた

 俺は泣いた

 でも次の日にエロ本は親父の部屋にあった
 何か複雑な気持ちだった



451 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:13:29 ]
>>445
COMだとネイティブだけでホストするのめっさめんどくせぇじゃねぇか・・・



452 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:29:42 ]
んなこたーない
WindowProc書いてSendMessage連発する方が面倒

453 名前:デフォルトの名無しさん [2009/02/12(木) 22:30:29 ]
>>450
今日VIPでできたコピペじゃないか

454 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:33:19 ]
>>450=>>453
はいはい良かったね
さっさとVIPへ帰れ

455 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:29:23 ]
くけいと読むんだ、たんけいかと思ってた

456 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:37:53 ]
あるある。

457 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:55:29 ]
方形

458 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 17:59:29 ]
くけいでよかったんだ、ホッとした

459 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 16:14:29 ]
チョコ欲しくない?

460 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 16:19:57 ]
くれ

461 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 16:42:54 ]
チンコほしい



462 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 17:20:30 ]
ひぃ

463 名前:デフォルトの名無しさん [2009/02/15(日) 00:25:44 ]
いま、注目されている劇団のHPの中身。
circus.main.jp/next.html

2ちゃんにもスレがあるよ。
gimpo.2ch.net/test/read.cgi/drama/1098881123/901-1000

464 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 01:47:50 ]
お前ら出番だ
pc11.2ch.net/test/read.cgi/tech/1234626656/

465 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 05:07:59 ]
マルチ乙

466 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 05:30:18 ]
MAXIMIZEBOXを表示し、且つキャプションバーダブルクリックでの動作をすり替えるにはどうすればいいのでしょうか?
WM_SYSCOMMANDのように最大化動作の直前に知りたいのですが.

467 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 07:03:31 ]
WM_SYSCOMMAND

468 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 09:28:32 ]
独自のキャプションバーを作る

469 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 11:44:50 ]
msg が WM_SYSCOMMAND かつ wParam が 0xf012 の時に摩り替える処理を行って
かつ DefWindowProc にデフォルト処理をさせなけりゃおk

470 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 11:47:26 ]
間違えた
×0xF012
○0xF032

471 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:10:42 ]
///<summary>
/// Sent when form maximizes because of doubcle click on caption
///</summary>
SC_MAXIMIZE2 = 0xF032,

これですね、ありがとうございます。
膨大で、やりたいことやろうと思うとすごく難しい



472 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:18:12 ]
/// Sent when form maximizes because of doubcle click on caption
///</summary>
SC_RESTORE2 = 0xF122,

これも忘れずになー

473 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:20:52 ]
ダブルクリックの時だけ動作を変えるってどういう状況?
ウィンドウシェードでも実装したいのか?

474 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:30:37 ]
DirectXプログラムで最大化ボタンでフルスクリーンにしようかと.

475 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:35:30 ]
昔の俺と同じ動機だ
当時最大化ボタンにマウスカーソルを合わせた時ツールチップで「フルスクリーン」と出るようにもしたかったけどそっちは挫折した

476 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 12:41:13 ]
こうやって先人がレールを敷いてくれると助かりますよ、本当に。

477 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 13:32:27 ]
>>474
普通にWM_SYSCOMMAND/SC_MAXIMIZEが飛んでくるのを処理すればいいし自ら答え出してるだろ

で、SC_MAXIMIZE2とか定義してる馬鹿がいるみたいだけどMSDNをしっかり読もうな

> In WM_SYSCOMMAND messages, the four low-order bits of the wParam parameter are used internally by the system.
> To obtain the correct result when testing the value of wParam, an application must combine the value 0xFFF0
> with the wParam value by using the bitwise AND operator.

478 名前:デフォルトの名無しさん mailto:sage [2009/02/15(日) 13:54:51 ]
>>477
最大化ボタンもタイトルバーダブルクリックもmsgはWM_SYSCOMMANDだが
前者のwParamはSC_MAXIMIZE(0xF030)で後者のwParamは0xF032なんだよ

479 名前:478 mailto:sage [2009/02/15(日) 13:57:20 ]
MSDNも>>477のレスもしっかり読んでなくてごめんなさい






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<103KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef