• R/O
  • SSH
  • HTTPS

gsfinder-w03:


File Info

Rev. 61
Size 51,543 bytes
Time 2008-05-24 06:15:53
Author goriponsoft
Log Message

・コンテキストメニューが開いた時点で「範囲選択」「複数選択」が解除されるように変更
・アドレスバーでEM・ONEのスクロールホイールが上下カーソルキー相当で動作するように修正
・アドレスバーのプルダウンリストの余計な開閉を抑制するよう修正
・アドレスバーへのパス入力時に行われていた不要なファイル/フォルダ表示の更新を削減
・Smartphone/Standardで編集メニューの「複数選択」が使えなかったのを修正
・アドレスバーでもタップ&ホールドおよびプレス&ホールドが使えるように修正
・使用されていなかった不要コード(PCリンク呼び出し)を削除
・メニューの数字ショートカットキーをSmartphone/Standardに近くなるように変更
・PPC2SPLIBをPartIII/1月12日版にに更新
・ファイルメニューの「新規フォルダ作成」に換えて「新規作成」メニューを新設
・アドレスバーに入力したパス文字列の大小文字が実際のパスと違っていた場合にフォルダ表示が更新されなかったのを修正
・「お気に入りに追加」を行うと追加した項目に"~へのショートカット"が付く場合があったのを修正
・フォルダ表示から「お気に入りに追加」を行った場合にメニューへの反映が行われていなかったのを修正
・ファイル表示でのメニューの有効無効を切り替える処理を簡略化
・フォルダ表示で「すべて選択」が動作していなかったのを修正
・オプション画面のフォルダ指定にフォルダの参照ボタンを追加

Content

// 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
Show on old repository browser