⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 用EVC4.0开发的一个画图板程序
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "Draw.h"
#include <atlconv.h>  
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Array tbSTDButton contains relevant buttons of bitmap IDB_STD_SMALL_COLOR
static TBBUTTON tbButtons[] = {
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0},  
	{0,	ID_FILE_NEW,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{1, ID_FILE_OPEN,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{2, ID_FILE_SAVE,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0, -1},
	{3, ID_EDIT_CUT,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{4, ID_EDIT_COPY,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{5, ID_EDIT_PASTE,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0, -1},
	{6, ID_APP_ABOUT,	TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, -1},
	{0, 0,				TBSTATE_ENABLED, TBSTYLE_SEP,    0, 0, 0,  0}
};

char globalTEXT[1025];
//int maxX, maxY; // screen dimensions
int dothis, cbcheck, firsterase, fromlup = 0;
int retval, redraw, fixflicker, i_saveDC;
int DlgActive, redo, undo, doundoredo;
int timer = 0; // simple timer for our splash scree
const int nNumButtons = sizeof(tbButtons)/sizeof(TBBUTTON);
const int nNumImages = 7;
const DWORD dwAdornmentFlags = CMDBAR_HELP; // help and exit buttons
//CPen eraserPEN; // used for our pen
//HCURSOR hCursor; // recycled for our cursor
//CWinApp *pApp = AfxGetApp(); // to get the appname
//static char BASED_CODE szFilter[] = "Bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"; 
static CString BASED_CODE szFilter = "Bmp Files (*.bmp)|*.bmp|All Files (*.*)|*.*||"; 
static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_INDICATOR_CAPS,		// capslock indicator
	ID_INDICATOR_NUM,		// numlock indicator
	ID_INDICATOR_SCRL,		// scrolllock indicator
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_HELPINFO()
	ON_COMMAND(ID_HELP, OnHelp)
	ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILE_NEW, OnFileNew)
	ON_COMMAND(ID_FILE_MRU_FILE1, OnFileMruFile1)
	ON_COMMAND(ID_FILE_EXIT, OnFileExit)
	ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
	ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_COMMAND(ID_COLORBOX, OnColorbox)
	ON_COMMAND(ID_APP_EXIT, OnAppExit)
	ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
	ON_UPDATE_COMMAND_UI(ID_TOOL_KITS, OnUpdateToolKits)
	ON_COMMAND(ID_TEXT, OnText)
	//}}AFX_MSG_MAP
	// Global help commands
	ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame( )
{
	cbcheck=1;

}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// Add the buttons and adornments to the CommandBar.
	if (!InsertButtons(tbButtons, nNumButtons, IDR_MAINFRAME, nNumImages) ||
	    !AddAdornments(dwAdornmentFlags))
	{
		TRACE0("Failed to add toolbar buttons\n");
		return -1;
	}

	if (!m_wndStatusBar.CreateEx(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
//		MessageBox(_T("fdfdfdf"));
		TRACE0("Failed to create status bar\n");
	}
//    m_wndStatusBar.SetPaneInfo(1,ID_INDICATOR_COORDINATES,NULL,130);

	if (!m_wndPenSizeBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | (CBRS_TOP+8)
		| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndPenSizeBar.LoadToolBar(IDR_PENLINE))
	{
		TRACE0("Failed to create toolbar\n");
	}

	if (!m_wndPenFillBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP+5
		| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_GRIPPER) ||
		!m_wndPenFillBar.LoadToolBar(IDR_PENFILL))
	{
		TRACE0("Failed to create toolbar\n");
	}

    if (!m_wndBrushBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | (CBRS_BOTTOM+5)
		| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_GRIPPER) ||
		!m_wndBrushBar.LoadToolBar(IDR_BRUSHFILL))
	{
		TRACE0("Failed to create toolbar\n");
	}
	

	if (!m_wndTools.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT
		| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC | CBRS_GRIPPER) ||
		!m_wndTools.LoadToolBar(IDR_TOOLBAR))
	{
		TRACE0("Failed to create toolbar\n");
	}
	
	// Initialize toolbar's buttons
	
	// Create the rebar control and add the toolbar
	if (!m_wndReBar.Create(this) ||
//		!m_wndReBar.AddBar(&m_wndTools)||
		!m_wndReBar.AddBar(&m_wndPenFillBar)||
		!m_wndReBar.AddBar(&m_wndPenSizeBar))
	{
		TRACE0("Failed to create rebar\n");
	}

	InitToolBARS();
	// Delete this if you don't want docking enabled
	m_wndTools.EnableDocking(CBRS_ALIGN_ANY);
	m_wndBrushBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndBrushBar);
	DockControlBar(&m_wndTools);

	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

    cs.style   =   WS_MINIMIZEBOX | WS_BORDER | WS_TABSTOP  ;   
	return TRUE;
}

