Rev. | 61 |
---|---|
Size | 51,543 bytes |
Time | 2008-05-24 06:15:53 |
Author | goriponsoft |
Log Message | ・コンテキストメニューが開いた時点で「範囲選択」「複数選択」が解除されるように変更
|
// GSFinder.cpp : グローバル関数定義
////////////////////////////////////////////////////////////////
//INCLUDE
#include "GSFinder.h"
#include "MainWnd.h"
#include "OptionDlg.h"
#include "FolderDlgPPC.h"
HINSTANCE g_hInst; // 現在のインスタンス
CMainWnd g_MainWnd; //メインウインドウ
HWND g_hwndPrev = NULL; //ADD TODA
BOOL g_bCmdParam = FALSE;
LPTSTR g_lpszFirstLoadFolder = NULL;
TCHAR g_szRootName[MAX_PATH] = {0}; //ADD TODA
TCHAR g_szDecSep[16] = _T("."); //小数点区切り文字
//ADD START TODA
BOOL g_bMoving = FALSE;
BOOL g_bDraging = FALSE;
int g_nStartPos = 0;
int g_nLastWidth = 0;
int g_nLastHeight = 0;
//ADD END
SHACTIVATEINFO g_sai;
BOOL g_bIgureClick = FALSE; //ADD TODA (from GSFinder ver.1.99)
static TCHAR s_szStrBuf[MAX_PATH*2]; //ADD GORIPON
////////////////////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
//コマンドラインを判定
if (wcsncmp(lpCmdLine, APP_CMD_PARAM, APP_CMD_PARAM_LEN) == 0)
g_lpszFirstLoadFolder = lpCmdLine + APP_CMD_PARAM_LEN;
else if (wcslen(lpCmdLine))
//MOD START TODA (ダブルクォーテーションがある場合削除)
{
if(*lpCmdLine == _T('\"'))
{
g_lpszFirstLoadFolder = lpCmdLine + 1;
LPTSTR lpszTemp = wcschr(g_lpszFirstLoadFolder, _T('\"'));
if(lpszTemp) *lpszTemp = 0x00;
}
else
g_lpszFirstLoadFolder = lpCmdLine;
}
//MOD END
//二重起動の防止
HANDLE hMutex = CreateMutex(NULL, NULL, APP_MUTEX_NAME);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
HWND hPrevWnd = FindWindow(APP_MUTEX_NAME, NULL);
if (hPrevWnd)
{
SetForegroundWindow(hPrevWnd);
if (g_lpszFirstLoadFolder)
{
COPYDATASTRUCT cds;
cds.dwData = WM_DROPFILES;
cds.lpData = g_lpszFirstLoadFolder;
cds.cbData = (wcslen(g_lpszFirstLoadFolder) + 1) * sizeof(TCHAR);
SendMessage(hPrevWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
}
}
return 0;
}
MSG msg;
HACCEL hAccelTable;
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, g_szDecSep, 16);
//ADD START TODA (ファイル変更通知 from Y.Nagamidori)
InitUpdateNotify();
//ADD END
//メインウインドウの作成
g_hInst = hInstance;
g_MainWnd.Init();
g_MainWnd.ShowWindow();
g_hwndPrev = g_MainWnd.m_ListView.m_hWnd; //ADD TODA
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDR_MAINFRAME);
// メイン メッセージ ループ:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(g_MainWnd.m_hWnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//ADD START TODA (ファイル変更通知 from Y.Nagamidori)
UninitUpdateNotify();
//ADD END
return msg.wParam;
}
////////////////////////////////////////////////////////////////
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
//キー入力処理
if(message == WM_NOTIFY) {
WPARAM wRtn = 0;
switch (((LPNMHDR)lParam)->code) {
//ツリービュー/リストビュー上のキー入力の場合
case LVN_KEYDOWN:
wRtn = g_MainWnd.m_ListView.OnKeydown((NMLVKEYDOWN*)lParam);
break;
case TVN_KEYDOWN:
wRtn = g_MainWnd.m_TreeView.OnKeydown((NMTVKEYDOWN*)lParam);
break;
}
//メッセージ変換判定
if(wRtn != 0) {
message = WM_COMMAND;
wParam = wRtn | (wParam&0xFFFF0000);
}
}
HWND hFocus = GetFocus();
int wmId, wmEvent;
switch (message)
{
case WM_COMMAND:
{
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
if (wmId >= ID_FILE_OPEN_APP && wmId < ID_FILE_OPEN_APP + MAX_OPENAPP)
{
g_MainWnd.m_ListView.OnFileOpenApp(wmId - ID_FILE_OPEN_APP);
break;
}
if (wmId >= ID_TOOL_USERPATH_MENU && wmId < ID_TOOL_USERPATH_MENU + MAX_OPENAPP)
{
g_MainWnd.m_ListView.OnToolUserPath(wmId - ID_TOOL_USERPATH_MENU);
break;
}
if (wmId >= ID_TOOL_FAVORITES_LNK && wmId < ID_TOOL_FAVORITES_LNK + g_MainWnd.m_ListView.m_nFavoritesCount)
{
g_MainWnd.m_ListView.OnToolFavoritesLnk(wmId - ID_TOOL_FAVORITES_LNK);
break;
}
//ADD START GORIPON (新規作成メニュー対応)
if (wmId >= ID_FILE_SHELL_NEW_MENU && wmId < (ID_FILE_SHELL_NEW_MENU+MAX_OPENAPP))
{
g_MainWnd.m_ListView.OnFileShellNew(wmId-ID_FILE_SHELL_NEW_MENU);
break;
}
//ADD END
//DEL START GORIPON
////タップ&ホールド用前処理
//g_MainWnd.m_ListView.OnSelectMenuLoop();
//g_MainWnd.m_TreeView.OnSelectMenuLoop();
//DEL END
//メッセージID判定
wmId=g_MainWnd.m_ListView.CheckMessageID(wmId);
switch (wmId)
{
//フォーカス設定
case ID_KEY_TAB:
{
if (hFocus == g_MainWnd.m_ListView.m_hWnd)
{
if (g_MainWnd.m_CmdBands.m_Settings.bShowAddressBar)
SetFocus(g_MainWnd.m_CmdBands.m_hComboBox);
else
SetFocus(g_MainWnd.m_TreeView.m_hWnd);
}
else if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
SetFocus(g_MainWnd.m_ListView.m_hWnd);
else
{
if (g_MainWnd.m_bShowFolder)
SetFocus(g_MainWnd.m_TreeView.m_hWnd);
else
SetFocus(g_MainWnd.m_ListView.m_hWnd);
}
break;
}
//フォーカス設定(逆順)
case ID_KEY_SFT_TAB:
{
if (hFocus == g_MainWnd.m_ListView.m_hWnd)
{
if (g_MainWnd.m_bShowFolder)
SetFocus(g_MainWnd.m_TreeView.m_hWnd);
else if (g_MainWnd.m_CmdBands.m_Settings.bShowAddressBar)
SetFocus(g_MainWnd.m_CmdBands.m_hComboBox);
}
else if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
{
if (g_MainWnd.m_CmdBands.m_Settings.bShowAddressBar)
SetFocus(g_MainWnd.m_CmdBands.m_hComboBox);
else
SetFocus(g_MainWnd.m_ListView.m_hWnd);
}
else
{
SetFocus(g_MainWnd.m_ListView.m_hWnd);
}
break;
}
//バージョン情報
case ID_FILE_ABOUT:
DialogBox(g_hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
//終了
case ID_FILE_EXIT:
g_MainWnd.OnClose();
break;
//CTRLキーをON
case ID_EDIT_CONTROL_ON:
SetFocus(g_MainWnd.m_ListView.m_hWnd); //ADD GORIPON
g_MainWnd.OnEditCtrlOn();
break;
//SHIFTキーをON
case ID_EDIT_SHIFT_ON:
SetFocus(g_MainWnd.m_ListView.m_hWnd); //ADD GORIPON
g_MainWnd.OnEditShiftOn();
break;
//ドラッグ&ドロップモードON/OFF
case ID_EDIT_DRAGDROP:
g_MainWnd.OnDragDropMode();
break;
//切り取り
case ID_EDIT_CUT:
{
//MOD START TODA (クリップボード処理追加)
if(hFocus == g_MainWnd.m_ListView.m_hWnd) {
g_MainWnd.m_ListView.OnEditCut();
}
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd) {
g_MainWnd.m_TreeView.OnEditCut();
}
else {
SendMessage(hFocus, WM_CUT, 0x00, 0x00);
g_MainWnd.m_CmdBands.SetEnableEditPaste(TRUE, FALSE);
}
//MOD END
break;
}
//コピー
case ID_EDIT_COPY:
{
//MOD START TODA (クリップボード処理追加)
if(hFocus == g_MainWnd.m_ListView.m_hWnd) {
g_MainWnd.m_ListView.OnEditCopy();
}
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd) {
g_MainWnd.m_TreeView.OnEditCopy();
}
else {
SendMessage(hFocus, WM_COPY, 0x00, 0x00);
g_MainWnd.m_CmdBands.SetEnableEditPaste(TRUE, FALSE);
}
//MOD END
break;
}
//貼り付け
case ID_EDIT_PASTE:
{
//MOD START TODA (クリップボード処理追加)
if(hFocus == g_MainWnd.m_ListView.m_hWnd ||
hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_ListView.OnEditPaste();
else
SendMessage(hFocus, WM_PASTE, 0x00, 0x00);
//MOD END
break;
}
// ショートカットの貼り付け
case ID_EDIT_PASTE_SHORTCUT:
g_MainWnd.m_ListView.OnEditPasteShortcut();
break;
//ファイル検索
case ID_EDIT_FILESEARCH:
g_MainWnd.m_ListView.OnFileSearch();
break;
//ステータスバーの表示
case ID_VIEW_STATUSBAR:
g_MainWnd.OnViewStatusBar();
break;
//ツールバーの表示
case ID_VIEW_TOOLBAR:
g_MainWnd.m_CmdBands.OnViewToolBar();
break;
//アドレスバーの表示
case ID_VIEW_ADDRESSBAR:
g_MainWnd.m_CmdBands.OnViewAddressBar();
break;
//リストのスタイル
case ID_VIEW_LARGEICON:
g_MainWnd.m_ListView.OnChangeListStyle(ID_VIEW_LARGEICON);
break;
//表示形式->小さいアイコン
case ID_VIEW_SMALLICON:
g_MainWnd.m_ListView.OnChangeListStyle(ID_VIEW_SMALLICON);
break;
//表示形式->一覧
case ID_VIEW_LIST:
g_MainWnd.m_ListView.OnChangeListStyle(ID_VIEW_LIST);
break;
//表示形式->詳細
case ID_VIEW_REPORT:
g_MainWnd.m_ListView.OnChangeListStyle(ID_VIEW_REPORT);
break;
//表示形式->詳細(行選択)
case ID_VIEW_REPORTLINE:
g_MainWnd.m_ListView.OnChangeListStyle(ID_VIEW_REPORTLINE);
break;
//表示形式の変更
case ID_VIEW_STYLE:
g_MainWnd.m_ListView.OnListStyle();
break;
//リストの並べ替え(名前)
case ID_VIEW_SORT_NAME:
g_MainWnd.m_ListView.OnChangeSort(ID_VIEW_SORT_NAME);
break;
//リストの並べ替え(種類)
case ID_VIEW_SORT_EXT:
g_MainWnd.m_ListView.OnChangeSort(ID_VIEW_SORT_EXT);
break;
//リストの並べ替え(サイズ)
case ID_VIEW_SORT_SIZE:
g_MainWnd.m_ListView.OnChangeSort(ID_VIEW_SORT_SIZE);
break;
//リストの並べ替え(更新日)
case ID_VIEW_SORT_TIME:
g_MainWnd.m_ListView.OnChangeSort(ID_VIEW_SORT_TIME);
break;
//リストの並べ替え(降順)
case ID_VIEW_SORT_NOT_RAISE:
g_MainWnd.m_ListView.OnChangeSort(ID_VIEW_SORT_NOT_RAISE);
break;
//最新の情報に更新
case ID_VIEW_UPDATE:
g_MainWnd.OnViewUpdate();
break;
//一つ上のフォルダへ
case ID_VIEW_UPFOLDER:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnViewUpFolder();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnViewUpFolder();
break;
}
//フォルダ表示ON/OFF
case ID_VIEW_FOLDER:
g_MainWnd.OnViewFolder();
break;
//MOD START GORIPON
//左右に並べる
case ID_VIEW_SIDE:
if (g_MainWnd.m_bLandscapeMode)
g_MainWnd.OnViewSideL();
else
g_MainWnd.OnViewSide();
break;
//MOD END
//ADD START GORIPON
//ハイレゾ表示
case ID_VIEW_HIGHRES:
g_MainWnd.OnViewHighRes(!g_MainWnd.m_bHighRresolutionMode);
break;
//ADD END
//ファイルを開く
case ID_FILE_OPEN:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileOpen();
break;
}
//ADD START TODA (from GSFinder ver.1.99)
//アプリケーションへ送る
case ID_FILE_TO_APP:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileToApp();
break;
}
//ADD END
//パラメータ付きで開く
case ID_FILE_OPEN_PARAM:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileOpenParam();
break;
}
//新規フォルダ作成
case ID_FILE_CREATEFOLDER:
SetFocus(g_MainWnd.m_ListView.m_hWnd);
g_MainWnd.m_ListView.OnFileCreateFolder();
break;
//ショートカット作成
case ID_FILE_CREATE_SHORTCUT:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileCreateShortcut();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileCreateShortcut();
break;
}
//ADD START GORIPON
//新規ショートカット作成
case ID_FILE_CREATE_NEWSHORTCUT:
SetFocus(g_MainWnd.m_ListView.m_hWnd);
g_MainWnd.m_ListView.OnFileCreateNewShortcut();
break;
//ADD END
//削除
case ID_FILE_DELETE:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd) {
g_MainWnd.m_ListView.OnFileDelete();
}
if(hFocus == g_MainWnd.m_TreeView.m_hWnd) {
g_MainWnd.m_TreeView.OnFileDelete();
}
break;
}
//名前の変更
case ID_FILE_RENAME:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileRename();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileRename();
break;
}
//プロパティ
case ID_FILE_PROPERTY:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileProperty();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileProperty();
break;
}
//赤外線送信
case ID_FILE_IR_SEND:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileIRSend();
//DEL START GORIPON
//else
//if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
// g_MainWnd.m_TreeView.OnFileIRSend();
//DEL END
break;
}
//指定のフォルダへショートカット作成
case ID_FILE_SHORTCUT_FOLDER:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileShortcutFolder();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileShortcutFolder();
break;
}
//指定フォルダにファイルをコピー
case ID_FILE_COPY_FOLDER:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileCopyFolder();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileCopyFolder();
break;
}
//指定フォルダにファイルを移動
case ID_FILE_MOVE_FOLDER:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileMoveFolder();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileMoveFolder();
break;
}
//圧縮
case ID_FILE_COMPRESS:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileCompress();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFileCompress();
break;
}
//解凍
case ID_FILE_UNCOMPRESS:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileUnCompress();
break;
}
//ADD START GORIPON
//メール送信
case ID_FILE_MAIL_SEND:
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFileMailSend();
break;
//ADD END
//名前をコピー
case ID_EDIT_COPY_FILE_NAME:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnEditCopyFileName();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnEditCopyFileName();
break;
}
//パスをコピー
case ID_EDIT_COPY_FILE_PATH:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnEditCopyFilePath();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnEditCopyFilePath();
break;
}
//全て選択
case ID_EDIT_SELECTALL:
//SetFocus(g_MainWnd.m_ListView.m_hWnd); //DEL GORIPON
//ADD START GORIPON (アドレスバーでのコンテキストメニュー対応)
if (hFocus == g_MainWnd.m_CmdBands.m_hEditBox)
SendMessage(g_MainWnd.m_CmdBands.m_hEditBox, EM_SETSEL, 0, -1);
else
//ADD END
{
ListView_SetItemState(g_MainWnd.m_ListView.m_hWnd, -1, LVIS_SELECTED, LVIS_SELECTED);
}
break;
//選択解除
case ID_EDIT_NOTSEL_ALL:
//SetFocus(g_MainWnd.m_ListView.m_hWnd); //DEL GORIPON
ListView_SetItemState(g_MainWnd.m_ListView.m_hWnd, -1, 0, LVIS_SELECTED);
break;
//選択の切り替え
case ID_EDIT_SELECT_SWITCH:
//SetFocus(g_MainWnd.m_ListView.m_hWnd); //DEL GORIPON
g_MainWnd.m_ListView.OnEditSelectSwitch();
break;
//ツールメニュー
//ネットワーク接続の割り当て
case ID_TOOL_NETWORK_COM:
g_MainWnd.OnNetworkDriveConnect();
break;
//ネットワーク接続の切断
case ID_TOOL_NETWORK_DCOM:
g_MainWnd.OnNetworkDriveDisconnect();
break;
//ActiveSync
case ID_TOOL_ACTIVESYNC:
g_MainWnd.OnToolActivesync();
break;
//DEL START GORIPON
////PCリンク
//case ID_TOOL_PCLINK:
// g_MainWnd.OnToolPclink();
// break;
//DEL END
//赤外線受信
case ID_FILE_IRRECEIVE:
g_MainWnd.OnToolIRRecive();
break;
//オプション
case ID_TOOL_OPTION:
{
COptionDlg od;
od.ShowOptionDlg();
break;
}
//進む
case ID_GO_FRONT:
g_MainWnd.m_ListView.OnGoFront();
break;
//戻る
case ID_GO_BACK:
g_MainWnd.m_ListView.OnGoBack();
break;
//ADD START GORIPON
//フォルダ表示/ファイル表示へ移動
case ID_FOCUS_MOVE:
if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
SetFocus(g_MainWnd.m_ListView.m_hWnd);
else
SetFocus(g_MainWnd.m_TreeView.m_hWnd);
break;
//ADD END
//お気に入りへ追加
case ID_FAVORITES_ADD:
{
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnFavoritesAdd();
else
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnFavoritesAdd();
break;
}
//お気に入りの整理
case ID_FAVORITES_ARG:
g_MainWnd.m_ListView.OnFavoritesOrganize();
break;
//ツールボタンドロップダウン時
case IDC_BTN_GOTOFOLDER:
g_MainWnd.m_ListView.OnGotoFolderDropDown();
break;
//マイドキュメント
case ID_TOOL_MYDOCUMENTS:
g_MainWnd.m_ListView.OnViewUpdate(g_MainWnd.m_szMyDocumentPath);
break;
//スタートメニュー
case ID_TOOL_STARTMENU:
g_MainWnd.m_ListView.OnViewUpdate(g_MainWnd.m_szStartMenuPath);
break;
//DEL START GORIPON
////デスクトップ
//case ID_TOOL_DESKTOP:
// g_MainWnd.m_ListView.OnViewUpdate(g_MainWnd.m_szDesktopPath);
// break;
//DEL END
//マイコンピュータ
case ID_TOOL_MYDEVICE:
g_MainWnd.m_ListView.OnViewUpdate(_T(""));
break;
//ユーザーパス
case ID_TOOL_USERPATH:
g_MainWnd.m_ListView.OnUserPath();
break;
}
//DEL START GORIPON
////タップ&ホールド用後処理
//g_MainWnd.m_ListView.OnSelectMenuLoop();
//g_MainWnd.m_TreeView.OnSelectMenuLoop();
//DEL END
switch (wmEvent)
{
//コンボボックス
case CBN_SELENDOK:
{
HWND hwndComboBox = (HWND) lParam;
if (hwndComboBox == g_MainWnd.m_CmdBands.m_hComboBox)
{
g_MainWnd.m_ListView.OnSelEndOK();
}
break;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
}
//ツリービュー/リストビュー/アドレスバー発生イベント
case WM_NOTIFY:
{
//MOD START TODA (from GSFinder ver.1.99)
LPNMHDR pNmHdr = (LPNMHDR)lParam;
switch (pNmHdr->code)
{
//タップアンドホールド
case GN_CONTEXTMENU:
if(g_bDraging) break;
if (hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnTapAndHold((NMRGINFO*)lParam);
else
if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
{
//ADD START GORIPON
//何故かプレス&ホールド時のみGN_CONTEXTMENUが2回呼ばれてしまうので対処する
if (g_MainWnd.m_TreeView.m_nPressAndHoldCount)
{
if (--g_MainWnd.m_TreeView.m_nPressAndHoldCount)
g_MainWnd.m_TreeView.OnTapAndHold((NMRGINFO*)lParam);
}
else
//ADD END
g_MainWnd.m_TreeView.OnTapAndHold();
}
//ADD START GORIPON (アドレスバーでのコンテキストメニュー対応)
else if (hFocus == g_MainWnd.m_CmdBands.m_hEditBox)
{
g_MainWnd.m_CmdBands.OnTapAndHold((NMRGINFO*)lParam);
}
//ADD END
return TRUE;
//リストをダブルクリック
case NM_DBLCLK:
if (hFocus == g_MainWnd.m_ListView.m_hWnd) {
g_MainWnd.m_ListView.OnFileOpen();
}
break;
//リストをシングルクリック
case NM_CLICK:
//DEL START GORIPON
////タップ&ホールド解除
//g_MainWnd.m_TreeView.OnTapHoldCancel();
//g_MainWnd.m_ListView.OnTapHoldCancel();
//
////タップ&ホールド処理中の場合は何もしない
//if(g_MainWnd.m_ListView.m_bHolding ||
// g_MainWnd.m_TreeView.m_bHolding) break;
//DEL END
//シングルクリックで実行指定時
if (g_MainWnd.m_ListView.m_Settings.bSingleClick &&
pNmHdr->hwndFrom == g_MainWnd.m_ListView.m_hWnd)
{
//MOD START TODA (from GSFinder ver.1.99)
if (!(GET_KEYSTATE(VK_CONTROL)&0x8000) &&
!(GET_KEYSTATE(VK_SHIFT)&0x8000) &&
!(GET_KEYSTATE(VK_MENU)&0x8000) &&
!g_bIgureClick)
//MOD END
{
//選択アイテムが1個のみの場合
if (1 == ListView_GetSelectedCount(
g_MainWnd.m_ListView.m_hWnd))
{
g_MainWnd.m_ListView.OnFileOpen();
break;
}
}
g_bIgureClick = FALSE; //ADD TODA (from GSFinder ver.1.99)
}
//右クリック(Alt+クリック)ではない場合
if (!(!(GET_KEYSTATE(VK_CONTROL)&0x8000) &&
!(GET_KEYSTATE(VK_SHIFT)&0x8000) &&
(GET_KEYSTATE(VK_MENU)&0x8000)))
{
break;
}
//右クリックの場合NM_RCLICK時の処理を継続(breakしない)
//右クリック
case NM_RCLICK:
//DEL START GORIPON
////タップ&ホールド解除
//g_MainWnd.m_TreeView.OnTapHoldCancel();
//g_MainWnd.m_ListView.OnTapHoldCancel();
////タップ&ホールド処理中の場合は何もしない
//if(g_MainWnd.m_ListView.m_bHolding ||
// g_MainWnd.m_TreeView.m_bHolding) break;
//DEL END
//右クリックメニュー表示
if (hFocus == g_MainWnd.m_ListView.m_hWnd) {
LPNMLISTVIEW lpnmlv = (LPNMLISTVIEW)lParam;
g_MainWnd.m_ListView.OnRClick(lpnmlv->ptAction.x, lpnmlv->ptAction.y);
}
else
if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
{
DWORD dwPos = GetMessagePos();
g_MainWnd.m_TreeView.OnRClick(GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos), TRUE); //MOD GORIPON
}
break;
//Enter/Action押下
case NM_RETURN:
if (hFocus == g_MainWnd.m_ListView.m_hWnd)
{
if (GET_KEYSTATE(VK_MENU)&0x8000)
g_MainWnd.m_ListView.OnFileProperty();
//DEL START GORIPON
//else
// g_MainWnd.m_ListView.OnFileOpen();
//DEL END
}
else
if (hFocus == g_MainWnd.m_TreeView.m_hWnd)
{
if (GET_KEYSTATE(VK_MENU)&0x8000)
g_MainWnd.m_TreeView.OnFileProperty();
//ADD START GORIPON
else
{
SHRGINFO shrg;
RECT rc;
HTREEITEM hItem = TreeView_GetSelection(g_MainWnd.m_TreeView.m_hWnd);
if(hItem)
{
TreeView_GetItemRect(g_MainWnd.m_TreeView.m_hWnd, hItem, &rc, TRUE);
shrg.cbSize = sizeof(shrg);
shrg.hwndClient = g_MainWnd.m_TreeView.m_hWnd;
shrg.ptDown.x = rc.left + (RECT_WIDTH(&rc) / 2);
shrg.ptDown.y = rc.top + (RECT_HEIGHT(&rc) / 2);
shrg.dwFlags = SHRG_NOTIFYPARENT;
g_MainWnd.m_TreeView.m_nPressAndHoldCount = 2;
if (SHRecognizeGesture(&shrg))
return TRUE;
g_MainWnd.m_TreeView.m_nPressAndHoldCount = 0;
}
}
//ADD END
}
return FALSE;
//フォーカス設定時
case NM_SETFOCUS:
g_MainWnd.OnSetFocus((HWND)pNmHdr->hwndFrom);
break;
//フォーカス非設定時
case NM_KILLFOCUS:
if (hFocus == g_MainWnd.m_TreeView.m_hWnd) {
g_MainWnd.m_TreeView.OnKillFocus();
}
break;
//名前の変更開始
case LVN_BEGINLABELEDIT:
//タップ&ホールド解除
//g_MainWnd.m_ListView.OnTapHoldCancel(); //DEL GORIPON
g_MainWnd.m_ListView.m_bEditing = TRUE;
g_MainWnd.m_CmdBands.SetEnableEditPasteBef(); //ADD TODA
break;
//名前の変更終了
case LVN_ENDLABELEDIT:
//タップ&ホールド解除
//g_MainWnd.m_ListView.OnTapHoldCancel(); //DEL GORIPON
g_MainWnd.m_ListView.m_bEditing = FALSE;
g_MainWnd.m_CmdBands.SetEnableEditPasteAft(); //ADD TODA
return g_MainWnd.m_ListView.OnEndLabelEdit((LV_DISPINFO*)lParam);
//アイテム選択時
case LVN_ITEMCHANGED:
if(g_bDraging)
break;
if(hFocus == g_MainWnd.m_ListView.m_hWnd)
g_MainWnd.m_ListView.OnItemChanged((LPNMLISTVIEW)lParam); //MOD GORIPON
break;
//カラムクリック時
case LVN_COLUMNCLICK:
g_MainWnd.m_ListView.OnColumnClick((LPNMLISTVIEW)lParam);
break;
//アイコン更新時
case LVN_GETDISPINFO:
//アイコン遅延読み込み
g_MainWnd.m_ListView.OnGetDispInfo((NMLVDISPINFO*)lParam);
break;
//ドラッグの開始
case LVN_BEGINDRAG:
//タップ&ホールド解除
//g_MainWnd.m_ListView.OnTapHoldCancel(); //DEL GORIPON
g_bDraging = TRUE;
g_MainWnd.OnBeginDrag((LPNMHDR)lParam);
break;
//ドラッグの開始
case TVN_BEGINDRAG:
//タップ&ホールド解除
//g_MainWnd.m_TreeView.OnTapHoldCancel(); //DEL GORIPON
g_bDraging = TRUE;
g_MainWnd.OnBeginDrag((LPNMHDR)lParam);
break;
//名前の変更開始
case TVN_BEGINLABELEDIT:
//タップ&ホールド解除
//g_MainWnd.m_TreeView.OnTapHoldCancel(); //DEL GORIPON
g_MainWnd.m_TreeView.m_bEditing = TRUE;
g_MainWnd.m_CmdBands.SetEnableEditPasteBef(); //ADD TODA
g_MainWnd.m_TreeView.GetCurrentFolder();
break;
//名前の変更終了
case TVN_ENDLABELEDIT:
//タップ&ホールド解除
//g_MainWnd.m_TreeView.OnTapHoldCancel(); //DEL GORIPON
g_MainWnd.m_TreeView.m_bEditing = FALSE;
g_MainWnd.m_CmdBands.SetEnableEditPasteAft(); //ADD TODA
return g_MainWnd.m_TreeView.OnEndLabelEdit((TV_DISPINFO*)lParam);
// フォーカスが設定された場合
case TVN_SELCHANGED:
if(hFocus == g_MainWnd.m_TreeView.m_hWnd)
g_MainWnd.m_TreeView.OnSelChanged((NMTREEVIEW*)lParam);
break;
//ツリー展開時
case TVN_ITEMEXPANDING:
g_MainWnd.m_TreeView.OnItemExpanding((NMTREEVIEW*)lParam);
break;
//ツリー展開終了時
case TVN_ITEMEXPANDED:
g_MainWnd.m_TreeView.OnItemExpanded((NMTREEVIEW*)lParam);
break;
//ADD START TODA (from GSFinder ver.1.99)
case LVN_MARQUEEBEGIN:
g_bIgureClick = TRUE;
break;
//ADD END
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
//MOD END
}
//ウィンドウ生成
case WM_CREATE:
g_MainWnd.OnCreate();
break;
//ウィンドウクローズ
case WM_CLOSE:
g_MainWnd.OnClose();
break;
//ウィンドウ破棄
case WM_DESTROY:
g_MainWnd.OnDestroy();
break;
//ウィンドウサイズ変更
case WM_SIZE:
//コマンドバーステータスバーのレイアウト変更
g_MainWnd.RecalcBarLayout(wParam, lParam);
//MOD START TODA (タスク切り替え時のツールバー表示異常)
//ウィンドウのレイアウト変更
g_MainWnd.RecalcLayout();
//MOD END
break;
//ウィンドウのアクティブ/非アクティブ
case WM_ACTIVATE:
if(LOWORD(wParam) == WA_INACTIVE && g_bDraging)
{
g_MainWnd.OnDropCansel();
g_bDraging = FALSE;
}
//MOD START TODA (from GSFinder ver.1.99)
g_MainWnd.OnActivate(LOWORD(wParam));
//MOD END
break;
case WM_SETTINGCHANGE:
SHHandleWMSettingChange(hWnd, wParam, lParam, &g_sai);
g_MainWnd.OnSettingChange(wParam);
break;
// メモリカードの自動認識
case WM_DEVICECHANGE:
g_MainWnd.OnDeviceChange(TRUE);
break;
//起動パラメータ有り
case WM_COPYDATA:
{
COPYDATASTRUCT* pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == WM_DROPFILES) {
DWORD dwAttr = GetFileAttributes((LPTSTR)pcds->lpData);
if (dwAttr != 0xFFFFFFFF && (dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) {
g_MainWnd.m_ListView.OnViewUpdate((LPCTSTR)pcds->lpData);
}
}
break;
}
//Splitter処理
//マウスボタン押下開始
case WM_LBUTTONDOWN:
SetCapture(hWnd);
g_bMoving = TRUE;
//MOD START GORIPON
if(g_MainWnd.m_bLandscapeMode?g_MainWnd.m_bViewSideL:g_MainWnd.m_bViewSide)
{
g_nStartPos = GET_X_LPARAM(lParam);
g_nLastWidth = (g_MainWnd.m_bLandscapeMode? g_MainWnd.m_nTreeViewWidthL:g_MainWnd.m_nTreeViewWidth);
}
else
{
g_nStartPos = GET_Y_LPARAM(lParam);
g_nLastHeight = (g_MainWnd.m_bLandscapeMode? g_MainWnd.m_nTreeViewHeightL:g_MainWnd.m_nTreeViewHeight);
}
//MOD END
break;
//マウス移動中
case WM_MOUSEMOVE:
if (g_bMoving)
g_MainWnd.OnMouseMove(lParam, g_nStartPos, g_nLastWidth, g_nLastHeight);
if(g_bDraging) {
POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; //MOD GORIPON
g_MainWnd.OnMouseMove(pt);
}
break;
//マウスボタン押下終了
case WM_LBUTTONUP:
ReleaseCapture();
if(g_bMoving)
{
ListView_Arrange(g_MainWnd.m_ListView.m_hWnd, LVA_DEFAULT);
InvalidateRect(g_MainWnd.m_hWnd, NULL, FALSE);
}
if(g_bDraging)
g_MainWnd.OnLButtopUp();
g_bMoving = FALSE;
g_bDraging = FALSE;
break;
//フォーカス設定
case WM_SETFOCUS:
SetFocus(g_MainWnd.m_ListView.m_hWnd);
break;
//マウスボタン右クリック
case WM_RBUTTONDOWN:
MessageBox(NULL,_T("CLICK"),_T("TEST"),MB_OK);
break;
//ADD START GORIPON
//ポップアップメニューオープン
case WM_ENTERMENULOOP:
g_MainWnd.m_ListView.m_bThroughContextMenu = TRUE;
if (g_MainWnd.m_bNumberShortcut)
{
g_MainWnd.SaveInputMode();
g_MainWnd.SetInputMode(INPUTMODE_HAN_NUMERIC);
}
break;
//ADD END
//MOD START GORIPON
//ポップアップメニュークローズ
case WM_EXITMENULOOP:
if (g_MainWnd.m_bNumberShortcut)
g_MainWnd.RestoreInputMode();
break;
//MOD END
//ADD START TODA (ファイル変更通知 from Y.Nagamidori)
case WM_UPDATENOTIFY:
{
MSG msg;
while (PeekMessage(&msg, g_MainWnd.m_hWnd, WM_UPDATENOTIFY, WM_UPDATENOTIFY, PM_REMOVE));
g_MainWnd.OnDeviceChange(FALSE);
break;
}
//ADD END
//タイマ通知
case WM_TIMER:
if (wParam == ID_TIMER_TVSELECTED)
g_MainWnd.m_TreeView.OnKillFocus();
if(wParam == ID_TIMER_DEVICECHANGE)
g_MainWnd.OnDeviceChange(FALSE, FALSE);
//それ以外はdef
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
////////////////////////////////////////////////////////////////
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
{
SHINITDLGINFO shidi;
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = SHIDIF_DONEBUTTON | SHIDIF_SIPDOWN | SHIDIF_SIZEDLGFULLSCREEN;
shidi.hDlg = hDlg;
SHINITDIALOG(&shidi); //MOD GORIPON
//ADD START GORIPON
//バージョン番号文字列の設定
DWORD size;
TCHAR szTemp[1024];
GetModuleFileName(NULL, szTemp, MAX_PATH);
size = GetFileVersionInfoSize(szTemp, NULL);
if (size)
{
TCHAR *pv = new TCHAR[size/sizeof(TCHAR)];
if (GetFileVersionInfo(szTemp, 0, size, pv))
{
UINT len, v1, v2, v3, v4;
TCHAR *lpszTemp;
VerQueryValue(pv, _T("\\StringFileInfo\\041104e4\\ProductVersion"), (LPVOID*)&lpszTemp, &len);
swscanf(lpszTemp, _T("%d, %d, %d, %d"), &v1, &v2, &v3, &v4);
wsprintf(szTemp, _T("Ver.%d.%d.%d.%d"), v1, v2, v3, v4);
SetWindowText(GetDlgItem(hDlg, IDC_VERSION), szTemp);
}
delete pv;
}
//ADD END
//DEL START GORIPON (PocketPC/WindowsMobile版のAboutに「メモリ使用状況」は無い)
////サイズ調整 (Edit)
//RECT rc;
//POINT pt;
//GetWindowRect(GetDlgItem(hDlg, IDC_EDIT_MEMORY), &rc);
//pt.x = rc.left; pt.y = rc.top;
//ScreenToClient(hDlg, &pt);
////ADD START TODA
//DWORD dwX = GetSystemMetrics(SM_CXSCREEN);
//DWORD dwY = GetSystemMetrics(SM_CYSCREEN);
//if(VGACheck())
//{
// dwX -= 65;
// dwY -= 420;
//}
//else
//{
// dwX -= 32;
// dwY -= 210;
//}
////ADD END
//MoveWindow(GetDlgItem(hDlg, IDC_EDIT_MEMORY), pt.x, pt.y, dwX, dwY, TRUE); //MOD TODA
//ULARGE_INTEGER nFreeBytesAvailableToCaller;
//ULARGE_INTEGER nTotalNumberOfBytes;
//ULARGE_INTEGER nTotalNumberOfFreeBytes;
////メモリ使用状況の表示
//TCHAR szTemp[64];
//TCHAR szText[1024] = IDS_MEMORYSTATUS;
///////////////////////////////////////////////////////
////プログラムメモリ
//wcscat(szText, IDS_FMT_PROGMEM);
//MEMORYSTATUS ms;
//ms.dwLength = sizeof(ms);
//GlobalMemoryStatus(&ms);
//SetFormatSize(ms.dwAvailPhys, szTemp, _T("%s KB"), _T("%s MB"));
//wcscat(szText, szTemp);
//wcscat(szText, _T(" / "));
//SetFormatSize(ms.dwTotalPhys, szTemp, _T("%s KB"), _T("%s MB"));
//wcscat(szText, szTemp);
///////////////////////////////////////////////////////
////オブジェクトストア
//if (GetDiskFreeSpaceEx(_T("\\"), &nFreeBytesAvailableToCaller, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes))
//{
// wcscat(szText, IDS_FMT_DATAMEM);
// int nTemp = (int)nTotalNumberOfFreeBytes.QuadPart;
// SetFormatSize(nTemp, szTemp, _T("%s KB"), _T("%s MB"));
// wcscat(szText, szTemp);
// wcscat(szText, _T(" / "));
// nTemp = (int)nTotalNumberOfBytes.QuadPart;
// SetFormatSize(nTemp, szTemp, _T("%s KB"), _T("%s MB"));
// wcscat(szText, szTemp);
//}
///////////////////////////////////////////////////////
////ストレージカード
//TCHAR szPath[MAX_PATH] = _T("\\*.*");
//WIN32_FIND_DATA wfd;
//HANDLE hFind = FindFirstFile(szPath, &wfd);
//if (hFind != INVALID_HANDLE_VALUE) {
// do {
// if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
// (wfd.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY)) {
// wsprintf(szPath, _T("\\%s\\"), wfd.cFileName);
// if (GetDiskFreeSpaceEx(szPath, &nFreeBytesAvailableToCaller, &nTotalNumberOfBytes, &nTotalNumberOfFreeBytes)) {
// wsprintf(szTemp, _T("\r\n%s : "), wfd.cFileName);
// wcscat(szText, szTemp);
// int nTemp = (int)nTotalNumberOfFreeBytes.QuadPart;
// SetFormatSize(nTemp, szTemp, _T("%s KB"), _T("%s MB"));
// wcscat(szText, szTemp);
// wcscat(szText, _T(" / "));
// nTemp = (int)nTotalNumberOfBytes.QuadPart;
// SetFormatSize(nTemp, szTemp, _T("%s KB"), _T("%s MB"));
// wcscat(szText, szTemp);
// }
// }
// }
// while (FindNextFile(hFind, &wfd));
// FindClose(hFind);
//}
//SetWindowText(GetDlgItem(hDlg, IDC_EDIT_MEMORY), szText);
//DEL END
return TRUE;
}
case WM_COMMAND:
if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
case WM_PAINT:
return DefDlgPaintProc(hDlg, wParam, lParam);
case WM_CTLCOLORSTATIC:
return DefDlgCtlColorStaticProc(hDlg, wParam, lParam);
}
return FALSE;
}
//DEL START GORIPON
/////////////////////////////////////////////////////////////////
//DWORD GetVersion()
//{
// static DWORD ver = 0;
// if(ver == 0)
// {
// TCHAR szVer[16];
// OSVERSIONINFO osinf;
// GetVersionEx(&osinf);
// wsprintf(szVer, _T("%d%02d"), osinf.dwMajorVersion, osinf.dwMinorVersion);
// ver = wcstol(szVer, 0, 10);
// }
// return ver;
//}
//
/////////////////////////////////////////////////////////////////
//BOOL VGACheck()
//{
// static int nMode=0;
//
// if(nMode == 0 && GetVersion() >= 421)
// {
// nMode = 2;
// //VGAモードなのか判定する
// int nMenu = GetSystemMetrics(SM_CYMENU);
// int nWidth = GetSystemMetrics(SM_CXSCREEN);
// int nHeight = GetSystemMetrics(SM_CYSCREEN);
//
// if((nMenu == 52) &&
// (nWidth == 480 && nHeight == 640 ||
// nWidth == 640 && nHeight == 480))
// nMode = 1;
// }
//
// //VGAの場合
// if(nMode == 1) return TRUE;
//
// //VGA以外の場合
// return FALSE;
//}
//
//DEL END
///////////////////////////////////////////////////////////////
void CenterWindow(HWND hWnd)
{
RECT rctDesktop, rctWnd;
GetWindowRect(g_MainWnd.m_hWnd, &rctDesktop);
GetWindowRect(hWnd, &rctWnd);
int nX = ((rctDesktop.right - rctDesktop.left)-(rctWnd.right - rctWnd.left))/2;
int nY = ((rctDesktop.bottom - rctDesktop.top)-(rctWnd.bottom - rctWnd.top))/2;
if (nY < 26) nY = 26;
SetWindowPos(hWnd, HWND_TOP, nX, nY, 0, 0, SWP_NOSIZE|SWP_NOZORDER);
}
////////////////////////////////////////////////////////////////
void SetKickExt(LPTSTR lpszFileName)
{
LPTSTR lpszTemp = wcsrchr(lpszFileName, _T('.'));
if (lpszTemp)
*lpszTemp = NULL;
}
////////////////////////////////////////////////////////////////
void SetExtFromFileName(LPTSTR lpszFileName, LPTSTR lpszFileNameWithExt)
{
LPTSTR lpszTemp = wcsrchr(lpszFileNameWithExt, _T('.'));
if (lpszTemp)
wcscat(lpszFileName, lpszTemp);
}
////////////////////////////////////////////////////////////////
DWORD GetIMStatus()
{
SIPINFO si;
memset(&si, 0, sizeof(si));
si.cbSize = sizeof(si);
SIPGETINFO(&si); //MOD GORIPON
return si.fdwFlags;
}
////////////////////////////////////////////////////////////////
void SetFormatInteger(LPTSTR lpszInt, UINT nSize)
{
LPTSTR lpszTemp = new TCHAR[nSize];
memset(lpszTemp, 0, sizeof(TCHAR)*nSize);
GetNumberFormat(LOCALE_USER_DEFAULT, 0, lpszInt, NULL, lpszTemp, nSize);
memset(lpszInt, 0, sizeof(TCHAR)*nSize);
LPTSTR lpszSep = wcschr(lpszTemp, g_szDecSep[0]);
if (lpszSep)
wcsncpy(lpszInt, lpszTemp, lpszSep-lpszTemp);
else
wcscpy(lpszInt, lpszTemp);
delete[] lpszTemp;
}
////////////////////////////////////////////////////////////////
void SetFormatDouble(LPTSTR lpszDouble, UINT nSize)
{
LPTSTR lpszTemp = new TCHAR[nSize];
memset(lpszTemp, 0, sizeof(TCHAR)*nSize);
GetNumberFormat(LOCALE_USER_DEFAULT, 0, lpszDouble, NULL, lpszTemp, nSize);
memset(lpszDouble, 0, sizeof(TCHAR)*nSize);
wcscpy(lpszDouble, lpszTemp);
delete[] lpszTemp;
}
////////////////////////////////////////////////////////////////
void SetFormatDateTime(SYSTEMTIME* lpst, LPTSTR lpszBuff, UINT nSize, BOOL bToday)
{
//MOD START TODA (使用メモリ効率化/表示方法指定)
memset(lpszBuff, 0x00, sizeof(TCHAR)*nSize);
if(bToday)
{
SYSTEMTIME sys;
GetLocalTime(&sys);
//当日以外の場合は日付表示 当日の場合は時間表示
if(lpst->wYear != sys.wYear ||
lpst->wMonth != sys.wMonth ||
lpst->wDay != sys.wDay )
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, lpst, NULL, lpszBuff, nSize);
else
GetTimeFormat(LOCALE_USER_DEFAULT, 0, lpst, NULL, lpszBuff, nSize);
}
else
{
//日付/時間表示
GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, lpst, NULL, lpszBuff, nSize);
wcscat(lpszBuff, _T(" "));
GetTimeFormat(LOCALE_USER_DEFAULT, 0, lpst, NULL, (lpszBuff+wcslen(lpszBuff)), (nSize-wcslen(lpszBuff)));
}
//MOD END
}
////////////////////////////////////////////////////////////////
UINT GetFileAndFolderCountInFolder(LPTSTR lpszPath)
{
UINT nFileCount = 0;
TCHAR szTemp[MAX_PATH+4];
wsprintf(szTemp, _T("%s\\*.*"), lpszPath);
WIN32_FIND_DATA finddata;
HANDLE hFind = FindFirstFile(szTemp, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
BOOL bRet = TRUE;
do
{
if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY)
{
LPTSTR lpszChildPath = new TCHAR[wcslen(lpszPath)+wcslen(finddata.cFileName)+2];
wsprintf(lpszChildPath, _T("%s\\%s"), lpszPath, finddata.cFileName);
nFileCount += GetFileAndFolderCountInFolder(lpszChildPath);
nFileCount += 1;
delete[] lpszChildPath;
}
else
nFileCount += 1; //ファイル
}
while (FindNextFile(hFind, &finddata));
FindClose(hFind);
}
return nFileCount;
}
////////////////////////////////////////////////////////////////
UINT GetFileAndFolderCount(LPCTSTR lpszPath, LISTITEMINFO* lpliinfo, int nCount)
{
UINT nFileCount = 0;
for (int i=0; i<nCount; i++)
{
//サイズ取得、カウント開始
if (lpliinfo[i].nItem == LIST_ITEM_FOLDER)
{
TCHAR szPath[MAX_PATH];
wsprintf(szPath, _T("%s\\%s"), lpszPath, lpliinfo[i].szName);
nFileCount += GetFileAndFolderCountInFolder(szPath);
nFileCount += 1;
}
else if (lpliinfo[i].nItem == LIST_ITEM_FILE)
nFileCount += 1;
}
return nFileCount;
}
////////////////////////////////////////////////////////////////
//フォルダのリンクチェック
BOOL IsFolderShortcut(LPCTSTR lpszPath, LPCTSTR lpszFileName)
{
// TCHAR szBuf[MAX_PATH] = _T(""); //DEL TODA
TCHAR szPath[MAX_PATH] = _T("");
//MOD START TODA (wcscmp -> wcsicmp, szExt -> szBuf)
// wcscpy(szExt, lpszFileName);
// wcsupr(szExt);
LPTSTR lpszExt = wcsrchr(lpszFileName, _T('.'));
if (lpszExt != NULL)
{
if (wcsicmp(lpszExt, _T(".LNK"))==0)
{
//リンクファイルと認識
TCHAR szBuf[MAX_PATH] = _T(""); //ADD TODA
memset(szBuf, 0, sizeof(szBuf));
wsprintf(szBuf, _T("%s\\%s"), lpszPath, lpszFileName);
if (SHGetShortcutTarget(szBuf, szPath, MAX_PATH))
{
LPCTSTR lpszStart = szPath;
if (szPath[0] == _T('\"'))
{
lpszStart++;
memset(szBuf, 0, sizeof(szBuf));
LPCTSTR lpszEnd = wcsrchr(lpszStart, _T('\"'));
if (lpszEnd)
wcsncpy(szBuf, lpszStart, lpszEnd-lpszStart);
else
wcsncpy(szBuf, lpszStart, wcslen(lpszStart)-1);
}
DWORD dwAttr = GetFileAttributes(szBuf);
if ((dwAttr & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY && dwAttr != 0xFFFFFFFF)
return TRUE; //フォルダのリンクと認識
}
}
}
//MOD END
return FALSE;
}
////////////////////////////////////////////////////////////////
int CALLBACK PropSheetCallback(HWND hwndDlg, UINT message, LPARAM lParam)
{
switch(message)
{
case PSCB_INITIALIZED:
{
HWND hwndChild = GetWindow(hwndDlg, GW_CHILD);
while (hwndChild)
{
TCHAR szTemp[32];
GetClassName(hwndChild, szTemp, 32);
if (wcscmp(szTemp, _T("SysTabControl32"))==0)
break;
hwndChild = GetWindow(hwndChild, GW_HWNDNEXT);
}
if (hwndChild)
{
DWORD dwStyle = GetWindowLong(hwndChild, GWL_STYLE) | TCS_BOTTOM;
::SetWindowLong(hwndChild, GWL_STYLE, dwStyle);
}
//ADD START GORIPON
if (!g_MainWnd.m_bIsSmartphone) //Smartphone/Standardの場合はPPC2SPLIBに任せるので不要
{
//空のメニューバーを追加
SHMENUBARINFO mbi;
memset(&mbi, 0, sizeof(SHMENUBARINFO));
mbi.cbSize = sizeof(SHMENUBARINFO);
mbi.hwndParent = hwndDlg;
mbi.nToolBarId = IDR_PROPSHEET;
mbi.hInstRes = g_hInst;
mbi.nBmpId = 0;
mbi.cBmpImages = 0;
SHCREATEMENUBAR(&mbi);
}
//ADD END
break;
}
case PSCB_GETVERSION:
return COMCTL32_VERSION;
break;
default:
break;
}
return 0;
}
//////////////////////////////////////////////////////////////////////////////////////
BOOL DefDlgPaintProc(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
//MOD START GORIPON
DWORD bottom = (DWORD)(22 * g_MainWnd.m_fpHighResolutionScale);
//MOD END
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hDlg, &ps);
POINT pt[2] = {{0, bottom},{GetSystemMetrics(SM_CXSCREEN),bottom}}; //MOD TODA (24 -> bottom)
Polyline(hDC, pt, sizeof(pt)/sizeof(POINT));
EndPaint(hDlg, &ps);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
BOOL DefDlgPaintProc2(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
//MOD START GORIPON
DWORD bottom1 = (DWORD)(22 * g_MainWnd.m_fpHighResolutionScale);
DWORD bottom2 = (DWORD)(42 * g_MainWnd.m_fpHighResolutionScale);
DWORD bottom3 = (DWORD)(98 * g_MainWnd.m_fpHighResolutionScale);
//MOD END
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hDlg, &ps);
POINT pt[2] = {{0, bottom1},{GetSystemMetrics(SM_CXSCREEN),bottom1}};
Polyline(hDC, pt, sizeof(pt)/sizeof(POINT));
HPEN hPen = CreatePen(PS_SOLID, 1, RGB(192, 192, 192));
HPEN hPenOld = (HPEN)SelectObject(hDC, hPen);
int nWidth = GetSystemMetrics(SM_CXSCREEN);
pt[0].y = pt[1].y = bottom2;
Polyline(hDC, pt, sizeof(pt)/sizeof(POINT));
pt[0].y = pt[1].y = bottom3;
Polyline(hDC, pt, sizeof(pt)/sizeof(POINT));
SelectObject(hDC, hPenOld);
DeleteObject(hPen);
EndPaint(hDlg, &ps);
return TRUE;
}
//////////////////////////////////////////////////////////////////////////////////////
BOOL DefDlgCtlColorStaticProc(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
HDC hDC = (HDC)wParam;
if (GetDlgCtrlID((HWND)lParam)==IDC_TITLE ||
GetDlgCtrlID((HWND)lParam)==IDC_TITLE2 ||
GetDlgCtrlID((HWND)lParam)==IDC_TITLE3)
{
SetBkMode(hDC, TRANSPARENT);
SetTextColor(hDC, GetSysColor(COLOR_HIGHLIGHT));
return (long)GetStockObject(WHITE_BRUSH);
}
else
return FALSE;
}
//////////////////////////////////////////////////////////////////////////////////////
void SetFormatSize(DWORD dwSize, TCHAR szBuff[64], LPTSTR lpszFmtKB, LPTSTR lpszFmtMB)
{
double fSize;
TCHAR szSize[64];
if (dwSize < 1024000)
fSize = (double)dwSize/1024;
else
fSize = (double)dwSize/1048576;
wsprintf(szSize, _T("%f"), fSize);
SetFormatDouble(szSize, 64);
if (dwSize < 1024000)
wsprintf(szBuff, lpszFmtKB, szSize);
else
wsprintf(szBuff, lpszFmtMB, szSize);
}
//ADD START TODA
//////////////////////////////////////////////////////////////////////////////////////
//#define KEY_MYCOMPUTER _T("{000214A0-0000-0000-C000-000000000046}") //DEL GORIPON
LPCTSTR GetRootName()
{
//MOD START GORIPON
if (!_tcslen(g_szRootName))
_tcscpy(g_szRootName, GetStringTable(IDS_ROOT_FOLDER_NAME));
//MOD END
return g_szRootName;
}
//////////////////////////////////////////////////////////////////////////////////////
int AddRootIcon(HIMAGELIST hImageList)
{
//MOD START GORIPON (ハイレゾ対応)
int in = (g_MainWnd.m_bHighRresolutionMode || !g_MainWnd.m_bHighDpiHardware)? IDI_ROOT_S: IDI_ROOT_M;
HICON hIcon = LoadIcon(g_hInst, (LPCTSTR)in);
int nRet = ImageList_AddIcon(hImageList, hIcon);
//MOD END
DeleteObject(hIcon);
return nRet;
}
//////////////////////////////////////////////////////////////////////////////////////
HFONT MyCreateFont(int nHeight, BYTE dwCharSet, LPTSTR lpszName)
{
LOGFONT logfont;
logfont.lfHeight = nHeight; //フォント高さ
logfont.lfWidth = 0; //文字幅
logfont.lfEscapement = 0; //テキストの角度
logfont.lfOrientation = 0; //ベースラインとx軸との角度
logfont.lfWeight = FW_DONTCARE; //フォントの重さ(太さ)
logfont.lfItalic = FALSE; //イタリック体
logfont.lfUnderline = FALSE; //アンダーライン
logfont.lfStrikeOut = FALSE; //打ち消し線
logfont.lfCharSet = dwCharSet; //文字セット
logfont.lfOutPrecision = OUT_DEFAULT_PRECIS; //出力精度
logfont.lfClipPrecision = CLIP_DEFAULT_PRECIS; //クリッピング精度
logfont.lfQuality = DEFAULT_QUALITY; //出力品質
logfont.lfPitchAndFamily= DEFAULT_PITCH|FF_DONTCARE; //ピッチとファミリー
//MOD START GORIPON
if (lpszName)
wcscpy(logfont.lfFaceName, lpszName); //書体名
//MOD END
return (CreateFontIndirect(&logfont));
}
//ADD END
//ADD START TODA (ファイル変更通知 from Y.Nagamidori)
//////////////////////////////////////////////////////////////////////////////////////
BOOL g_bNotifyExit = FALSE;
BOOL g_bEnableNotify = FALSE;
HANDLE g_hNotifyThread = NULL;
HANDLE g_hUpdateNotify = INVALID_HANDLE_VALUE;
HANDLE g_hEventBreak = NULL;
DWORD g_dwNotifyThreadId = 0;
TCHAR g_szNotifyDir[MAX_PATH] = {0};
CRITICAL_SECTION g_csec;
////////////////////////////////////////////////////////////////
DWORD CALLBACK UpdateNotifyThreadProc(LPVOID pParam)
{
DWORD dwRet;
while (!g_bNotifyExit) {
EnterCriticalSection(&g_csec);
if (g_bEnableNotify) {
g_hUpdateNotify = FindFirstChangeNotification(g_szNotifyDir, FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME);
}
LeaveCriticalSection(&g_csec);
if (g_hUpdateNotify == INVALID_HANDLE_VALUE) {
WaitForSingleObject(g_hEventBreak, INFINITE);
ResetEvent(g_hEventBreak);
continue;
}
if (WaitForSingleObject(g_hEventBreak, 5000) == WAIT_OBJECT_0) {
ResetEvent(g_hEventBreak);
FindCloseChangeNotification(g_hUpdateNotify);
g_hUpdateNotify = INVALID_HANDLE_VALUE;
continue;
}
HANDLE handles[] = {g_hEventBreak, g_hUpdateNotify};
dwRet = WaitForMultipleObjects(sizeof(handles) / sizeof(HANDLE), handles, FALSE, INFINITE);
if (dwRet - WAIT_OBJECT_0 == 0)
ResetEvent(g_hEventBreak);
else {
EnterCriticalSection(&g_csec);
//if (g_bEnableNotify) {
PostMessage(g_MainWnd.m_hWnd, WM_UPDATENOTIFY, 0, 0);
//}
LeaveCriticalSection(&g_csec);
}
FindCloseChangeNotification(g_hUpdateNotify);
g_hUpdateNotify = INVALID_HANDLE_VALUE;
}
if (g_hUpdateNotify != INVALID_HANDLE_VALUE) {
FindCloseChangeNotification(g_hUpdateNotify);
g_hUpdateNotify = INVALID_HANDLE_VALUE;
}
return 0;
}
////////////////////////////////////////////////////////////////
void InitUpdateNotify()
{
InitializeCriticalSection(&g_csec);
g_hEventBreak = CreateEvent(0, TRUE, FALSE, NULL);
g_hNotifyThread = CreateThread(NULL, 0, UpdateNotifyThreadProc, NULL, 0, &g_dwNotifyThreadId);
}
////////////////////////////////////////////////////////////////
void EnableUpdateNotify()
{
MSG msg;
EnterCriticalSection(&g_csec);
g_bEnableNotify = TRUE;
while (PeekMessage(&msg, g_MainWnd.m_hWnd, WM_UPDATENOTIFY, WM_UPDATENOTIFY, PM_REMOVE));
SetEvent(g_hEventBreak);
LeaveCriticalSection(&g_csec);
}
////////////////////////////////////////////////////////////////
void DisableUpdateNotify()
{
MSG msg;
EnterCriticalSection(&g_csec);
g_bEnableNotify = FALSE;
while (PeekMessage(&msg, g_MainWnd.m_hWnd, WM_UPDATENOTIFY, WM_UPDATENOTIFY, PM_REMOVE));
SetEvent(g_hEventBreak);
LeaveCriticalSection(&g_csec);
}
////////////////////////////////////////////////////////////////
void SetUpdateNotify(LPCTSTR pszDir)
{
if (wcsicmp(pszDir, g_szNotifyDir) == 0)
return;
EnterCriticalSection(&g_csec);
wcscpy(g_szNotifyDir, pszDir);
if (!wcslen(g_szNotifyDir))
wcscpy(g_szNotifyDir, _T("\\"));
SetEvent(g_hEventBreak);
LeaveCriticalSection(&g_csec);
}
////////////////////////////////////////////////////////////////
void UninitUpdateNotify()
{
g_bNotifyExit = TRUE;
SetEvent(g_hEventBreak);
WaitForSingleObject(g_hNotifyThread, INFINITE);
DeleteCriticalSection(&g_csec);
CloseHandle(g_hEventBreak);
}
//ADD END
//ADD START GORIPON
////////////////////////////////////////////////////////////////
LPTSTR GetStringTable(int ids)
{
if (!LoadString(g_hInst, ids, s_szStrBuf, MAX_PATH*2))
wcscpy(s_szStrBuf, _T(""));
return s_szStrBuf;
}
////////////////////////////////////////////////////////////////
LPTSTR DupStringTable(int ids)
{
return _wcsdup(GetStringTable(ids));
}
////////////////////////////////////////////////////////////////
VOID FreeStringTable(LPTSTR lpszStr)
{
if (lpszStr != s_szStrBuf)
free(lpszStr);
}
//ADD END
//ADD START GORIPON
///////////////////////////////////////////////////////////////
void OnDlgPathBrowse(HWND hDlg, int nEditId, int nTitleId)
{
TCHAR szFolderTo[MAX_PATH] = _T("");
//検索場所取得
GetWindowText(GetDlgItem(hDlg, nEditId), szFolderTo, sizeof(szFolderTo));
//ディレクトリ有無確認
DWORD dwAttr = GetFileAttributes(szFolderTo);
if (!(dwAttr&FILE_ATTRIBUTE_DIRECTORY) && dwAttr != 0xFFFFFFFF)
szFolderTo[0] = _T('\0');
//フォルダ指定ダイアログオープン
CFolderDlg fd;
LPTSTR lpszTitle = DupStringTable(nTitleId);
int nRet = fd.ShowFolderDlg(lpszTitle, szFolderTo, sizeof(szFolderTo));
FreeStringTable(lpszTitle);
if (nRet == IDOK)
SetWindowText(GetDlgItem(hDlg, nEditId), szFolderTo);
SetFocus(hDlg);
}
//ADD END