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


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

Win32API質問箱 Build59



1 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 22:39:56 ]
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。

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

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


449 名前:440 mailto:sage [2007/11/25(日) 18:17:38 ]
>>445
同時キーや引数をいっぱい変えて GetAsyncKeyState を実行しまくるのが非効率でしたので
GetKeyboradState が理想でしたが、いろいろ無理そうですので素直に諦めます。

>>447
_getch よりも Get〜による同時押しも欲しかったのですが
いろいろ問題ありそうですんで諦めます 。
アドバイスありがとうございました。

450 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 19:16:31 ]
>>425
それってツリービューじゃ駄目なの?

451 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:20:21 ]
>>448
デフォルトでそういう動作っていう意味だろう

452 名前:425 mailto:sage [2007/11/25(日) 20:55:11 ]
>>450
表示の切り替え(アイコンとか詳細とか)が必要なんです。
何とかならんかなぁ

453 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 20:57:57 ]
>>452
予め自分でデータを持っておいて、ListViewがクリックされた時にその位置に挿入/削除して
擬似的にツリービュー的な動作を再現すればいいと思うが。

ネットで見かけるTreeListViewのサンプルとかがそういう事をしている。

454 名前:425 mailto:sage [2007/11/25(日) 21:10:19 ]
う〜ん、そうするしかないようですね。

455 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 22:05:50 ]
或いは詳細表示の時だけTreeViewに切り替えるとか。

456 名前:デフォルトの名無しさん [2007/11/26(月) 02:09:51 ]
比較的大きなドキュメントを読み込むときに、一気に読み込まず、一定のサイズごとに
シーケンシャルに読み込んでいくプログラム、例えばIE、でデータの読み込みにしたがって
右側のスクロールバーのスクロールボックスの大きさが小さくなっていく
ああいう動作はどうやって実現してるんだ?
スクロールバーの操作や、つまみ(スクロールボックス)のサイズの調整はできるんだが
読み込み中はスクロールバー自体が消えたようになってしまう。

ファイル読み込み(例えば256Byteずつ)のループ
{
ファイルの読み込み処理
行数を調べて
SetScrollInfo関数で、新しい範囲の設定
}

これでスクロールバーは更新されるはずなんだが・・ダメだ
ファイル全体の読み込み処理の終了の後、ウィンドウ全体を再描画させるとスクロールバーも出現する。

ちなみにクライアント領域の右側につく(WS_VSCROLL)、標準スクロールバーの話です。
SDK

457 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:16:02 ]
>これでスクロールバーは更新されるはずなんだが

されねえよw
それだとループしてる間はWM_PAINTが発生しないから再描画されるわけないだろ

手っ取り早いのは副スレッドで読み込みとスクロールバーの設定をしてInvalidateRectする
そうすればメインスレッドは滞りなく再描画する



458 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:32:52 ]
>>456
ウインドウメッセージを処理してやらなきゃ駄目だよ。
普通はマルチスレッド化、どうしてもスレッドが嫌ならループ内に
メッセージ処理を組み込む。

459 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:34:26 ]
RDW_FRAME
RDW_UPDATENOW
SWP_DRAWFRAME

辺りでぐぐれ

460 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:34:58 ]
それだけならDispatchMessageはさむだけで良さそうだけど
副作用出てくるような操作するときはマルチスレッドにするべき


461 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:36:09 ]
こんな時間に何してんだお舞ら

462 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:41:05 ]
質問に回答してるだけだが、何か?

463 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 02:45:46 ]
>>446
まだ見てるか分からんけど
msdn.microsoft.com/msdnmag/issues/07/08/WindowsCPP/default.aspx?loc=jp

>LVGS_COLLAPSIBLE 状態フラグを使用すると、グループを折りたたんだり展開したりできるようになります。
>グループを折りたたむと、グループに属するリストビュー項目が非表示になります。
>プログラムで LVGS_COLLAPSED 状態フラグを使用すると、グループを折りたたむことができます。

464 名前:456です。 [2007/11/26(月) 05:27:46 ]
一応、副スレッドでの読み込みでも同じようにやってみたけど×だったorz

>>457
スマソ
書き忘れた
SetScrollInfo();
InvalidateRect();
UpdateWindow();

と、きちんとやってるんだが
もちろんファイルから読み込んだ内容は順次表示されていく
だけど、スクロールバーが消えてしまう
で、これがなぜかわからない

一応ループ部分のソース(つっても分かりにくいと思う。)
do{
ZeroMemory(lpTemp, CHUNK_SIZE);
bRet = ReadFile(hFile, lpTemp, CHUNK_SIZE, &dwRead, NULL);

lstrcat(lppms->lpString, lpTemp);

iLines = StrChrCount(lppms->lpString, TEXT('\n')) + 1;//行数の取得
SendMessage(lppms->hwnd, WM_MY_SETRANGE, 0, (LPARAM)iLines); //メインスレッド内にある、ウィンドウプロシージャに範囲の設定の指示
//LPARAMで範囲の最大値を渡してる
InvalidateRect(lppms->hwnd, NULL, TRUE);
UpdateWindow(lppms->hwnd);
Sleep(100);
}while(dwRead && !lppms->bKill);

465 名前:デフォルトの名無しさん [2007/11/26(月) 05:28:24 ]
で、主スレッド内でのメッセージの受け取り
case WM_MY_SETRANGE:
si.fMask = SIF_RANGE;
si.nMin = 0;;
si.nMax = (int)lParam;
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
return 0;

466 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 07:11:19 ]
スクロールバーに再描画送ってない

467 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 08:44:59 ]
スレッドがスリープなりして使用権を返却していない。



468 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 10:37:47 ]
>>466だと思う

469 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 11:18:55 ]
仮想リストビューにアイテムを追加するときは
LVN_GETDISPINFOメッセージを監視して自分で追加していくのは解るのですが
どうやってLVN_GETDISPINFOメッセージを発生させるのでしょうか?
通常のリストビューのようにListView_SetItemでいいのでしょうか?

470 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 11:26:36 ]
アイテム数をLVM_SETITEMCOUNTで設定すれば
画面の更新が必要になると勝手に飛んでくる

471 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 11:41:54 ]
ある自作メインアプリケーションに「ログイン」の機能を持たせ、
それを起動している最中は他の自作アプリケーションが
そのログインユーザの情報にアクセスできるようにしたいと思っています。
(メインアプリケーション終了時にログインユーザの情報も消す)

そうなると、メインアプリケーション内のログインユーザの情報を
アプリケーション間で共有できるようにしなければいけないとは思うのですが、
このようなグローバルな情報はどのように共有するものなのでしょうか。

感覚的には、「OS内で唯一のインスタンスがあって、みんなでextern参照」
といった使いかたをしたいのですが、
Mutexみたいなものを使って実現できるものなのでしょうか。
なにかよいサンプルなどがあれば、教えていただけると嬉しいです。
よろしくお願いいたします。

472 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 11:50:55 ]
ファイルマッピングオブジェクト(メモリマップトファイル)

データが短いならグローバルアトムで十分

473 名前:471 mailto:sage [2007/11/26(月) 12:37:48 ]
>>472
情報ありがとうございます。
両方調べさせていただきました。

メインアプリケーションのプロセスに聞きに行くのではなく、
各アプリケーションがそれぞれ任意のタイミングで
「メインアプリケーションがどこかにセットした現在のユーザ情報」を
自分で見に行くという動きを考えているので、
メモリマップトファイルよりはグローバルアトムのほうが
それに適した実装ができそうですかね。
こっちの方法を勉強してみようと思います。

474 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 12:48:39 ]
>[メインアプリケーションがどこかにセットした現在のユーザ情報」を
>自分で見に行くという動きを考えているので、
>メモリマップトファイルよりはグローバルアトムのほうが
>それに適した実装ができそうですかね。

たぶん逆
その用途ならメモリマップトファイルの方が楽

アトムだと中身にアクセスするには生成した識別子(=一定ではない)を
SendMessageか何かで他のプロセスに渡さなきゃいけない

メモリマップトファイルは名前(=一定の値)でカーネルオブジェクトを呼び出せるから
何かを渡したりとかは必要ない

475 名前:471 mailto:sage [2007/11/26(月) 12:56:12 ]
>>474
アトムの識別子って決めうち文字列じゃなかったんですね。
一時的なレジストリみたいなものだと勘違いしてました。
間違った方向に進むところでした。ありがとうございます。

476 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:00:46 ]
>>470
なるほど
数だけ教えてあげれば勝手にやってくれるんですね
解決できました、ありがとうございました

477 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:12:10 ]
>>475
ちなみにその「一時的なレジストリ」を使って実現してもいいんだよ



478 名前:425 mailto:sage [2007/11/26(月) 13:15:48 ]
>>463
情報サンクス。でもLVGS_COLLAPSIBLEの値がわからないです。
誰か分かる方います?

479 名前:425 mailto:sage [2007/11/26(月) 13:17:14 ]
てかvista以降って書いてない?

480 名前:471 mailto:sage [2007/11/26(月) 13:27:29 ]
>>477
レジストリだと、実行中にレジストリエディタで簡単に書いたり消したりできますよね。
もちろんアトムやメモリマップトファイルでも、
本格的にセキュリティ対策するならそのまま使うわけにはいかないでしょうけど、
OS付属のエディタで読み書きできてしまうことくらいは避けておきたいなと思いまして。

481 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:36:04 ]
>>479
じゃあVista以降なんだろう。残念だな。

482 名前:425 mailto:sage [2007/11/26(月) 13:40:42 ]
そうなんでしょうね、諦めます。
で、次の質問なんですが、ListViewでマウスホイールが回転されたことを取得したいんですけど、
サブクラス化するしかないですよね?

483 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 13:43:19 ]
他にも方法はあるけど、サブクラス化が一番楽でコストも低いような

484 名前:425 mailto:sage [2007/11/26(月) 13:54:04 ]
おk、サンクス

485 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 16:48:58 ]
software.nikkeibp.co.jp/software/backno/04apimook1.html
ここのPart3のFileCopyプログラムですが
表示されるべきのメニューが表示されません。。。

COPYやEXITなどのメニューを表示するようにするには
どうすればいいですか?

486 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:03:18 ]
リソースファイル (*.rc) をコンパイルしてリンクしたか?

487 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 17:38:18 ]
>>486
ご指摘のように
リソースファイルをプロジェクトに追加するのを
忘れていたのが原因だったようです。

表示するようになりました。ありがとうございます。



488 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 18:56:47 ]
文字列置換や文字列検索に使える関数ってSDKにない?

489 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 19:01:02 ]
検索や置換のダイアログの表示なら
FindTextやReplaceTextで可能です。

490 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 19:14:03 ]
>>489
ありがとうございます
FindTextとReplaceTextについて調べてみよ

491 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 20:10:01 ]
デバッガAがDebugActiveProcessでプロセスBにアタッチした後、
デバッガCがデバッガAのアタッチを強制的にデタッチして
プロセスBにアタッチしなおすことって、出来るんでしょうか?

その過程の間、プロセスBは停止したらダメ、という条件で。

ちょっと分かりにくいですが、要するにデバッガAをデバッガCに
差し替えてしまうことができるか、ということです。(AはCに
ついては何も知らないプログラムなので、連携した動作は
ありません)

デバッガAを強制的に終了するとプロセスBも終了してしまう
ようで、一見すると不可能っぽいのですが。OSは2000〜Vista
です。よろしくお願いします。

492 名前:491 [2007/11/26(月) 20:11:58 ]
すみません、上げさせてください。

あと、「プロセスBは停止したらダメ」というのは、ようするに
終了は不可と言うことで、ブレーク状態になるのは構いません。

493 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 20:17:20 ]
XP以降ならDebugActiveProcessStopってのがある。

494 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 20:34:23 ]
>>493 どうもありがとう

495 名前:491 mailto:sage [2007/11/26(月) 21:14:53 ]
教えてもらったので早速実験してみました。

WinMain(){
DebugActiveProcessStop(GetCurrentProcessId());
 :
 :
 :
}

ってやってデバッグ実行開始したら、デバッガ(VC8)が
外れると期待したのですが、外れずにそのまま下に
行っちゃいました。

もしかしてDebugActiveProcessStopはデバッグ対象じゃなくて
デバッガのプロセスIDを渡すのかしら? それとも自プロセスが
デバッガから強制離脱することはできない…?

あるいはDebugActiveProcessを呼んだあとに、そのプログラムが
デバッグ対象を切り離す用途で使うのかも。それだと>>491
外部からのデバッガの差し替えはできませんね。

憶測ばかりで申し訳ないですが、このAPI、ググっても細かい
ところがよく分かりませんでした。


496 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:04:52 ]
コレ見た感じだと DebugActiveProcess 呼んだデバッガが自分で
デタッチするときに使うような感じっぽくない?

msdn2.microsoft.com/En-US/library/ms679301.aspx

497 名前:デフォルトの名無しさん [2007/11/26(月) 22:30:55 ]
ある特定のトップレベル・ウィンドウを、最前面に持ってくるのってSetWindowPos関数?
ほかにも何かいい方法ありますか?



498 名前:491 mailto:sage [2007/11/26(月) 22:30:58 ]
>>496
情報ありがとう