void CMainFrame::OnHelpInfo(HELPINFO* pHelpInfo)
{
	// TODO: implement help here
	MessageBox(_T("Help"));
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers

void CMainFrame::OnHelp() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnFileSaveAs() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnFileSave() 
{
	// TODO: Add your command handler code here
    MessageBox(_T("SaveFile"));
	CFileDialog dlg(TRUE,_T("BMP"),_T("*.BMP"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("BitMapFile(*.BMP)|*.BMP|"));
    CString strFileName;
	CString strExtension;
	if (dlg.DoModal()==IDOK)
	{
		strFileName = dlg.m_ofn.lpstrFile;
		strExtension = "bmp";
		strFileName = strFileName + '.' + strExtension;
	}
	if (dlg.DoModal()==IDCANCEL)
		return ;
	HDC hScrDC, hMemDC;         
    int width, height; 

	//the pointer will save all pixel point's color value
	BYTE *lpBitmapBits = NULL; 
        
	//creates a device context for the screen device
    hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);

	//get the screen point size
    width = GetDeviceCaps(hScrDC, HORZRES);
    height = GetDeviceCaps(hScrDC, VERTRES);

    //creates a memory device context (DC) compatible with the screen device(hScrDC) 
    hMemDC = CreateCompatibleDC(hScrDC);

	//initialise the struct BITMAPINFO for the bimap infomation, 
	//in order to use the function CreateDIBSection
	// on wince os, each pixel stored by 24 bits(biBitCount=24) 
	//and no compressing(biCompression=0) 
    BITMAPINFO RGB24BitsBITMAPINFO; 
    ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));
    RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;
    RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;
    RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;
    RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;
   
	//use the function CreateDIBSection and SelectObject 
	//in order to get the bimap pointer : lpBitmapBits 
    HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO,
		DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
	HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);

	// copy the screen dc to the memory dc
	BitBlt(hMemDC, 0, 0, width, height, hScrDC, 0, 0, SRCCOPY);

	//if you only want to get the every pixel color value, 
	//you can begin here and the following part of this function will be unuseful;
	//the following part is in order to write file; 

	//bimap file header in order to write bmp file 
	BITMAPFILEHEADER bmBITMAPFILEHEADER;
	ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
	bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp 
    bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
    bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8)

	//write into file
	FILE *mStream = NULL;
	USES_CONVERSION;   
	char   *p;   
    p=(char*)W2A((LPCTSTR)strFileName);   
	if((mStream = fopen(p, "wb")))   //filename const char *;
	{  
	//write bitmap file header
	   fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
    //write bitmap info
       fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
       //write bitmap pixels data
       fwrite(lpBitmapBits, 3*width*height, 1, mStream);
		//close file
	   fclose(mStream);	   
	}

	//delete
	DeleteObject(hMemDC);
	DeleteObject(hScrDC);
	DeleteObject(directBmp);
	DeleteObject(previousObject);

}

void CMainFrame::OnFileNew() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnFileMruFile1() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnFileExit() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnEditUndo() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnEditRedo() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnEditPaste() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnEditCut() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnEditCopy() 
{
	// TODO: Add your command handler code here
	
}

