Index: branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.cpp	(revision 786)
@@ -1,19 +1,55 @@
 #include "stdafx.h"
+#include <map>
+#include <tuple>
+#include <Resource/Load.h>
 
 namespace ActiveBasic { namespace Resource {
 
+namespace {
+
+template<typename Map, typename Key, typename AddValueFunctor>
+typename Map::iterator GetCacheFromMap(Map& map, Key key, AddValueFunctor f)
+{
+	auto low = map.lower_bound(key);
+	if (low != map.end() && map.key_comp()(key, low->first))
+	{
+		return low;
+	}
+	else
+	{
+		typedef typename Map::key_type key_type;
+		typedef typename Map::value_type value_type;
+		return map.insert(low, std::make_pair(std::move(key), f()));
+	}
+}
+
+HICON LoadIconCursorImpl(HINSTANCE hinst, USHORT id, int cxDesired, int cyDesired, UINT load, bool isIcon)
+{
+	auto hrsrc = FindResource(hinst, MAKEINTRESOURCE(id), isIcon ? RT_GROUP_ICON : RT_GROUP_CURSOR);
+	auto pResource = LockResource(LoadResource(hinst, hrsrc));
+
+	auto idIcon = LookupIconIdFromDirectoryEx(reinterpret_cast<PBYTE>(pResource), isIcon, cxDesired, cyDesired, load);
+	auto hrsrcIcon = FindResource(hinst, MAKEINTRESOURCE(idIcon), isIcon ? RT_ICON : RT_CURSOR);
+	auto pResourceIcon = LockResource(LoadResource(hinst, hrsrcIcon));
+
+	return CreateIconFromResourceEx(reinterpret_cast<PBYTE>(pResourceIcon),
+		SizeofResource(hinst, hrsrcIcon), isIcon, 0x00030000, cxDesired, cyDesired, load);
+}
+
+}
+
 HICON LoadIcon(HINSTANCE hinst, USHORT id, int cxDesired, int cyDesired, UINT load)
 {
-	auto hrsrc = FindResource(hinst, MAKEINTRESOURCE(id), RT_GROUP_ICON);
-	auto hMem = LoadResource(hinst, hrsrc);
-	auto pResource = LockResource(hMem);
+	return LoadIconCursorImpl(hinst, id, cxDesired, cyDesired, load, true);
+}
 
-	auto idIcon = LookupIconIdFromDirectoryEx(reinterpret_cast<PBYTE>(pResource), TRUE, cxDesired, cyDesired, load);
-	auto hrsrcIcon = FindResource(hinst, MAKEINTRESOURCE(idIcon), MAKEINTRESOURCE(RT_ICON));
-	auto hIconMem = LoadResource(hinst, hrsrcIcon);
-	auto pResourceIcon = LockResource(hIconMem);
+HICON LoadIcon(HINSTANCE hinst, USHORT id)
+{
+	return LoadIconCursorImpl(hinst, id, 32, 32, LR_SHARED, true);
+}
 
-	return CreateIconFromResourceEx(reinterpret_cast<PBYTE>(pResourceIcon),
-		SizeofResource(hinst, hrsrcIcon), TRUE, 0x00030000, cxDesired, cyDesired, load);
+HCURSOR LoadCursor(HINSTANCE hinst, USHORT id)
+{
+	return LoadIconCursorImpl(hinst, id, 32, 32, LR_SHARED, false);
 }
 
Index: branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h
===================================================================
--- branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev-impl/Resource/Load.h	(revision 786)
@@ -7,4 +7,7 @@
 
 HICON LoadIcon(HINSTANCE hinst, USHORT id, int cxDesired, int cyDesired, UINT load = 0);
+HICON LoadIcon(HINSTANCE hinst, USHORT id);
+
+HCURSOR LoadCursor(HINSTANCE hinst, USHORT id);
 
 struct IconDeleter
Index: branches/egtra/ab5.0/abdev/abdev/Complement.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/Complement.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/Complement.cpp	(revision 786)
@@ -754,11 +754,11 @@
 			hImageList=ImageList_Create(16, 16, ILC_COLOR24, 7, 0);
 			ListView_SetImageList(hListView, hImageList, LVSIL_SMALL);
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_PAIRSTATEMENT)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_HTML_GENERAL_PARAMETER)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_HTML_PARAMETER)));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PRIVATE_VARIABLE));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PUBLIC_VARIABLE));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PRIVATE_FUNCTION));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PUBLIC_FUNCTION));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_PAIRSTATEMENT));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_HTML_GENERAL_PARAMETER));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_HTML_PARAMETER));
 
 			return 0;
