102 lines
2.9 KiB
C++
102 lines
2.9 KiB
C++
|
|
#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);
|
|
}
|
|
*/ |