- 1 名前:デフォルトの名無しさん [2009/08/02(日) 00:20:49 ]
- スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。 「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ! 過去スレ、関連リンクは>>2-10くらい。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで - Win32API質問箱 wiki wiki.livedoor.jp/program1/d/FrontPage Win32API質問箱 Build80 pc12.2ch.net/test/read.cgi/tech/1244057140/l50
- 41 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:51:55 ]
- ウィンドウの幅と高さにrect.rightとrect.bottomをそのまま渡しちゃってるとか、
ツールバーのサイズを考慮に入れてないとか・・・。
- 42 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:52:37 ]
- >>40
WS_SYSMENU | WS_CAPTIONの二つで 640x476になります OSはXPでシェルはLiteStepに変えています
- 43 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 22:54:37 ]
- >>41
サイズを指定する時はきちんと right - left bottom - top としています ツールバー等は無しで、只単純なウィンドウです 連投すみません
- 44 名前:22 [2009/08/03(月) 22:56:22 ]
- >>28のやり方でうまく出来ました。ありがとうございます
- 45 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:09:48 ]
- >>42
LiteStepが原因だろ、どうみても。 非公式ツールで変更しまくっている環境は流石にスレ違いだ。 LiteStepのスレで訊けよ。
- 46 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:13:44 ]
- そうかなあ。自分は42のやり方が悪いのだとまだ思っている。
- 47 名前:デフォルトの名無しさん mailto:sage [2009/08/03(月) 23:31:23 ]
- LiteStepってちゃんとSystemMetricを利用して動いてるんだろうか
利用してるならAdjustWindowsRectも動作するはずだが
- 48 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 07:16:16 ]
- >>46
CreateWindowした後に SetRect( &rect, 0, 0, 640, 480 ); AdjustWindowRect( &rect, GetWindowLong( hWnd, GWL_STYLE ), FALSE ); SetWindowPos( hWnd, NULL, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE ); としています ずっとLiteStepを使ってきて、他の環境でもあまり問題無かったので意識してませんでしたが もし、上記やり方に問題が無ければ、LiteStepに原因があるかもしれないですね
- 49 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 08:32:30 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 50 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:08:02 ]
- 互換性でトンデモ仕様になっていく
- 51 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:46:46 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 52 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 09:53:32 ]
- どこが便乗なんだか
- 53 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 10:21:03 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 54 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:30:08 ]
- 互換性でトンデモ仕様になっていく
- 55 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 12:32:37 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 56 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:13:41 ]
- 何だこの流れ
- 57 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 14:20:36 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 58 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:27:42 ]
- 互換性でトンデモ仕様になっていく
- 59 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:00 ]
- だって互換性取れってうるさいんだもん
- 60 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:32:47 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 61 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:34:46 ]
- 便乗質問なんだが
Aero有効にしてるとタブとかツールバーとかトンデモ仕様になっていくのが不便だなあ なんか互換性の為らしいが・・・
- 62 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:36:40 ]
- >>61
えーと、どのへんが質問?
- 63 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 15:41:04 ]
- 知らないならレスしないで下さい。ウザイだけです。
- 64 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:12:30 ]
- だって互換性取れってうるさいんだもん
- 65 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:23 ]
- dgtu
- 66 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:14:35 ]
- 互換性でトンデモ仕様になっていく
- 67 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:15:05 ]
- いつまで続けるのこれ
- 68 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 16:49:16 ]
- 15498回
- 69 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 18:50:38 ]
- 夏休みが終わるまで続けるよ!
- 70 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:04:23 ]
- つーかAero有効にしてるとGetWindowRect等で正確なサイズを返さない事があるのが不便だなあ
なんか互換性の為らしいが・・・
- 71 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:22 ]
- Aeroを無効にすればよい
- 72 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:05:23 ]
- dgtu
- 73 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:06:40 ]
- >>67
涼宮さんが満足する何かがわかるまでです。
- 74 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:07:32 ]
- ネバーエンディング
ム板的にはwhile(true)
- 75 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:10:34 ]
- break;
- 76 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:11:40 ]
- 便乗質問なんだが
100*100がメイン画面の大きさの場合、タブとかツールバーとかを付けると 若干画面大きくなるよね? その場合、タブとかツールバーの大きさも100*100に含めてAdjustに渡さないと駄目?
- 77 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:13:16 ]
- >>74
警告:条件式が定数です
- 78 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:14:51 ]
- volatile boolean flag;
- 79 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:40 ]
- 何の言語だよ
- 80 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:16:43 ]
- APIと関係ない話すんな
- 81 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:20:36 ]
- A Pocotan Inshitao
- 82 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:21:03 ]
- Aero有効にしていてGetWindowRect等で正確なサイズを得る方法を教えろ
- 83 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:26:17 ]
- ThemeAPIで頑張って計測、とかいう話じゃなかったっけ?
>>76 タブとかツールバーはクライアント領域の載せているものだから、 その上で空き領域を一定サイズ確保したいというなら当然必要。
- 84 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 19:59:08 ]
- >>ThemeAPIで頑張って計測
ハズレ
- 85 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:04:29 ]
- うそつくなよw
- 86 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 20:15:48 ]
- 知らないならレスしないで下さい。ウザイだけです。
- 87 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:45:04 ]
- msdn.microsoft.com/ja-jp/library/ms633519(en-us,VS.85,loband).aspx
- 88 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:50:14 ]
- VistaとXPではステータスバーの大きさが異なるんだけど
ステータスバーの大きさって変えられない? 自分でステータスバーもどきのウィンドウ作った方が速いかな?
- 89 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:55:00 ]
- デバッグビルドでLoadLibraryA("MSVCP90.dll")実行するとNULLが返ってくるんだけど、MSってバカなの?何なの?
- 90 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 21:58:05 ]
- >>88
SB_SETMINHEIGHTとか
- 91 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 22:40:01 ]
- >>89
side-by-sideアセンブリ
- 92 名前:デフォルトの名無しさん mailto:sage [2009/08/04(火) 23:21:42 ]
- CランタイムをLoadLibraryする方がバカ
- 93 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 04:12:25 ]
- ネットで公開されているAPIってサイドパーティ含めてどのくらいか?
把握している人はエロい
- 94 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 06:51:42 ]
- は?
- 95 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 08:14:32 ]
- www.google.com/search?q=api
Google先生は把握してますが何か?
- 96 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 15:58:10 ]
- 質問です。
ウインドウメッセージを解決するProcの中で、SendMessageをすると、即座に処理される理由がいまいちわかりません。 MessageBoxでも似たような疑問を持った際は「勝手にメッセージ解決ループを作って裏でまわしてくれるんだよ」 といった説明を受けて納得したのですが、今回の件も同様なのでしょうか?
- 97 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:02:50 ]
- >1 つまたは複数のウィンドウへ、指定されたメッセージを送信します。
>この関数は、指定されたウィンドウのウィンドウプロシージャを呼び出し、 >そのウィンドウプロシージャがメッセージを処理し終わった後で、制御を返します。
- 98 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:03:19 ]
- SendMessageが発行したメッセージはちゃんとOSのメッセージキューに入れられて、
該当するウインドウのメッセージループに通知され、 その後メッセージハンドラがコールバックされて 対応するコード上で処理されてるから、即座じゃなくない? MessageBoxの方も同様で、メッセージボックスがクリエイトされた後、 OS経由でメッセージがMessageBoxのメッセージハンドラに通知されてるよ。 Spy++みるとメッセージの応酬が見られるし。
- 99 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:16:14 ]
- 96です。
>>97-98 お返事ありがとうございます。 MSDNの説明を妙に勘違いしていたようです。 ::SendMessageはウィンドウプロシージャを直接呼び出すのですね。 実は困っていたのは case WM_CLOSE: の中で別のワーカースレッドに停止命令を出し、ワーカースレッドの停止を確認するまでSleepする。 という処理でした。 このとき、ワーカースレッド側でSendMessageされると、フリーズしてしまいます。 これは、メインスレッドがプロシージャで処理中(Sleep中)なのに、他スレッドがプロシージャを呼ぼうとしたので、排他制御された。 ということで合っているでしょうか?
- 100 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:36:52 ]
- >>99
そんな感じ。 ttp://msdn.microsoft.com/en-us/library/ms644927.aspx のMessage Deadlocksに詳しく書いてある。
- 101 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:48:44 ]
- >>100
ありがとうございます。 ・・・そのページ、日本語版のMSDNでは省かれてますね・・・
- 102 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:50:16 ]
- メッセージプロシージャを待ちたくないのなら、PostMessageを使ってみては
- 103 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:51:04 ]
- メッセージプロシージャってなんだ・・・ウィンドウプロシージャでした
- 104 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 16:58:57 ]
- >>102
色々アドバイスありがとうございます。 タイトルバーの書き換えが目的のため、ポインタ渡しが必要となり、PostMessageでは行えませんでした。 (SetWindowTextは、内部でSendMesssageを呼んでるっぽいですね) ついでに、報告。 >>100の文書のおかげで SendMessageTimeout なる関数を知りました。 タイムアウト値を10msくらいにしておけば、デッドロックが起こらずに済みますね。 こんな関数知りませんでしたわ
- 105 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 18:17:49 ]
- >>91
winsxsはside by sideで使われてたのか、MSめ・・・
- 106 名前:デフォルトの名無しさん mailto:sage [2009/08/05(水) 20:27:52 ]
- >>104
UIの更新はUIスレッドにやらせるのが基本。 文字列は別の場所に置いておいて、 PostMessageでタイトルバーの更新を指示、といった感じで。
- 107 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:28:29 ]
- >>106
いちいちクリティカルセクション使って、文字列渡し合うのか?
- 108 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 09:42:38 ]
- ロストを許すことなく、きっちり伝えようとするべくクリティカルセクションの出し入れすると
結局 SendMessage のブロッキングと同じでデッドロックにならない?
- 109 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:28:21 ]
- C言語にfopenという関数があるのに
windows APIにもCreateFileという関数があって どちらを使えばいいのかわかりません。 CreateFileのほうが細かく設定できるという認識だけで よろしいのでしょうか?
- 110 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:40:39 ]
- ファイルハンドル取得のためには必須なんじゃないの?
勉強中の身だからなんとも言えんけど、 プロに任せれば正しい回答が来るはず
- 111 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 11:48:33 ]
- fopenはC言語の関数。
C言語が仕様を決め、Windowsが従ってる。 そのため(C言語の仕様が古いため)2GBまでのファイルしか扱えない。 CreateFileはWindowsが提供している関数。 Windows以外で使えないけど、代わりに2GBを超えるファイルも扱えるし、Windows特有のファイル属性なども操作できる。
- 112 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 12:33:14 ]
- つまりWindows環境ならfopenよりもCreateFileのほうがいいってことか
- 113 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 13:07:04 ]
- まぁそう考えてもOK
ただし、色々できる=複雑ってことだからそのあたりは臨機応変で。
- 114 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 14:15:59 ]
- 毎回引数7個も書いてるとうざいぜ
fopenで間に合うときはそっちのがシンプルでいいよ
- 115 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 17:36:58 ]
- >>111
以下コードで 4 GB のファイルが生成できる件について #include <stdio.h> #define MEGA_BUF_SIZE (1024 * 1024) #define OUT_FILE "test.dat" int main(void) { static char buf[MEGA_BUF_SIZE] = { 0 }; int i; FILE *oFP = fopen(OUT_FILE, "wb"); if(oFP == NULL) { perror(OUT_FILE); return -1; } for(i = 0; i < 1024 * 4; i++) fwrite(buf, 1, sizeof(buf), oFP); fclose(oFP); return 0; }
- 116 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 18:15:32 ]
- つーかfopenも最終的にはCreateFileを呼んでるんだから当然だろ
>>111こいつバカじゃねーの?
- 117 名前:デフォルトの名無しさん [2009/08/06(木) 19:23:44 ]
- fopen で開いたファイル(FILE*)にランダムアクセスする際にfseekでは
32bit幅しか考慮されていないので、2Gの範囲しかアクセスできないと言う 点について、>>111がちょびっとだけカスってる。 #まあ、そもそも fopen の仕様を決めているのはC言語ではないけどね…。 fopen が CreateFile呼んでるから当然使えるってのは、標準関数の仕様と 比べてどうかと言う方向からみるべきなので、短絡的な意見だとは思うが。
- 118 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:16:53 ]
- SEEK_CURを使って2GBずつ進んでいくってのは無理?
- 119 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:21:26 ]
- 規格上はその辺り何も規定されてないので処理系に依存する。
- 120 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:39:15 ]
- >>118
VC2008だと、0x7FFFFFFFより後への移動はエラーになって返ってくる。 関数内で、SetFilePointerを上位32ビットを指定せずに呼んでいる為に、 オフセット位置の範囲に制限がかけられている所為だな。
- 121 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 20:46:08 ]
- 使えねー
- 122 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:25:26 ]
- つーか、CreateFileをラップしたクラスを作っとけばいいだろ・・・
そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い
- 123 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:49:47 ]
- そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い(キリッ
- 124 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:54:12 ]
- そもそもクロスプラットフォーム開発してる訳でもなけりゃわざわざfopenなんて使う理由が無い(ヌルポ
- 125 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 21:57:04 ]
- >>124
がっ
- 126 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:10:06 ]
- fopen (笑)
- 127 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:12:36 ]
- C言語 (笑)
- 128 名前:デフォルトの名無しさん [2009/08/06(木) 22:16:42 ]
- 今時マルチスレッドや巨大ファイルの扱いが規格外なプログラミング言語なんてゴミ
- 129 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 22:16:44 ]
- ヌルポ (笑)
- 130 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:04:30 ]
- 今時ポインタがあるプログラミング言語なんてゴミ
- 131 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:11:25 ]
- と思ってるお前がゴミ
- 132 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:22:58 ]
- ふぉぺん
- 133 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:26:21 ]
- その辺にしとけ
- 134 名前:デフォルトの名無しさん mailto:sage [2009/08/06(木) 23:39:51 ]
- 何を?
- 135 名前:デフォルトの名無しさん [2009/08/07(金) 00:43:08 ]
- ネットワークディレクトリをsamba(smb)共有させる場合、
IEのURL打ち込み欄で \\hostname.com で、、このあとアカウントとパスワードを入力するダイアログが表示され 進めるとネットワークディレクトリがマウントできますが、 (Vistaの場合、レジストリを変更してセキュリティポリシーの書き換え必要) この一連の流れをC++/MFCの環境で記述してマウントさせたいのです。 具体的にどういうAPIを使えばよいか、どういうサイトを参照すればよいか など教えていただけますでしょうか。 よろしくお願いします。
- 136 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 00:53:01 ]
- >>135
msdn.microsoft.com/ja-jp/library/default.aspx
- 137 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 03:59:35 ]
- マウントといったら、WNetAddConnection2しか思いつかん
- 138 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 06:05:30 ]
- それでいい。WebDAV のフォルダもマウントできるし。
- 139 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 11:42:31 ]
- >>99
なんか微妙に誤解があるような気が…… ウィンドウプロシージャをメッセージ経由で実行する場合は、 必ずウィンドウを作成したスレッドで実行されるのがwindowsの仕様です。 その場合は、このスレッドがSleepさせられているため、SendMessageで デッドロックするわけです。
- 140 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 12:17:19 ]
- スレッド間でSendし合うからだろ
- 141 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 14:29:26 ]
- sendし合うのは問題ない。
別スレッドにSendMessageして、send先から返ってくるのを待ってる間は 別スレッドからのSendMessageを受け付ける事ができる。
|

|