Index: branches/egtra/ab5.0/abdev/abdev/DialogBoxes.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/DialogBoxes.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/DialogBoxes.cpp	(revision 786)
@@ -630,8 +630,8 @@
 			ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_BAS)));
 			ImageList_AddIcon(hImageList, LoadIcon(hInst, MAKEINTRESOURCE(IDI_FILE_SBP)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_PJ)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_TEXT)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_HTML)));
-			ImageList_AddIcon(hImageList, LoadIcon(hResInst, MAKEINTRESOURCE(IDI_NEWFILE_ICON)));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_NEWFILE_PJ));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_NEWFILE_TEXT));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_NEWFILE_HTML));
+			ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_NEWFILE_ICON));
 
 
Index: branches/egtra/ab5.0/abdev/abdev/FileTree.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/FileTree.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/FileTree.cpp	(revision 786)
@@ -160,7 +160,7 @@
 	//イメージリスト読み込み、設定
 	hImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
-	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
-	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
-	ImageList_AddIcon(hImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT)));
+	ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_CLOSE));
+	ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_OPEN));
+	ImageList_AddIcon(hImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_TEXTDOCUMENT));
 	this->SetImageList(hImageList,TVSIL_NORMAL);
 }
Index: branches/egtra/ab5.0/abdev/abdev/IconEditor_Main.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/IconEditor_Main.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/IconEditor_Main.cpp	(revision 786)
@@ -1199,5 +1199,5 @@
 				InvalidateRect(hwnd,NULL,0);
 
-				SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_PEN)));
+				SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_PEN));
 			}
 			else if(MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_FILL){
@@ -1214,5 +1214,5 @@
 					InvalidateRect(hwnd,NULL,0);
 				}
-				SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_FILL)));
+				SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_FILL));
 			}
 			else if(MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_LINE||
@@ -1496,7 +1496,7 @@
 				}
 				else if(MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_PEN)
-					SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_PEN)));
+					SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_PEN));
 				else if(MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_FILL)
-					SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_FILL)));
+					SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_FILL));
 				else if(MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_LINE||
 					MdiInfo[WndNum]->MdiIconEditInfo->NowTool==IDC_TOOL_RECTANGLE||
Index: branches/egtra/ab5.0/abdev/abdev/Print.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/Print.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/Print.cpp	(revision 786)
@@ -421,7 +421,7 @@
 			//拡大・縮小アイコンを表示
 			SendDlgItemMessage(hwnd,IDC_ZOOMOUT,BM_SETIMAGE,IMAGE_ICON ,
-				(LPARAM)LoadImage(hResInst,MAKEINTRESOURCE(IDI_ZOOMOUT),IMAGE_ICON,16,16,LR_SHARED));
+				reinterpret_cast<LPARAM>(ActiveBasic::Resource::LoadIcon(hResInst, IDI_ZOOMOUT, 16, 16, LR_SHARED)));
 			SendDlgItemMessage(hwnd,IDC_ZOOMIN,BM_SETIMAGE,IMAGE_ICON ,
-				(LPARAM)LoadImage(hResInst,MAKEINTRESOURCE(IDI_ZOOMIN),IMAGE_ICON,16,16,LR_SHARED));
+				reinterpret_cast<LPARAM>(ActiveBasic::Resource::LoadIcon(hResInst, IDI_ZOOMIN, 16, 16, LR_SHARED)));
 			iZoomNowPage=ZOOM_INIT;
 
