////////////////////////////
//BMPViewerのUser.hファイル
////////////////////////////
/////////////////
//グローバル変数
/////////////////
CBMP g_Bmp;					//チェックするビットマップのCBMP変数
char* g_FileName = NULL;	//読みこむ際のファイル名
bool g_Flag = FALSE;		//ビットマップ情報ダイアログコントロールの有効フラグ

////////////////////////////////////////
//ビットマップ情報の確認･検証ダイアログ
////////////////////////////////////////
void HowtoReadBitmapInfo(char* szFileName, long wx, long wy,
							WORD wBitCount, DWORD dwSizeImage, DWORD dwOffBits,
							long wx2, long wy2, WORD wBitsPixel) {

	char str[MAX_PATH * 4];
	wsprintf(str,
		"ビットマップファイル情報（ファイル名：%s）\r\n"
		"BMP幅 = %d, BMP高さ = %d\r\n"
		"カラービット(biBitCount) = %d\r\n"
		"（色数 %d = 2 ^ (カラービット x プレーン数(1)になりますが24bitの場合は0です）\r\n"
		"biSizeImage = %d, biOffBits = %d\r\n\r\n"
		"<bOffBitsの計算>\r\n"
		"BITMAPFILEHEADER構造体 = 14バイト\r\n"
		"BITMAPINFOHEADER構造体 = 40バイト\r\n"
		"RGBQUAD構造体配列 = 4バイト x 色数（24ビットフルカラーでは0）\r\n"
		"bOffBits %d\t= 14 + 40 + 4 x 色数\r\n"
		"\t\t= 14 + 40 + 4 x %d\r\n\r\n"
		"<biSizeImageの計算>\r\n"
		"(BMP幅 x biBitCount / 8)を4の倍数に繰り上げ x BMP高さ\r\n"
		"(BMP幅 x biBitCount / 8)の繰上4の倍数 = %d\r\n"
		"%d x BMP高さ(%d) = %d\r\n"
		"--------------------------------------------------\r\n"
		"ビットマップ情報（GetObject()関数でDDB情報を取得）\r\n"
		"BMP幅 = %d, BMP高さ = %d\r\n"
		"カラービット(bmBitsPixel) = %d\r\n",
		szFileName,
		wx, wy,
		wBitCount, (1 << wBitCount * 1),
		dwSizeImage, dwOffBits,
		14 + 40 + 4 * ((wBitCount > 8) ? 0 : (1 << (wBitCount * 1))), (wBitCount > 8) ? 0 : (1 << (wBitCount * 1)),
		((wx * wBitCount + 31) & ~31) / 8,
		((wx * wBitCount + 31) & ~31) / 8,
		wy,
		(((wx * wBitCount + 31) & ~31) / 8) * wy,
		wx2, wy2, wBitsPixel);
	MessageBox(NULL, str, "BITMAP情報の読み方と検証", MB_OK);
}

/////////////////////////////////////////////////
//ビットマップ情報ダイアログコントロールの初期化
/////////////////////////////////////////////////
void EnableAllControls(bool flag) {

	//最初と最後のコントロールID
	for(int i = IDC_BMTYPE; i < IDC_CLRBIT; i++)
		bmpinfodlg.SendItemMsg(i, EM_SETREADONLY, TRUE, 0);
	bmpinfodlg.SendItemMsg(IDC_CLRBIT, EM_SETREADONLY, flag, 0);
	//データの設定
	CSTR str;
	str = g_Bmp.m_Bmp.bmType;
	bmpinfodlg.SendItemMsg(IDC_BMTYPE, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_Bmp.bmWidth;
	bmpinfodlg.SendItemMsg(IDC_BMWIDTH, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_Bmp.bmHeight;
	bmpinfodlg.SendItemMsg(IDC_BMHEIGHT, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_Bmp.bmWidthBytes;
	bmpinfodlg.SendItemMsg(IDC_BMWIDTHBYTES, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_Bmp.bmPlanes;
	bmpinfodlg.SendItemMsg(IDC_BMPLANES, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_Bmp.bmBitsPixel;
	bmpinfodlg.SendItemMsg(IDC_BMBITSPIXEL, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = (long)g_Bmp.m_Bmp.bmBits;
	bmpinfodlg.SendItemMsg(IDC_BMBITS, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	//
	str = "        ";
	wsprintf(str.ToChar(), "0x%4X", g_Bmp.m_PBmf->bfType);
//	str = g_Bmp.m_PBmf->bfType;
	bmpinfodlg.SendItemMsg(IDC_BFTYPE, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_PBmf->bfSize;
	bmpinfodlg.SendItemMsg(IDC_BFSIZE, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_PBmf->bfReserved1;
	bmpinfodlg.SendItemMsg(IDC_BFRESERVED1, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_PBmf->bfReserved2;
	bmpinfodlg.SendItemMsg(IDC_BFRESERVED2, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = g_Bmp.m_PBmf->bfOffBits;
	bmpinfodlg.SendItemMsg(IDC_BFOFFBITS, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	//
	PBITMAPINFOHEADER pbih = (PBITMAPINFOHEADER)g_Bmp.m_PBmi;
	str = pbih->biSize;
	bmpinfodlg.SendItemMsg(IDC_BISIZE, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biWidth;
	bmpinfodlg.SendItemMsg(IDC_BIWIDTH, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biHeight;
	bmpinfodlg.SendItemMsg(IDC_BIHEIGHT, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biPlanes;
	bmpinfodlg.SendItemMsg(IDC_BIPLANES, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biBitCount;
	bmpinfodlg.SendItemMsg(IDC_BIBITCOUNT, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biCompression;
	bmpinfodlg.SendItemMsg(IDC_BICOMPRESSION, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biSizeImage;
	bmpinfodlg.SendItemMsg(IDC_BISIZEIMAGE, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biXPelsPerMeter;
	bmpinfodlg.SendItemMsg(IDC_BIXPELSPM, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biYPelsPerMeter;
	bmpinfodlg.SendItemMsg(IDC_BIYPELSPM, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biClrUsed;
	bmpinfodlg.SendItemMsg(IDC_BICLRUSED, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	str = pbih->biClrImportant;
	bmpinfodlg.SendItemMsg(IDC_BICLRIMPT, WM_SETTEXT, 0, (LPARAM)str.ToChar());
	//
	str = g_Bmp.CBits();
	bmpinfodlg.SendItemMsg(IDC_CLRBIT, WM_SETTEXT, 0, (LPARAM)str.ToChar());
}
