ファイラ

タブの試験実装

ファイルリストをタブかMDIに乗せようかと思っていたけど、 整理しづらく使いにくい。 タブブラウザなどで使われているグループタブは ファイラとしては一覧性が低い。 分割タブとして2つのタブコントロールを使う手もあるけど、 2つと固定的なのもいまいち…

DnD

エクスプローラとDnDの挙動が違っていたので修正した。 同Window内のDnDの制限 右ドラッグ時のポップアップメニューの項目 スクロール速度 気づいている範囲は似せることができたと思う。 試行錯誤が多くて苦労した。 そういやまだIDropTargetHelperを使って…

マルチスレッド

アイコンの取得、サムネイルの取得にもワーカースレッドを使うようにした。 UIが固まることが無くなって満足。 まだスレッド関係でまずいところがあるけど、それはおいおい修正するつもり。

アイコン

アイコンの取得に時間がかかるかどうか判定する方法を見つけた。 IShellIcon::GetIconOfでIExtractIcon::GetIconLocationの パラメーターを使うというもの。 MSDNには記載されていないので邪道かもしれない。 int icon; IShellIcon* si; hr = sf->QueryInter…

実装中

今、テレビを見ながら実装中。 9時からも面白そうな番組があるので楽しみ。

ファイルリスト

今までファイルリストはListViewを使っていたけど問題点も多い。 自由度も低いし..。 そこで試しに独自コントロールを作ってみた。 この系統を書くのは久しぶりだったのでずいぶんと行き詰まった。 スクロールバーなんてもう忘れてたよ...。 そこそこ動…

アイコン

また、VPN環境でdesktop.iniでアイコンが設定してあると、 その設定してあるアイコンを取得できないことが多い。 他のファイラも試してみたけど同じ状況。 しかし、エクスプローラはできてるんだよな...。 さらに調査が必要。

マルチスレッド

今までのソースを捨てて、マルチスレッドで書き直し始めた。 列挙が遅いときにUIが固まってしまうのがイヤなので。 とりあえずファイルの列挙とアイコンの取得でワーカースレッドを使い、 ファイルリストで移動処理ができるところまで実装してみた。 今はア…

IEnumIDList::NextとFindFirstFileの速度

興味があったので計測してみた。 どこまで信頼できるか分からないけど、3回計測したものの平均。 ファイル数 IDL FFF IDL(i) FFD(i) IDL(FD) C:\ 10 0ms 0ms 0ms 16ms 0ms (d)10 0 0 0 15 0 100 0 0 0 16 0 3000 15 16 47 469 16 LAN 10 0 0 0 31 0 (d)10 16…

一段落

人様に使ってもらえるレベルにはぜんぜん達していないけど、 自分ではある程度使えるところまできた。 エクスプローラや他のファイラに実装してある主だった機能は 実装できたのではないかと思う。 中には個人的な嗜好による実装もあるけど。 これからはコー…

ツリーの実装

ツリーの実装をしてみた。 実装していて思ったけど、多くのファイラにおけるツリーの監視・更新処理は とてもアバウトなようだ。 実際のフォルダ構造とツリーが異なっていることがままある。 もちろん、速度などを考えるとそれが現実的なのかもしれないが、 …

履歴、戻る、進むの実装

履歴はコンテキストメニューで実装してみた。履歴の文字列には、 エクスプローラの詳細設定で”アドレス バーにファイルのパス名を表示する”を チェックした場合に、アドレス バーに表示される文字列を表示したかった。 例えばDドライブのルートは、”ボリュー…

ListViewの描画問題

ListViewでサムネイル表示をするために、LVS_ICONで カスタムドローを使っているけど、これには問題があることに気づいた。 例えばitemが3000個ある場合、スクロールさせて3000個目を表示したとする。 すると、再描画の度に、0-2999までのNM_CUSTOMDRAWが発…

縮小版(サムネイル)

表示の調整が面倒なので、適当だった縮小版の実装を進めた。 アップした画像はサムネイルサイズが48*48のもの。 ちゃんとアイコンも48*48のもを使っている。 もちろんサムネイルのサイズは調整可能。

ショートカット