/*void CMainFrame::OnCurve() 
{
	// TODO: Add your command handler code here
	
}*/

void CMainFrame::OnColorbox() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnAppExit() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnAppAbout() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnUpdateToolKits(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	
}

void CMainFrame::InitToolBARS()
{
    m_wndTools.SetButtonInfo( 0, ID_line, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 0 );
	m_wndTools.SetButtonInfo( 1, ID_HOLLOW_RECT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 1 );
	m_wndTools.SetButtonInfo( 2, ID_FILL_RECT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 2 );
	m_wndTools.SetButtonInfo( 3, IDM_HALLOW_ROUNDRECT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 3 );
	m_wndTools.SetButtonInfo( 4, ID_FILL_ROUNDRECT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 4 );
	m_wndTools.SetButtonInfo( 5, ID_HOLLOW_CIRCLE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 5 );
	m_wndTools.SetButtonInfo( 6, ID_FILL_CIRCLE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 6 );
    m_wndTools.SetButtonInfo( 7, ID_CURVE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 7 );
	m_wndTools.SetButtonInfo( 8, ID_TEXT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 8 );
	m_wndTools.SetButtonInfo( 9, ID_ERASER, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 9 );
	m_wndTools.SetButtonInfo( 10, ID_Reset, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 10 );
/*	m_wndTools.SetButtonInfo( 13, IDM_ERASER, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 13 );
	m_wndTools.SetButtonInfo( 14, IDM_FILL, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 14 );
	m_wndTools.SetButtonInfo( 15, IDM_TEXT, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 15 );*/
	m_wndTools.SetWindowText(_T("Tools"));

	// Button info for Brush Bar
	m_wndBrushBar.SetButtonInfo( 0, IDM_WHITEBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 0 );
	m_wndBrushBar.SetButtonInfo( 1, IDM_REDBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 1 );
	m_wndBrushBar.SetButtonInfo( 2, IDM_GREENBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 2 );
	m_wndBrushBar.SetButtonInfo( 3, IDM_BLUEBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 3 );
	m_wndBrushBar.SetButtonInfo( 4, IDM_YELLOWBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 4 );
	m_wndBrushBar.SetButtonInfo( 5, IDM_BLACKBRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 5 );
	m_wndBrushBar.SetButtonInfo( 6, IDM_CUSTOM_BRUSH, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 6 );
	m_wndBrushBar.SetWindowText(_T("Background Colours"));

	// Button info for Pen Size Bar
	m_wndPenSizeBar.SetButtonInfo( 0, IDM_ONE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 0 );
	m_wndPenSizeBar.SetButtonInfo( 1, IDM_TWO, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 1 );
	m_wndPenSizeBar.SetButtonInfo( 2, IDM_THREE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 2 );
	m_wndPenSizeBar.SetButtonInfo( 3, IDM_CUSTOM_SIZE, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 3 );
	m_wndPenSizeBar.SetWindowText(_T("Pen Sizes"));

	// Button info for Pen Fill Bar
	m_wndPenFillBar.SetButtonInfo( 0, IDM_REDPEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 0 );
	m_wndPenFillBar.SetButtonInfo( 1, IDM_GREENPEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 1 );
	m_wndPenFillBar.SetButtonInfo( 2, IDM_BLUEPEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 2 );
	m_wndPenFillBar.SetButtonInfo( 3, IDM_YELLOWPEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 3 );
	m_wndPenFillBar.SetButtonInfo( 4, IDM_BLACKPEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 4 );
	m_wndPenFillBar.SetButtonInfo( 5, IDM_CUSTOM_PEN, TBBS_CHECKBOX|TBBS_CHECKGROUP     , 5 );
	m_wndPenFillBar.SetWindowText(_T("Pen Colours"));
}

/*void CMainFrame::OnHallowRoundrect() 
{
	// TODO: Add your command handler code here
	m_var=3;
}*/

void CMainFrame::OnText() 
{
	// TODO: Add your command handler code here
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -