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かどうかを見てる気がする。