Win32API質問箱 Build63
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/03/04(火) 12:15:58やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>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
【前スレ】
http://pc11.2ch.net/test/read.cgi/tech/1202060403/
0091デフォルトの名無しさん
2008/03/07(金) 12:31:50その名前のファイル置いてやってみたけど特に問題ないな。
XP SP2 で NTFS のパーティション。
デジカメでフォーマットしたSDとか、そういう変なボリュームを相手にしてない?
(だからってバッファオーバーランは困るけど)
0092デフォルトの名無しさん
2008/03/07(金) 12:47:170093デフォルトの名無しさん
2008/03/07(金) 13:15:090094デフォルトの名無しさん
2008/03/07(金) 14:16:300095デフォルトの名無しさん
2008/03/07(金) 17:11:470096デフォルトの名無しさん
2008/03/07(金) 17:21:56やめときなされ
事実を語っても推奨される環境云々って自説に固執するオバカが騒ぎ出すだけだから
無知は無知のまま放って置けばよいのだ
0097デフォルトの名無しさん
2008/03/07(金) 18:08:020098デフォルトの名無しさん
2008/03/07(金) 18:12:020099デフォルトの名無しさん
2008/03/07(金) 21:48:01IPropertyUI
0100デフォルトの名無しさん
2008/03/08(土) 00:48:20A, B がフロッピー用に空けられていて、
HDD が C からなのが通例。
あくまで通例であってそうしないといけないわけじゃないが。
0101デフォルトの名無しさん
2008/03/08(土) 00:51:26|
|
|
/V\ ,J>>100
/◎;;;,;,,,,ヽ
_ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0102デフォルトの名無しさん
2008/03/08(土) 00:53:250103デフォルトの名無しさん
2008/03/08(土) 00:57:35ネタなのかPC-98を知らないゆとり世代なのか
0104デフォルトの名無しさん
2008/03/08(土) 01:06:31あの時代は HDD はそんな一般的じゃなくて、
フロッピー2枚差しが普通だっただろ?
その時代、ドライブレターは頭から A, B と振ってた。
そこに HDD がやってきて、それがフロッピーの次の C から振られるようになって、
その後フロッピーが1つしかなかったりそもそも無くなったりすることが増えたけど、
結局 HDD のドライブレターは C から振られるので定着してしまっていた、
という流れだと思っていたのだが。
0105デフォルトの名無しさん
2008/03/08(土) 01:12:14テープメディア等を繋ぐとC以降が割り当てられた。
拡張FDDをつければCがFDDにもなる。
その後、テープメディア等からHDDに変わったけど
ABドライブは相変わらずフロッピー用に予約されてる。
そんな事知らないNECが作ったPC-98は起動ドライブが無条件でAになる。
こっちの方が分かり易いとでも思ったんだろうな。
だから、HDDから起動すればHDDがAドライブになる。
Cドライブに固定するのは確か出来なかった気がするけどもう忘れた。
0106デフォルトの名無しさん
2008/03/08(土) 01:18:05もう記憶があやふやだな・・・。
0107デフォルトの名無しさん
2008/03/08(土) 01:31:44PC98のおかげでPCが普及したのか
どちらにせよPC98独自ルールになれてた漏れは
Win95からAT互換機移るときに苦労した思い出がある
DOSゲーやりたいがためにWindows95が出た後もPC98買ってた馬鹿がここに一人いますよ
0108デフォルトの名無しさん
2008/03/08(土) 01:38:430109デフォルトの名無しさん
2008/03/08(土) 01:40:100110デフォルトの名無しさん
2008/03/08(土) 01:43:06当時はまだ PC98 買う人はいた気はする。
0111デフォルトの名無しさん
2008/03/08(土) 01:50:080112デフォルトの名無しさん
2008/03/08(土) 01:58:51ゆとり世代馬鹿にすんな。
0113デフォルトの名無しさん
2008/03/08(土) 02:02:130114デフォルトの名無しさん
2008/03/08(土) 02:02:39実機は見たことないが
ゆとり世代馬鹿にすんな。
0115デフォルトの名無しさん
2008/03/08(土) 02:23:50ビデオトースターとか
0116デフォルトの名無しさん
2008/03/08(土) 02:50:29馬鹿はいつの時代にもいる
馬鹿は量産される
0117デフォルトの名無しさん
2008/03/08(土) 03:10:580118デフォルトの名無しさん
2008/03/08(土) 03:13:160119デフォルトの名無しさん
2008/03/08(土) 03:14:490120デフォルトの名無しさん
2008/03/08(土) 03:34:440121デフォルトの名無しさん
2008/03/08(土) 03:43:58A:/B:どちらでもアクセスできるようになっていた
PC-98の場合は・・・
0122デフォルトの名無しさん
2008/03/08(土) 03:46:05いっぱいマウントしてD〜Z使い果たしているPCで
さらにマウントするとBにマウントされたのに感動
0123デフォルトの名無しさん
2008/03/08(土) 04:56:500124デフォルトの名無しさん
2008/03/08(土) 09:39:06PC-98でも、Windows 2000を新規インストールすると、
起動するHDDパーティションがC:になるって聞いたことがある。
0125デフォルトの名無しさん
2008/03/08(土) 10:19:31そしてそれを咎める奴を無視したり叩いたりしたら再起不能。
0126デフォルトの名無しさん
2008/03/08(土) 10:57:04初期のPC-98と最近の(今でもあんのか知らんが)PC98は違うよ
0127デフォルトの名無しさん
2008/03/08(土) 11:58:20フルスクリーン時にマウスカーソルをウィンドウ上部に持ってくると、
上からタイトルバーがにょきっとスライドして出てくるものがありますが、
にょきっと出現させるAPIがあるのでしょうか?
それとも自前のプログラムですか。
0128デフォルトの名無しさん
2008/03/08(土) 12:04:45SetMenuNyoki
0129デフォルトの名無しさん
2008/03/08(土) 12:11:250130デフォルトの名無しさん
2008/03/08(土) 12:15:200131デフォルトの名無しさん
2008/03/08(土) 12:23:55パラメータkwsk
0132デフォルトの名無しさん
2008/03/08(土) 12:29:210133デフォルトの名無しさん
2008/03/08(土) 12:39:49ParentWnd 親ウインドウハンドル
hMenuWnd メニューのハンドル
bOpenHide TRUE:メニュー表示、FALSE:メニュー隠す
pVoid 拡張のための予約。NULLに設定。
0134デフォルトの名無しさん
2008/03/08(土) 12:43:170135デフォルトの名無しさん
2008/03/08(土) 12:47:17動いてる間UIスレッド止まったりしないし
VistaのスクロールバーからMouseLeaveで徐々に色が消えるやつとか
0136127
2008/03/08(土) 12:47:26ちょっと本気でググってしまいました。
>>132
DirectXでできるんでしょうか?
素人考えですが、
タイトルバーが上からスライドしてくるということは、
その分、押し出される感じでクライアント領域が下にずれるから、
画面の描画内容が動かないようにするためには、
描画位置をその分上にスライドしないといといけないのかなと、
思うんですが、どうなんでしょうか。
0137マジレスでごめん
2008/03/08(土) 12:53:350138デフォルトの名無しさん
2008/03/08(土) 12:55:35>>127じゃないけどためになった
ただゲーム以外でどこで使うのか思いつかない
0139デフォルトの名無しさん
2008/03/08(土) 12:59:21ここで聞くな
0141デフォルトの名無しさん
2008/03/08(土) 13:37:33表示されるようなアプリケーションで使われる。
0142デフォルトの名無しさん
2008/03/08(土) 13:52:590143デフォルトの名無しさん
2008/03/08(土) 13:59:42IT業界みんなの憧れだわ
0144127
2008/03/08(土) 14:25:04多数のゲームは単純にタイトルバーを表示していただけかもしれません。
タイトルバーだけのウィンドウと、
クライアント領域だけのウィンドウを作って、
AnimateWindow(hTitleWnd, 600, AW_SLIDE | AW_VER_POSITIVE);で、
タイトルバーウィンドウだけ、にょきっと出してみようと思います。
>>143
初心者が2chで質問して、2時間であたりがつく技術。
半端ないですね。
0145デフォルトの名無しさん
2008/03/08(土) 15:08:550146デフォルトの名無しさん
2008/03/08(土) 15:16:010147デフォルトの名無しさん
2008/03/08(土) 16:34:250148デフォルトの名無しさん
2008/03/08(土) 17:21:17AnimateWindow(hMenuWnd, 200, (bOpenHide) ? AW_SLIDE : AW_HIDE)
0149デフォルトの名無しさん
2008/03/08(土) 17:45:030150デフォルトの名無しさん
2008/03/08(土) 19:50:21{
switch(wReason)
{
case DLL_PROCESS_ATTACH:
VERBOSE(DLLTEXT("Process attach.\r\n"));
break;
case DLL_THREAD_ATTACH:
VERBOSE(DLLTEXT("Thread attach.\r\n"));
break;
case DLL_PROCESS_DETACH:
VERBOSE(DLLTEXT("Process detach.\r\n"));
break;
case DLL_THREAD_DETACH:
VERBOSE(DLLTEXT("Thread detach.\r\n"));
break;
}
ユニドライバの最初にこうあるのですが、それぞれのメッセージは
どのようなときにおくられてくるのですか?またVERBOSEとはなんでしょうか?
0151デフォルトの名無しさん
2008/03/08(土) 19:53:540152デフォルトの名無しさん
2008/03/08(土) 20:01:090153デフォルトの名無しさん
2008/03/08(土) 21:21:060154デフォルトの名無しさん
2008/03/08(土) 21:36:13Process attach.のときにおくられてくる
Thread attach.のときにおくられてくる
以下略
0155デフォルトの名無しさん
2008/03/08(土) 21:45:20お前ってさ自己中で友達とかいないだろw
0156デフォルトの名無しさん
2008/03/08(土) 23:36:13描画するわけでもないのに、画像読込、解放してるのが凄く無駄な気がします。
サイズ取得用のAPIなど、もっといい方法ってないでしょうか?
BITMAP bmp;
HBITMAP hbmp = (HBITMAP)LoadImage(hInst, <画像のパス>, IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);
GetObject(hbmp, sizeof(BITMAP), &bmp);
width = bmp.bmWidth; //画像幅取得
height = bmp.bmHeight; //画像高さ取得
DeleteObject(hbmp);
0157デフォルトの名無しさん
2008/03/08(土) 23:47:010158デフォルトの名無しさん
2008/03/08(土) 23:47:43最初の14バイトがBITMAPFILEHEADER
以降がBITMAPINFOHEADER
0159デフォルトの名無しさん
2008/03/08(土) 23:48:2424じゃなくて54バイトw
0160デフォルトの名無しさん
2008/03/08(土) 23:49:32ここ見て必要なデータを直読みするといいよ
0161デフォルトの名無しさん
2008/03/09(日) 00:00:06ヘッダから読み込むことにします。
0162デフォルトの名無しさん
2008/03/09(日) 00:41:35指定のフォント、フォントサイズで文字列の画面上でのサイズを計算したいのですが、
どんなAPIを使えばできますか?
0163デフォルトの名無しさん
2008/03/09(日) 00:47:040164デフォルトの名無しさん
2008/03/09(日) 00:48:46即レスありがとうございます!
助かりました
0165デフォルトの名無しさん
2008/03/09(日) 01:47:550166デフォルトの名無しさん
2008/03/09(日) 01:48:570167デフォルトの名無しさん
2008/03/09(日) 10:39:25プログラム内部からSetWindowLongを試みたところ
GetLastErrorで5番のアクセス拒否が返ってきたのですが
これはやっちゃいけないことなんでしょうか
0168デフォルトの名無しさん
2008/03/09(日) 10:45:290169デフォルトの名無しさん
2008/03/09(日) 10:48:39例えば、
::SendMessage(hParent, WM_PARENTNOTIFY, MAKEWPARAM(WM_NCDESTROY, id), (LPARAM)hWindow);
の様な感じで
0170デフォルトの名無しさん
2008/03/09(日) 10:51:53ありがとうございました
0171デフォルトの名無しさん
2008/03/09(日) 10:53:42なんでもおkという訳ではないけど、そういう使い方をするものは存在する
WM_HITTESTとか
0172デフォルトの名無しさん
2008/03/09(日) 10:57:070173デフォルトの名無しさん
2008/03/09(日) 11:17:11ウインドウの終了を親ウインドウで捕まえたいのですが、POPUPスタイルだったり、MDIの子ウインドウだったりした場合
WM_PARENTNOTIFYを捕まえることが出来ないので自分で明示的に送ろうかと思ったのですが問題がでたらいやだなぁと思い
質問させていただきました
>>172
たしかに、WM_APPを使うのが楽でいいのですが...
オリジナルのWindows用クラスライブラリで使うので、WM_APPの使用は極力避けたいのです
0174デフォルトの名無しさん
2008/03/09(日) 12:13:340175デフォルトの名無しさん
2008/03/09(日) 15:38:16abort、exit、_exit、または ExitProcess を呼び出したスレッドがあると、
すべてのスレッドが終了します。
と書かれていたのですが、明示的に終了関数を呼ばない場合
スレッドは生きたままになるのでしょうか?
0176デフォルトの名無しさん
2008/03/09(日) 15:58:320177デフォルトの名無しさん
2008/03/09(日) 16:09:46普通に組むと、
エントリポイント - CRTのスタートアップ関数 - main/WinMain
という構造になる。
VC2005のCRTだと、main/WinMainから帰ってきた後で_exitが呼ばれているので、
その結果他のスレッドも終了させられる。
微妙にスレ違いなネタの気がしなくもないな。
0179デフォルトの名無しさん
2008/03/10(月) 00:21:01クライアント領域がないタイトルバーだけのウィンドウって、
どうやって作ればいいんでしょうか。
0180デフォルトの名無しさん
2008/03/10(月) 00:31:23> "サイズ復元ボタン" に一致する日本語のページ 1 件中 1 - 1 件目
0181デフォルトの名無しさん
2008/03/10(月) 00:32:330182デフォルトの名無しさん
2008/03/10(月) 00:37:07「元のサイズに戻す」ボタンでした。
0183デフォルトの名無しさん
2008/03/10(月) 00:52:39ウインドウサイズを指定できるけど
クライアントサイズから
ウインドウサイズを算出することはできない?
0184デフォルトの名無しさん
2008/03/10(月) 00:54:500185デフォルトの名無しさん
2008/03/10(月) 00:57:020186179
2008/03/10(月) 01:00:10最大化も最小化もしていないので
「元のサイズに戻す」ボタンが表示されなくて、
でも、最大化してしまうとクライアント領域ができてしまいます。
>>183
なんか丁度10分前くらいに作ったので。どうぞ。
void getWindowSize(WORD clientW, WORD clientH, WORD* pWindowW, WORD* pWindowH, DWORD style) {
RECT rect = {0,0,clientW, clientH};
AdjustWindowRect(&rect, style, FALSE);
*pWindowW = (WORD) (rect.right - rect.left);
*pWindowH= (WORD) (rect.bottom - rect.top);
}
0187デフォルトの名無しさん
2008/03/10(月) 01:04:01実際に表示してから目的の状態になるまでリサイズを繰り返すしかない。
0188デフォルトの名無しさん
2008/03/10(月) 01:10:23これだって完璧にやってくれるわけではないけど。
0189デフォルトの名無しさん
2008/03/10(月) 01:26:03なぜWORDなのか理由を聞きたい
0190デフォルトの名無しさん
2008/03/10(月) 01:27:550191デフォルトの名無しさん
2008/03/10(月) 01:40:22深い理由はないけど、
サイズ4294967296みたいなウィンドウを作る予定はなかったので。
■ このスレッドは過去ログ倉庫に格納されています