499 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 22:57:02 ]
>>497
BringWindowToTopはどう?

500 名前:497 [2007/11/26(月) 23:48:53 ]
>>499 トン
これもいいな
コードがすっきりした

表に持ってきたウィンドウの再描画が完了したのを検地したのを知る方法ってある?
タイマーで1秒くらい待ってから、ってやってるけどエレガントじゃない

501 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:09:25 ]
FindWindow

502 名前:デフォルトの名無しさん [2007/11/27(火) 04:34:26 ]
プログラムの実行中に、ウィンドウが常に最前面に表示されるようにウィンドウスタイルを変更したいです。
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOPMOST);
SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
うまくいきません。助けてケロ

503 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 05:10:48 ]
てかWS_EX_TOPMOSTが付いてれば後ろに引っ込んだりしないだろ

…他にWS_EX_TOPMOSTを持ってるウィンドウがなければ

504 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 05:17:10 ]
>>502
なんでそこまでいっておいて、SetWindowPosを調べないんだ?
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
これだけでいい。

SetWindowLongはいらない。

505 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:26:31 ]
SetWindowLong入らない?

506 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:39:24 ]
XPの制限ユーザー上で実行するとはProgramFiles以下に書き込めません。
Vistaではこのようなファイル操作はVirtualStoreにリダイレクトされるようです。

実際のプログラムで設定ファイルを保存する場合は、
実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
No↓
ユーザーディレクトリ(AppDataなど)を取得し、そこに書き込み

このような動作が必要だと思います。
これをどのwindowsでも確実に動作させるにはどのようなAPIを使えばいいのでしょうか。


507 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:45:01 ]
>>505
CreateWindowExの段階でWS_EX_TOPMOST付けてるなら要らないと思うけど



508 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:45:53 ]
>>506
常にユーザディレクトリに書けばいいやん

509 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:04:14 ]
>実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み
この考えがそもそも間違い
ユーザーディレクトリに置くかレジストリを使用すべき

510 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:33:00 ]
共用というのであれば、それなりのアクセス権もってAll Usersに置けばいいし。

511 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:37:09 ]
どうしてもやりたければOSのバージョンを取得してやればいいんじゃね

512 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 12:38:15 ]
>>500
InvalidateRectしてからUpdateWindowすればWM_PAINTが完了するまで待てるけど
あれって他プロセスのウィンドウに使えたかな?

513 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 12:40:47 ]
WH_CALLWNDPROCRETを見てればWM_PAINTの処理が終わったかは分かる

こんなことでフックするなんて蛇足にも程がある気がするけど

514 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 13:42:59 ]
この場合、InvalidateRectが無くてもいいでしょう。
UpdateWindowだけで再描画されなくても、WM_PAINTは抜けてるって事だし。

515 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:24:24 ]
インストールせずにスタンドアローンで使うことを想定しているのですが、
万が一ユーザーがProgramFiles以下に置いた場合でも正常に動作させられるようにしたいのです。

516 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:26:44 ]
ユーザーがProgramFiles以下に置いた場合でも置かない場合でも、
常にユーザディレクトリに書いとけばいつでも正常に動作する

517 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:27:36 ]
だったらなおさら、どこに配置されようとAppDataを使うべきだろ
System32に入れる奴だっているかもしれないんだし(もっともXP以前ならそこでも読み書きできるが)



518 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:28:28 ]
>>515
たぶん、あなたが言いたいそれを「スタンドアローン」とは言わないと思う。
Readme にでも注意書きを書いておけば、わざわざ Program Files に
配置するスキルがあるユーザなら、意味をくみ取ってくれるんじぇね?

519 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:31:25 ]
専用のインストーラ・アンインストーラを設けないなら、
ユーザフォルダやレジストリに情報残すと削除がめんどいってのは同意するけども。

520 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 16:18:05 ]
>>515
気持ちは分かるけど、妙な俺様仕様を作らないほうがいいよ。
OSが推奨する共通の方式に従ったほうが
安全だしセキュアだし管理しやすいし将来の互換性も期待できるし
結果ユーザにとっても使い勝手が良いから。

521 名前:デフォルトの名無しさん [2007/11/27(火) 17:35:43 ]
>>503-505
レスありがとう
解決した。
だけど、SetWindowPos に指定するフラグで、HWND_TOPMOSTはドキュメントに載ってるが
HWND_NOTOPMOSTはヘッダー見て初めて知った
最前面化:SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
最前面化解消:SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
でOKだた

