/* dwmenu.c */ #include "global.h" #include #include "draw.h" #include "dwmenu.h" #include "resource.h" /* * Содержит рисунки букв латинского алфавита. * Размер одной буквы 8x14 и 26 букв в латинском алфавите. */ #define BMP_ABC_WIDTH (8 * 26) #define BMP_ABC_HEIGHT 14 static UCHAR pAbc[BMP_ABC_WIDTH*BMP_ABC_HEIGHT]; /* * Содержит рисунки цифр. * Размер одной цыфры 8x14, всего 10 цифр. */ #define BMP_DGT_WIDTH (8 * 10) #define BMP_DGT_HEIGHT 14 static UCHAR pDgt[BMP_DGT_WIDTH*BMP_DGT_HEIGHT]; /* ищет и загружает bmp-рисунок из ресурса */ static int LoadBmp(int id, UCHAR *p, int width, int height) { HRSRC hrSrc; HGLOBAL hRes; LPBITMAPFILEHEADER lpBmpFile; LPBITMAPINFOHEADER lpBmpInfo; UCHAR *lpBuff; void *lpBmp; int pitch, i; /* найдем запрашиваемый ресурс */ if ((hrSrc = FindResource(NULL,MAKEINTRESOURCE(id),_T("bmp"))) == NULL) return 0; /* загружаем ресурс в память */ if ((hRes = LoadResource(NULL,hrSrc)) == NULL) return 0; /* получим указатель на загруженный ресурс */ if ((lpBmp = LockResource(hRes)) == NULL) return 0; /* сформируем все необходимые указатели */ lpBmpFile = lpBmp; lpBmpInfo = (void *)((char *)lpBmp + sizeof(*lpBmpFile)); /* проверим запрошенные параметры */ if (lpBmpFile->bfType != 0x4d42) return 0; if ((abs(lpBmpInfo->biHeight) != height) || (lpBmpInfo->biWidth != width)) return 0; /* формируем служебные переменные */ lpBuff = (UCHAR *)lpBmp + lpBmpFile->bfOffBits; pitch = lpBmpInfo->biSizeImage / abs(lpBmpInfo->biHeight); /* выполним коррекцию если изображение строиться снизу вверх */ if (lpBmpInfo->biHeight > 0) { lpBuff += pitch * (height - 1); pitch = -pitch; } /* переносим изображение */ for (i = 0; i < height; i++) { memcpy(p,lpBuff,width); lpBuff += pitch; p += width; } return 1; } /* начальная инициализация модуля рисования игрового меню */ int InitDrawMenu(void) { /* загрузим буквы латинского алфавита */ if (!LoadBmp(IDR_BMP1,pAbc,BMP_ABC_WIDTH,BMP_ABC_HEIGHT)) return 1; /* загрузим цифры */ if (!LoadBmp(IDR_BMP2,pDgt,BMP_DGT_WIDTH,BMP_DGT_HEIGHT)) return 1; return 0; } /* деинициализация модуля рисования игрового меню */ void ReleaseDrawMenu(void) { }