//========================================================================
//   Програма вывода 256 цветной картинки формата BMP на экран
//   С помощью GDI
//   Картинка BMP содержится в файле ресурса
//   Так что не смотрите что exe файл большой
//   Автор: AndreyCh
//   E-mail: sofandr@mail.ru
//   homepage: http://pascal.vov.ru
//   Версия: 0.0b
//   Компилятор: SPHINX C-- Compiler   Version 0.239 b9   Aug 21 2003
//   Редактор: The FAR manager, version 1.70 beta 3 (build 591)
//   Plugin: Colorer Library '4ever', Cail Lomecb (Игорь Русских)
//
//========================================================================
#jumptomain NONE
#pragma option w32     // сообщаем компилятору, что нужно собрать программу
                       // под Windows
#include "Windows.h--" // включаем заголовочный файл Windows
#include "wingdi.h--"  // подключаем GDI
#include <winbase.h-->
#include "bitmap32.rc" // включение файла ресурса

//Глобальные переменные
//-----------------------
char classTitle="bitmap32";
struct MSG message;
dword WND;
dword hInst;
dword hBitmap;
HDC hdc;

#define _Width_SCR_   200 // Ширина окна
#define _Height_SCR_  128+26 // Высота окна


//Основная программа --------------------------------------------------------
void main()
{
  WND=CreateWindow();

	WHILE(GetMessage(#message,NULL,0,0)){
		TranslateMessage(#message);
		DispatchMessage(#message);
	}

        ExitProcess(message.wParam);

}






//Основная Windows процедура
dword   WndProc(dword hwnd,msg,wPar,lPar)
PAINTSTRUCT ps;
HDC hMemDC;
RECT rect;
{
        switch(msg){

               case WM_CREATE:
                    LoadBitmap(hInst,IDB_MAIN); //Функция возвращает указатель
                    hBitmap=EAX;                //на битмап прилинкованного
                    EAX=0;                      //ресурса
                    break;

               CASE WM_PAINT:

                    hdc=BeginPaint(hwnd,#ps);

                    hMemDC=CreateCompatibleDC(hdc);
                    SelectObject(hMemDC,hBitmap);
                    GetClientRect(hwnd,#rect);
                    BitBlt(hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);
                    DeleteDC(hMemDC);

                    EndPaint(hwnd,#ps);

                    EAX=0;
                    BREAK;

               case WM_DESTROY:
                        PostQuitMessage(0);
                        EAX=0;
                        BREAK;

               case WM_SIZE:
                       EAX=0;
                       BREAK;
               default:
                        DefWindowProcA(hwnd,msg,wPar,lPar);
        }


}


//Подпрограмма создания окна
DWORD CreateWindow(void)  //Create a window and return hWnd
struct WNDCLASSEX wc;
{


        hInst=GetModuleHandleA(0);
        wc.cbSize=sizeof(wc);
        wc.style=CS_HREDRAW|CS_VREDRAW;
        wc.lpfnWndProc=#WndProc;
        wc.cbWndExtra=0;
        wc.cbClsExtra=0;
        wc.hInstance=hInst;
        wc.hIcon=LoadIconA(hInst, IDI_ICON1);
        wc.hCursor=LoadCursor(NULL,IDC_ARROW);
        wc.hbrBackground=COLOR_WINDOW;
        wc.lpszMenuName=0;
        wc.lpszClassName=#classTitle;
        wc.hIconSm=0;
        RegisterClassExA(#wc);         //зарегистрируем класс окна
                                       // и создадим окно
        WND=CreateWindowExA(0,
                            #classTitle,
                            "View BMP v0.00b",
                            WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,
                            0,0,
                            _Width_SCR_, _Height_SCR_,
                            0,0,
                            hInst,
                            0);


        ShowWindow(EAX,SW_SHOWNORMAL); //show window
        UpdateWindow(EAX);             //redraw window

        return WND;
}
	       		