522 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:36:45 ]
そういやexeあるフォルダのの下にファイル作るプログラム、そのままVistaでちゃんと動いてるなと思って
ファイル探したら、ユーザーの下のVirtualStore\Program Files (x86)\xxx の下にできてたわ。
勝手にマッピングしてくれるみたいだな。

523 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:56:19 ]
>>520
MSが互換性に気をつけると思っているのですか

524 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:02:56 ]
実際気をつけてるよ

525 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:17:32 ]
>>522を下位互換性と呼ばずになんと呼ぶと?

526 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:18:56 ]
>>525
新機能

527 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:28:47 ]
GetSysColorBrush(COLOR_***)の結果と、HBRUSH(COLOR_*** + 1) って使用上で何か違うの?



528 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:46:04 ]
>>524
なぜIEとFirefoxでは表示が異なるのですか?

529 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:51:40 ]
Firefox の仕様準拠度が低いからだな

530 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:06:03 ]
>>527
GetSysColorBrush はブラシのハンドルが返る
HBRUSH(COLOR_*** + 1) ってのは、WNDCLASSEX 構造体のメンバーに入れてると思うが
これはRegisterClassExを呼んだ先でインデックスかブラシのハンドルか判断して
内部でGetSysColorBrushに相当するものを呼んでるだけだろう。
+1なのはインデックス0とNULLを区別するためだなw

531 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:28:39 ]
FillRectとかでHBRUSH(COLOR_*** + 1)入れても動くよな?

532 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:37:24 ]
>>529
違います。
IEの独自仕様のためですよ。

533 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:42:46 ]
違います
仕様が曖昧だからですよ

534 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:43:23 ]
IEの仕様解釈がおかしいのは認めるが、Firefoxも解釈おかしいよ

535 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:53:09 ]
>>532
えーと実際に Firefox で Acid2 とか試したことありますか?


536 名前:デフォルトの名無しさん [2007/11/27(火) 19:55:09 ]
ある文字列(改行含む)から、最長行の文字数を返す関数ってあります?
UNICODE/ANSIどっちでも対応できるもので、マルチバイト文字もうまく扱ってくれるもの

前に便利な文字列操作関数っていうサイトを見た希ガスるんだけど、見つからん

537 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:57:02 ]
>>535
Acid2なんて飾りだよ



538 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:58:06 ]
>>536
Win32API に、ですよね。
そういう関数はありません。

539 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:58:23 ]
>>536
等幅フォント?

540 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:06:27 ]
指定したフォルダにあるファイルのファイル名を全て取得する関数ってありますか?

541 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:11:12 ]
>>540
FindFirstFile FindNextFile FindClose

542 名前:デフォルトの名無しさん [2007/11/27(火) 20:13:54 ]
>>539
そうです。

>>538
別にAPIになければ、APIじゃなくてもいいです。
自作するのはちょtっとミリなので

543 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:13:54 ]
>>541
ありがとうございます。貴方のおかげで道が開けまんた。

544 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:23:18 ]
>>542
なぜ自作するのが無理なんだ?

int line = 0;
int maxlen = 0;
int i = 1;
while (fgets(s, ...)) {
 int len = strlen(s);
 if (maxlen < len) {
  line = i;
  maxlen = len;
 }
 i++;
}
こんな感じでどうにかなるだろ。

545 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:32:00 ]
>>542
size_t maxCharsInLine(LPCTSTR p)
{
 size_t maxLen = 0;
 size_t len = 0;
 while (*p) {
  switch (*p) {
   case 0x0d: case 0x0a:
    len=0; break;
   default:
    if (maxLen < ++len) maxLen = len;
  }
  p = (LPCTSTR) CharNext(p);
 }
 return maxLen;
}

546 名前:鈴木 [2007/11/27(火) 20:41:03 ]
164 名前:鈴木[who@am.i] 投稿日:2007/11/27(火) 13:12:56

MiniDumpWriteDump をつかって、Dumpを出力しているのですが、
どのようにしてファイルの中身は見れるでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 20:42:50 ]
>>546
よう鈴木、こないだ貸した5000円返せよ



548 名前:鈴木 [2007/11/27(火) 20:43:36 ]
>>547
しゃ、借用書はあるのかっ!

549 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 21:01:46 ]
>>531
そうなのか。
それも内部でブラシ取得してるんだろう。
ハンドルかインデックスかは、上位ワードが
0かどうかを見てる気がする。






[ 続きを読む ] / [ 携帯版 ]

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

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