Index: branches/egtra/ab5.0/abdev/abdev/ProjectControl.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/ProjectControl.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/ProjectControl.cpp	(revision 786)
@@ -466,12 +466,12 @@
 			//イメージリスト読み込み、設定
 			hProcedureTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,8,0);
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROCEDURE)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_PROGRAM_FOLDER)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_VARIABLE)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PUBLIC_FUNCTION)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_VARIABLE)));
-			ImageList_AddIcon(hProcedureTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MEMBER_PRIVATE_FUNCTION)));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_CLOSE));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_OPEN));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_PROCEDURE));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_PROGRAM_FOLDER));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PUBLIC_VARIABLE));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PUBLIC_FUNCTION));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PRIVATE_VARIABLE));
+			ImageList_AddIcon(hProcedureTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MEMBER_PRIVATE_FUNCTION));
 			TreeView_SetImageList(hProcedureTreeView,hProcedureTreeViewImageList,TVSIL_NORMAL);
 
@@ -485,11 +485,11 @@
 			//イメージリスト読み込み、設定
 			hMaterialTreeViewImageList=ImageList_Create(16,16,ILC_COLOR24|ILC_MASK,3,0);
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_CLOSE)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FOLDER_OPEN)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_WINDOW)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_MENU)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_ICON)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_BMP)));
-			ImageList_AddIcon(hMaterialTreeViewImageList,LoadIcon(hResInst,MAKEINTRESOURCE(IDI_FILE_CURSOR)));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_CLOSE));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FOLDER_OPEN));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_WINDOW));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_MENU));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FILE_ICON));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FILE_BMP));
+			ImageList_AddIcon(hMaterialTreeViewImageList, ActiveBasic::Resource::LoadIcon(hResInst, IDI_FILE_CURSOR));
 			TreeView_SetImageList(hMaterialTreeView,hMaterialTreeViewImageList,TVSIL_NORMAL);
 
Index: branches/egtra/ab5.0/abdev/abdev/SubOperation.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/SubOperation.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/SubOperation.cpp	(revision 786)
@@ -838,7 +838,7 @@
 	extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
 	hOwnerIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
-	hBasicProgramIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_BASICPROGRAM),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
-	hTextDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
-	hWindowDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_WINDOW),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
+	hBasicProgramIcon=ActiveBasic::Resource::LoadIcon(hResInst, IDI_BASICPROGRAM, 16, 16, LR_DEFAULTCOLOR);
+	hTextDocumentIcon=ActiveBasic::Resource::LoadIcon(hResInst,IDI_TEXTDOCUMENT,16,16,LR_DEFAULTCOLOR);
+	hWindowDocumentIcon=ActiveBasic::Resource::LoadIcon(hResInst,IDI_WINDOW,16,16,LR_DEFAULTCOLOR);
 
 
Index: branches/egtra/ab5.0/abdev/abdev/TextEditor_MouseEvent.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/TextEditor_MouseEvent.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/TextEditor_MouseEvent.cpp	(revision 786)
@@ -69,5 +69,5 @@
 
 		//カーソルを矢印マークにする
-		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+		SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_ARROW_TO_RIGHT));
 
 		GetNaturalCaretPos_Click(WndNum,
@@ -129,5 +129,5 @@
 
 		//カーソルを矢印マークにする
-		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+		SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_ARROW_TO_RIGHT));
 	}
 
@@ -255,5 +255,5 @@
 
 			//カーソルを矢印マークにする
-			SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+			SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_ARROW_TO_RIGHT));
 
 			return;
@@ -321,5 +321,5 @@
 
 		//カーソルを矢印マーク（デフォルト）にする
-		SetCursor(LoadCursor(hResInst,MAKEINTRESOURCE(IDC_CURSOR_ARROW_TO_RIGHT)));
+		SetCursor(ActiveBasic::Resource::LoadCursor(hResInst, IDC_CURSOR_ARROW_TO_RIGHT));
 
 		return;
Index: branches/egtra/ab5.0/abdev/abdev/abdev.cpp
===================================================================
--- branches/egtra/ab5.0/abdev/abdev/abdev.cpp	(revision 785)
+++ branches/egtra/ab5.0/abdev/abdev/abdev.cpp	(revision 786)
@@ -914,6 +914,11 @@
 	SHFILEINFO shfi;
 	if(filepath)
+	{
 		SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
-	else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
+	}
+	else
+	{
+		shfi.hIcon = ActiveBasic::Resource::LoadIcon(hResInst, IDI_TEXTDOCUMENT, 16, 16, LR_DEFAULTCOLOR);
+	}
 	mdic.lParam=(LPARAM)shfi.hIcon;
 
