投稿日 | : 2003/04/04(Fri) 05:29 |
投稿者 | : peta |
Eメール | : |
URL | : |
タイトル | : Re^3: コモンダイアログの表示 |
花ちゃん さん から紹介があった Visual Basic Station
http://www1.harenet.ne.jp/~unaap/
[ライブラリ]-[サンプル] の 47, 49: コモンダイアログの拡張
が大変参考になりますので、解析してみて下さい。
お望みの機能を実現するにはフックプロシージャ(OFNHookProc)に少し手を
入れる必要がありますので、説明します。
1.「ファイル名の表示幅を広く」
(1)ダイアログ幅の変更
ファイル名の表示幅(ListViewの幅)を変更する前に、先ずダイアログの幅を
変更します。WM_NOTIFY 通知メッセージの通知コード CDN_INITDONE で変更
処理します。例えば、こんな感じ。
hDlg = GetParent(hwnd)
Call GetWindowRect(hDlg, rcDlg)
Call SetWindowPos(hDlg, 0, 0, 0, lngDlgWidth, _
rcDlg.Bottom - rcDlg.Top, SWP_NOMOVE)
(2)ListView幅の変更
CDN_INITDONE ではListViewのウィンドウハンドルが得られない様なので、
CDN_FOLDERCHANGE で取得します。ListViewは、"SHELLDLL_DefView"クラス
の子ウィンドウの様なので、こんな感じ。
hWndDef = FindWindowEx(hDlg, 0, "SHELLDLL_DefView", vbNullString)
hwndLV = FindWindowEx(hWndDef, 0, "SysListView32", vbNullString)
ウィンドウハンドルを得たら、上記(1)と同様の方法で幅を変更します。
変更は、hWndDef と hwndLV の両方を同じ幅にして下さい。
2.「詳細表示」
ListViewのビュースタイルを LVS_REPORT に変更する方法もありですが
ここは、CDN_FOLDERCHANGE で、ListView幅の変更後、詳細ボタンに
WM_COMMAND メッセージを送るのが簡単でしょう。こんな感じ。
hWndTB = FindWindowEx(hDlg, 0, "ToolBarWindow32", vbNullString)
Call SendMessage(hDlg, WM_COMMAND, &HA004, ByVal hWndTB)
この処理は、初期表示に1回だけ実行する様にして下さい。
3.「日付降順」
ヘッダーのマウスクリックをシミュレートする方法が簡単ですが、確実に
やるなら、リストビューの LVM_SORTITEMS メッセージを使用して日付型
ソートを行います。この処理は、CDN_FOLDERCHANGEにて、初期表示の
「詳細表示」の後、1回だけ実行すればいいと思います。
ソートの内容は、以下のサンプルを参考にして下さい。
http://www.mvps.org/vbnet/code/callback/lvsortcallback.htm
フックプロシージャの作成は危険を伴いますので、必ずエラーを潰して
から実行する様にして下さい。