Index: /ProjectEditor/IconEditor.cpp
===================================================================
--- /ProjectEditor/IconEditor.cpp	(revision 20)
+++ /ProjectEditor/IconEditor.cpp	(revision 21)
@@ -275,5 +275,5 @@
 		}
 		i=GetFileSize(hFile,NULL);
-		buffer=(char *)GlobalAlloc(GMEM_FIXED,i+1);
+		buffer=(char *)HeapAlloc(hHeap,0,i+1);
 		ReadFile(hFile,buffer,i,&dw,NULL);
 		CloseHandle(hFile);
@@ -283,4 +283,5 @@
 		pIconDir=(ICONDIR *)buffer;
 		IconNum=pIconDir->idCount;
+		bool FileOk = true;
 		for(i=0;i<IconNum;i++){
 			pIconDirEntry=(ICONDIRENTRY *)(buffer+sizeof(ICONDIR)+sizeof(ICONDIRENTRY)*i);
@@ -290,4 +291,12 @@
 
 			dwBytesInRes[i]=pIconDirEntry->dwBytesInRes;
+
+			//対応チェック
+			BITMAPINFOHEADER *pBmpInfoHdr=(BITMAPINFOHEADER *)pImageBuffer[i];
+			if( !(pBmpInfoHdr->biBitCount == 4 || pBmpInfoHdr->biBitCount == 8 ) ){
+				//16色、256色以外の場合
+				//未対応
+				FileOk = false;
+			}
 		}
 
@@ -295,4 +304,17 @@
 		lstrcat(str,str2);
 		mdic.szTitle=str;
+
+		HeapDefaultFree(buffer);
+
+		if( !FileOk ){
+			for(i=0;i<IconNum;i++){
+				HeapDefaultFree( pImageBuffer[i] );
+			}
+
+			char msg[1024];
+			sprintf( msg, "\"%s\"\n\n16色または256色以外の形式のファイルには対応していません。", filepath );
+			MessageBox( hOwner, msg, "ActiveBasic", MB_OK | MB_ICONEXCLAMATION );
+			return;
+		}
 	}
 	else{
Index: /ProjectEditor/IconEditor_Main.cpp
===================================================================
--- /ProjectEditor/IconEditor_Main.cpp	(revision 20)
+++ /ProjectEditor/IconEditor_Main.cpp	(revision 21)
@@ -309,4 +309,10 @@
 	pBmpInfoHdr=(BITMAPINFOHEADER *)MdiInfo[WndNum].MdiIconEditInfo->pIconImage[MdiInfo[WndNum].MdiIconEditInfo->SelectIconNum];
 
+	if( !(pBmpInfoHdr->biBitCount == 4 || pBmpInfoHdr->biBitCount == 8 ) ){
+		//16色、256色以外の場合
+		//未対応
+		return;
+	}
+
 	hPen=CreatePen(PS_SOLID,0,RGB(200,200,200));
 	hOldPen=(HPEN)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hPen);
@@ -362,16 +368,18 @@
 			////////////////
 			// 通常ピクセル
-			switch(pBmpInfoHdr->biBitCount){
-				case 4:		//16色
-					i2=*(pBuffer+i/2);
-					if(i%2==0) i2>>=4;
-					i2&=0x0F;
-					ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
-					break;
-				case 8:		//256色
-					i2=pBuffer[i];
-					ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
-					break;
-			}
+			if( pBmpInfoHdr->biBitCount == 4 ){
+				//16色
+				i2=*(pBuffer+i/2);
+				if(i%2==0) i2>>=4;
+				i2&=0x0F;
+				ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+			}
+			else if( pBmpInfoHdr->biBitCount == 8 ){
+				//256色
+				i2=pBuffer[i];
+				ColorRef=RGB(pRgbq[i2].rgbRed,pRgbq[i2].rgbGreen,pRgbq[i2].rgbBlue);
+				break;
+			}
+
 			hBrush=CreateSolidBrush(ColorRef);
 			hOldBrush=(HBRUSH)SelectObject(MdiInfo[WndNum].MdiIconEditInfo->memdc,hBrush);
