
#pragma once
#include "base_head.h"
//bmp para pintar graficos antes de pintarlos en pantalla
//asi se evita el parpadeo
class UTILES_EXPORT Cbmp_control//falta revisar
{
    public:
	//variables-------------------------------------
	BYTE* bits;//bits del bmp
	int ancho;//ancho en pixel del bmp
	int alto;//alto en pixel del bmp
	BITMAPINFO* bmp_info;
	HDC m_hdc;
	CDC *m_cdc;
	HBITMAP m_bitmap, m_old_bitmap;
	BOOL m_iniciado;
	//c y de------------------------------------------
	Cbmp_control(int cx, int cy);
	~Cbmp_control();
	//funciones---------------------------------------
	void pinta_dib(HDC dc, CRect r);//pinta lo dibujado en el bmp en el hdc pasado
	BOOL dib2file(char *path);//guarda el bmp en un archivo
	BOOL w2dib( CWnd *w,  CRect *rec=NULL, DWORD flags=PRF_CLIENT);//copia la pantalla al bmp
	void redimensiona(int cx, int cy, BOOL limpiar=TRUE, char ch=0);//redimensiona el bmp
	void crea(BOOL limpiar=TRUE, char ch=0);//crea bmp
	void destruye();//destrulle bmp

	HDC dame_hdc();//da el hanled para pintar
	CDC* dame_cdc();

	static BOOL w2file(CWnd *w,char* path, CRect *rec=NULL);//pasa lo contenido en la ventana a un archivo de imagen

	BYTE* dame_bits(){return bits;};
	int dame_ancho(){return ancho;};
	int dame_alto(){return alto;};

	
	//BOOL guardar_bmp(char *path);
	void escribe_pixel(int x, int y, BYTE valor);
	void colorea_pixel(int x, int y, BYTE valor);
	void pinta_cruz(int x, int y, int ancho, BYTE color);

	void rellena_bits(char ch=0);
	void pon_bits(LPVOID src, int count);

	void mueve_datos(int cx, int cy);
	BOOL esta_iniciado(){return m_iniciado;};
	void pon_iniciado(BOOL flag){m_iniciado=flag;};

public:
	

	
};

/*void CCatchScreenDlg::SaveScreenToFile(LPCTSTR szFileName)
{
HDC hScrDC = ::GetDC(NULL);
HDC hMemDC = NULL;

BYTE *lpBitmapBits = NULL; 

int nWidth = GetSystemMetrics(SM_CXSCREEN);
int nHeight = GetSystemMetrics(SM_CYSCREEN); 

hMemDC = ::CreateCompatibleDC(hScrDC); 

BITMAPINFO bi; 
ZeroMemory(&bi, sizeof(BITMAPINFO));
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biWidth = nWidth;
bi.bmiHeader.biHeight = nHeight;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biBitCount = 24;

HBITMAP bitmap = ::CreateDIBSection(hMemDC, &bi, DIB_RGB_COLORS, (LPVOID*)&lpBitmapBits, NULL, 0);
HGDIOBJ oldbmp = ::SelectObject(hMemDC, bitmap); 

::BitBlt(hMemDC, 0, 0, nWidth, nHeight, hScrDC, 0, 0, SRCCOPY);

BITMAPFILEHEADER bh;
ZeroMemory(&bh, sizeof(BITMAPFILEHEADER));
bh.bfType = 0x4d42; //bitmap 
bh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bh.bfSize = bh.bfOffBits + ((nWidth*nHeight)*3);

CFile file;
if(file.Open(szFileName, CFile::modeCreate | CFile::modeWrite))
{ 
file.Write(&bh, sizeof(BITMAPFILEHEADER));
file.Write(&(bi.bmiHeader), sizeof(BITMAPINFOHEADER));
file.Write(lpBitmapBits, 3 * nWidth * nHeight);
file.Close();
}

::SelectObject(hMemDC, oldbmp);
::DeleteObject(bitmap);
::DeleteObject(hMemDC);
::ReleaseDC(NULL, hScrDC);
}
*/