フォルダのショートカットを実装していないことに気づき、 実装した。 簡単に実装できると思っていたけど、思っていたより手こずった。 調べるとIShellLinkとIPersistFileを使うらしいので、使ってみた。 しかし、フォルダのリンク切れに対して、エクスプロ…

アイコン

IExtractIcon::Extractを使っていると、XPのエクスプローラと同じにはできない。 xlsを48*48で描画しようとすると、32*32を引き伸ばしたものになる。 またアイコンのないexeはダミーのアイコンを取得できない。 SHGetFileInfoならばダミーのアイコンを取得で…

アイコン

今までSHGetFileInfoを使ってアイコンの情報を取得していたけど、 サムネイルのテスト実装をしている途中で、縮小版はSHGFI_LARGEICON(32*32)より 大きいアイコン(48*48)を使っていることに気づいた。 SHGFI_LARGEICONでは48*48は取得できそうにない。 やは…

縮小版(サムネイル)

縮小版のテスト実装を行った。 適当に記述したら、とりあえず動いた。 ただ、Thumbs.dbの挙動が良くわからない。 フラグでIEIFLAG_CACHEを設定しても、Thumbs.dbを生成しない。 いろいろ試してみると、エクスプローラを含む多くのファイラでThumbs.dbを 作ら…

一覧での属性表示

とりあえず実装してみた。 効率が悪い実装だけど、後で修正するつもり。

ListViewのソート

XPのエクスプローラで詳細表示のとき、ソートした列の色が 淡いグレーになる。 これを実装したくて探すが、キーワードが思いつかない。 仕方がないので、またまたCommCtrl.hを読む。 LVM_SETSELECTEDCOLUMN、ListView_SetSelectedColumnを使うらしい。 また…

2005-05-28に書いたソートの件

当初デスクトップの.lnkが上手くソートできなかったけど、 一旦別フォルダにコピーして戻すと、上手くソートできることが判明。

拡張子の分割描画

ListViewのLVS_LISTで拡張子の分割表示を実装した。 拡張子を分割するためには事前に描画領域を計算する必要があり、 さらに遅くなった。 それでも視認性が高まったので良しとする。 これで複数列でファイル属性も表示する形式の足がかかりができた。 あとは…

ソート

エクスプローラーのソートはIShellFolder::CompareIDsを使っているけど、 これでソートすると、こちらが期待した順にならない場合がある。 よってファイルは文字列でソートし、それ以外(フォルダなど)は CompareIDsで比較するというオプションを加えた。 …

タイルビュー

ListViewでTile Viewを使いたくて調べたけれど、見つからない。 仕方がないので、CommCtrl.hを調べて導出。XPからしか使えないけど。 // タイルビューにする ListView_SetView(hwnd, LV_VIEW_TILE); // タイルビューの情報を設定する LVTILEVIEWINFO tvi = …

フォルダの監視

FindFirstChangeNotification、ReadDirectoryChangesW、SHChangeNotifyRegisterの 三種類あると思うけど、FindFirstChangeNotification、ReadDirectoryChangesWは ごみ箱の監視ができないので却下。 とりあえず速度を見るために、スレッドを使わずに実装して…

拡張子

エクスプローラは拡張子が表示されないので、 これを拡張子の表示を選択ができ、拡張子ごとのソートをしたい。 とりあえず、拡張子を表示するようにだけした。 あと拡張子のみを右寄せで表示にしたい。

動的カラム

今まで固定でカラムを4つ表示していたので、マイ コンピュータでは コンピュータとネットワークの場所というカラムが表示されていた。 うちには切断されたネットワークコンピュータへのショートカットがあるので、 表示が毎回遅い。 エクスプローラはこの辺…

ごみ箱のソート

ごみ箱に4000個のファイルをセットし、IShellFolder::CompareIDsでソートをする。 通常のフラグ設定だと正確にソートできるが、異様に遅い。 そこでSHCIDS_CANONICALONLYを用いると、正確にソートできないが、速い。 数回計測してみると、使用しない場合は11…

細かいテストを繰り返しながら、shell namespaceの理解を深め中。 同時にソースも整理している。

バグの1つがやっと解決。 ネットワークコンピュータにつながらない場合、エラーメッセージが 表示されないというもの。 フロッピの場合はエラーメッセージがきちんと表示されているのに。 いろいろ試してわかったのだけれども、 IShellFolder::EnumObjectsの…