Win32API質問箱 Build71
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/10/23(木) 15:59:18やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
Win32API質問箱 Build70
http://pc11.2ch.net/test/read.cgi/tech/1221446107/
0152148
2008/10/28(火) 00:05:42定義されてないとそのヘッダファイルのリリース時の最新バージョンが定義される
ってかんじなんですかね
気をつけてないと無意識にVistaでしか動かないアプリとか作ってしまいそうです
明示的にターゲットのバージョンを定義するのが良い作法の様ですね
>>149
>>151
ありがとうございました
0153デフォルトの名無しさん
2008/10/28(火) 01:56:16で、TEXTMETRIC構造体のtmAveCharWidthというメンバで文字横幅の平均値は
得られるようですが、この横幅を基準に文字列がどのくらいのフィールドを
必要とするかを考えても、文字の組み合わせによっては、想定したフィールドの
横幅からはみ出すこともあるってことで、OK?
対処法は余裕をもって場所確保しておけってことなのかな。
0154デフォルトの名無しさん
2008/10/28(火) 02:01:52万全を期すならGetTextExtentPoint32使った方がいいんだろうけど
0155デフォルトの名無しさん
2008/10/28(火) 02:06:36GetTextExtentPoint32というのは、文字列ごとに計算するって奴ですよね。
0156デフォルトの名無しさん
2008/10/28(火) 02:51:07という用途みたいだから、tmMaxCharWidth*nでないの
0157デフォルトの名無しさん
2008/10/28(火) 03:42:24大文字の場合も考慮に入れてくれるんですよね、その関数。
0158デフォルトの名無しさん
2008/10/28(火) 07:23:44ShellExecute(hwnd,"open","○○.chm",NULL,NULL,SW_SHOWNORMAL);
って書けばふつーにchmが開くんですか?
0159デフォルトの名無しさん
2008/10/28(火) 07:36:28やってみれば?
0160158
2008/10/28(火) 08:32:130161デフォルトの名無しさん
2008/10/28(火) 09:05:070162デフォルトの名無しさん
2008/10/28(火) 09:16:37できました、どっかでID、ヘッダーファイルがどうこうと見たので
たんに開くだけの場合も何か必要と思い込んでました…
0163デフォルトの名無しさん
2008/10/28(火) 09:51:100164デフォルトの名無しさん
2008/10/28(火) 10:32:370165デフォルトの名無しさん
2008/10/28(火) 14:15:49とした時の BITMAP::bmBits は解放する必要ないのでしょうか?
0166デフォルトの名無しさん
2008/10/28(火) 14:27:050167165
2008/10/28(火) 14:40:05http://msdn.microsoft.com/ja-jp/library/cc410355.aspx を見ただけでは
その記述を見つけることはできませんでした。
ありがとうございました。
0168デフォルトの名無しさん
2008/10/28(火) 14:51:210169デフォルトの名無しさん
2008/10/28(火) 14:55:220170デフォルトの名無しさん
2008/10/28(火) 15:02:51> この関数は、、、、、、or いずれかの構造体、またはテーブル内のエントリ数(論理パレットに対応)を格納します。
何これ
0171デフォルトの名無しさん
2008/10/28(火) 15:05:388ビット以下のbmpはパレット付き
0172デフォルトの名無しさん
2008/10/28(火) 15:09:15いやそうじゃなくて、機械翻訳がおかしいと言いたいのだが・・・
0173165
2008/10/28(火) 15:15:15LocalFree() するとアクセス違反が起こりました
問題なく処理は進んでいますが、
念のためコメントアウトしておきます
>>168
ヘルプを見る限りそのようなので、
CreateDIBSection() でBITMAPを作成しています
>>169
同じアドレスということは
メモリの管理はAPI側がやってくれるということなのでしょうか?
>>170
日本語版ヘルプはそういうのが多いですね
特にWin32APIで
0174デフォルトの名無しさん
2008/10/28(火) 15:17:04自分で作ったバッファのアドレスが入ってるだろうってことじゃないか?
0175165
2008/10/28(火) 15:20:01自分でバッファを作ったわけではなく、
CreateDIBSection() の引数で void** を渡し、
そこにアドレスが入っています。
なのでシステムが用意したバッファだと思っているのですが・・・
0176デフォルトの名無しさん
2008/10/28(火) 15:21:290177デフォルトの名無しさん
2008/10/28(火) 15:25:320178165
2008/10/28(火) 15:27:37すみません読み違えていました
>>177
つまり DeleteObject() さえしていれば
解放の必要はないということですね?
ありがとうございました。
0179デフォルトの名無しさん
2008/10/28(火) 15:28:24>>166は大嘘
0180デフォルトの名無しさん
2008/10/28(火) 17:43:450181デフォルトの名無しさん
2008/10/28(火) 19:11:350182デフォルトの名無しさん
2008/10/28(火) 23:47:58実現するには、アプリケーションのウィンドウがアクティブではない時も
キーイベントを拾う必要があると考えてます
この場合、
・キーボードフックを使う
・GetAsyncKeyStateでポーリングしながらキー入力をチェックする
以外の方法が思いつかないんですが、他にやり方はありますか?
0183デフォルトの名無しさん
2008/10/28(火) 23:59:36ホットキー
0185デフォルトの名無しさん
2008/10/29(水) 00:11:240186デフォルトの名無しさん
2008/10/29(水) 00:45:37けっこうスクロールバー1つ付けるにしても、メッセージを処理しなくちゃ
いけないんだなぁなんて思ってるところでありまして、これがC#などの
いわゆる高級言語だと、どれくらい楽に実装できちゃうんでしょうか。
あまり変わらないのでしょうか。
0187デフォルトの名無しさん
2008/10/29(水) 00:53:290188デフォルトの名無しさん
2008/10/29(水) 01:03:020189デフォルトの名無しさん
2008/10/29(水) 06:15:490190デフォルトの名無しさん
2008/10/29(水) 06:45:250191デフォルトの名無しさん
2008/10/29(水) 08:31:05C#は何も知らなくても基本的なGUIアプリ作れるくらいにラク
0192デフォルトの名無しさん
2008/10/29(水) 09:00:29C#だと、プロジェクトを作っただけで、既にウインドウが1つ作られてて、
それだけで既に一通り動作する。
そして、デザイン画面でボタンをD&Dで貼り付けてダブルクリックするだけで、
ボタンクリック時のメッセージハンドラが作られる。
0193デフォルトの名無しさん
2008/10/29(水) 09:01:340194デフォルトの名無しさん
2008/10/29(水) 09:26:220195デフォルトの名無しさん
2008/10/29(水) 09:41:45一般的な動作以外をやらせてるなら手間はあまり変わらんぞ、そこの部分だけは。
0196デフォルトの名無しさん
2008/10/29(水) 10:06:11他の呼び方があるの?
0197デフォルトの名無しさん
2008/10/29(水) 10:10:340198デフォルトの名無しさん
2008/10/29(水) 11:02:45C#はって言うより十数年前のVBで既にそうだった訳だが
0199デフォルトの名無しさん
2008/10/29(水) 16:25:12あれを自前のアプリへで対応させるのってどうやるの?
どっかにドキュメントがあったら教えてください。
0200デフォルトの名無しさん
2008/10/29(水) 16:49:450201186
2008/10/29(水) 18:06:15MFCなんかでは、ウィザードである程度コードの骨格を作ってくれるというのは
知っていたので、C#も同じような感じですか。
ただ、それならWin32APIでも、一度自分でひな形を作れば、それほど手間は
変わらないのかなと。それよりも、スクロールに付随する複雑な描画の部分を
魔法のように解決してくれるってことはないんですね。
そういう意味ではあまり変わらないのかなぁという印象です。
0202デフォルトの名無しさん
2008/10/29(水) 18:10:02それ貼るだけでいい、というのはあるよ。
0203デフォルトの名無しさん
2008/10/29(水) 20:48:29コモンコントロールの方がよっぽど面倒なのたくさんあるぞ
0204デフォルトの名無しさん
2008/10/29(水) 22:09:40long型が64ビットとかになるのかな。
32ビット版プログラムも動くの?
Win32APIの知識でそのまま移行できるのかい?
0205デフォルトの名無しさん
2008/10/29(水) 22:12:500206デフォルトの名無しさん
2008/10/29(水) 22:14:030207デフォルトの名無しさん
2008/10/29(水) 22:23:05自慢じゃありませんが、よくわかっていません。
CPUが一度に処理できるデータのサイズが32ビットである
アーキテクチャ用のプログラムが32ビットプログラムと
違うの?
0208デフォルトの名無しさん
2008/10/29(水) 22:23:140209デフォルトの名無しさん
2008/10/29(水) 22:25:22で、正解は?
0210デフォルトの名無しさん
2008/10/29(水) 22:54:32プログラムが32ビットにきまってるだろう
0211デフォルトの名無しさん
2008/10/29(水) 22:55:060212デフォルトの名無しさん
2008/10/29(水) 23:17:0964ビットプログラムって奴がさ
0213デフォルトの名無しさん
2008/10/29(水) 23:49:29「long型が64ビットとかになるのかな。」って、
32ビット版のプログラムは、long型は何ビットなんだ?
0214デフォルトの名無しさん
2008/10/29(水) 23:53:560215デフォルトの名無しさん
2008/10/30(木) 00:25:26>画像のスクロールに対応済みのコントロール
どれ?
0216デフォルトの名無しさん
2008/10/30(木) 01:00:050217デフォルトの名無しさん
2008/10/30(木) 01:04:210218デフォルトの名無しさん
2008/10/30(木) 01:20:14int とlongは32bitのまま
0219デフォルトの名無しさん
2008/10/30(木) 01:48:56もしくは画面外のウィンドウをキャプチャすることはできる?
だいぶ調べたけど一番上のウィンドウ(もしくはデスクトップ全体)かつ
デスクトップ画面内しか無理という結論に達しつつあるんだけど・・
0220デフォルトの名無しさん
2008/10/30(木) 01:50:070221デフォルトの名無しさん
2008/10/30(木) 02:00:57たとえばwPramとかlParamが64ビットになるのか?
それともlong longをふんだんに使えばいいのか?
0222デフォルトの名無しさん
2008/10/30(木) 02:07:020223デフォルトの名無しさん
2008/10/30(木) 02:09:430224デフォルトの名無しさん
2008/10/30(木) 02:14:45ちなみに、Windowsのカーネルも32bitと64bitでソースコードベースは統一されている。
0225デフォルトの名無しさん
2008/10/30(木) 02:17:260226デフォルトの名無しさん
2008/10/30(木) 02:21:32いまいち覚えてないしPSDKも手元にないのでアレだが、typedef LONG_PTR LPARAMになるんじゃないか?WPARAMは多分変わらないだろう。
64ビットになることで今まで無邪気にint型相当のデータ型にポインタぶち込んでたところが64ビット整数型を使わなければならなくなる。
UINT_PTRとかDWORD_PTRなんてデータ型見たことないか?
従来ポインタ-整数間のやり取りをしていた箇所が「ポインタを収められるサイズ相当の整数型」を使うようになって、具体的に32ビットか64ビットかを問わずHOGE_PTRとかで抽象的に扱えるようになってる。
その点Win32APIの方でも64ビットを意識した修整が入ってるから、ポインタは絶対32ビットだ〜みたいなことしてなければ「多分」従来どおりでいい。
0227224
2008/10/30(木) 02:23:06wParam,lParam両方とも64bitになるな。
0228デフォルトの名無しさん
2008/10/30(木) 02:25:14typedef LONG_PTR LPARAM
だね。ポインタだから64bit
0230デフォルトの名無しさん
2008/10/30(木) 02:43:100231デフォルトの名無しさん
2008/10/30(木) 02:45:06PrintWindow()
0232デフォルトの名無しさん
2008/10/30(木) 02:54:570233デフォルトの名無しさん
2008/10/30(木) 02:59:520234デフォルトの名無しさん
2008/10/30(木) 03:03:31新しいOSを機にぼちぼち64ビットWindowsに乗り換えるべきだろうか。
0235デフォルトの名無しさん
2008/10/30(木) 03:15:00他人のウィンドウが自分のウィンドウエリアに描画するから無理だよ。
Vistaならできるかも。
0236デフォルトの名無しさん
2008/10/30(木) 03:23:17いやXP以降だけどPrintWindow()でいいだろ。
2000なら対象ウィンドウを一旦レイヤードウィンドウにするとかいう強引な手もあるが。
0238デフォルトの名無しさん
2008/10/30(木) 09:09:41デタラメ言うな
0239デフォルトの名無しさん
2008/10/30(木) 09:48:05自分が間違ってたことを認めないためには質問者に嘘教えるのも厭わないのか。
0240デフォルトの名無しさん
2008/10/30(木) 09:48:410241デフォルトの名無しさん
2008/10/30(木) 09:48:53DCに書けばいいのか?
0242デフォルトの名無しさん
2008/10/30(木) 09:55:20まずはサンプルコードをコピーしてくるところから
始めた方がいいよ。
0243デフォルトの名無しさん
2008/10/30(木) 10:58:48意味わかんねぇ
MSの中の人、頭おかしいんじゃないの
0244デフォルトの名無しさん
2008/10/30(木) 11:05:1764ビットでも kernel32.dll だし、システムフォルダは c:\windows\system32 だよ。
逆に、64ビット環境での 32 ビット用が WOW64。
最初は戸惑うよね。
0245デフォルトの名無しさん
2008/10/30(木) 11:15:480246デフォルトの名無しさん
2008/10/30(木) 12:41:48こういうのってやっぱシステムフォルダ = "c:\windows\system32"って
ハードコードしてる糞アプリの為の互換性なんだろうな
シェアが高すぎるOSってのも大変だなぁ・・・
0247デフォルトの名無しさん
2008/10/30(木) 13:13:11ぶっちゃけメッセージループのためのメッセージキューに送られるのがPostで
直接WindowProcに送られるのがSendってことでOKですか?
0248デフォルトの名無しさん
2008/10/30(木) 13:52:230249デフォルトの名無しさん
2008/10/30(木) 13:54:01WindowProcの戻り値がわかるのがSendで、わからないのがPost
もちろん、SendはWindowProcが終わるまでリターンしない。
0250デフォルトの名無しさん
2008/10/30(木) 14:14:56すげえ、できた!
まじありがとう
>>235
>Vistaならできるかも。
kwsk
0251デフォルトの名無しさん
2008/10/30(木) 14:37:28え?できたの?理解できない。
もしかしてOSはVista?
Vistaはアプリケーションごとにサーフェイスを持ってるから、描画したのが残ってるんじゃないかと。
WM_PAINTですら描画しないと消えるのに
WM_PRINTなんかでなんの処理もしてないのに描画されるはずがないと思う。
もちろんWM_PAINTをWindowsまかせにしてるアプリならWM_PRINTにも対応してるだろうけど。
0252デフォルトの名無しさん
2008/10/30(木) 14:42:55WM_PRINTをWindows任せにしてるとWM_PAINTと同じ内容になる。
■ このスレッドは過去ログ倉庫に格納されています