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 のレスもしっかり読んでなくてごめんなさい