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

📄 download2440dlg.cpp

📁 SMDK2440 sjf2440 Flash tools
💻 CPP
字号:
// Download2440Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "Download2440.h"
#include "Download2440Dlg.h"
#include "Def.h"
//#include "rect.h"


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

extern void Init_Record(int flash,char *argv,int block);
extern U32 targetBlock;	

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
/***********显示动画**********************************/
RECT jpgRect;
static BOOL bIsRunning = FALSE;
typedef struct gifImage{
	WORD lWidth;
	WORD lHeight;
	WORD width;
	WORD height;
	struct flag{
		BYTE d:3;
		BYTE c:1;
		BYTE b:3;
        BYTE a:1;
	}Flag;
}GifImage,*PGifImage;
#include <math.h>

static UINT GifThread(LPVOID gifDC)
{
	CDC* pdc = (CDC*)gifDC;
	HINSTANCE handle = AfxGetResourceHandle();
	HRSRC hrsrc = FindResource(handle,MAKEINTRESOURCE(IDR_IMAGEDOWN),"IMAGE");
	//FindResource(
    DWORD word = SizeofResource(handle,hrsrc);
    BYTE* lpBy = (BYTE*)LoadResource(handle,hrsrc);
	BYTE* pByte[20];
	DWORD nu[20];
	int num = 0;
	DWORD firstLocation = 0;
	for(DWORD j=0;j<word;j++)
	{
		if(lpBy[j]==0x2c)
		{
			if(lpBy[j-1]==0x00)
			{
				
				if(num==0)
				{
                    firstLocation = j;
				}
                PGifImage nowImage = (PGifImage)&lpBy[j+1];
				if(nowImage->Flag.a==0)
				{
					DWORD number = 1+sizeof(GifImage);
					while(lpBy[j+number]!=0)
					{
					    number = number+(DWORD)lpBy[j+number]+1;
					}
					number++;
					pByte[num] = new BYTE[number];
					for(DWORD n=0;n<number;n++)
					{
						*(BYTE*)(pByte[num]+n) = lpBy[j+n];
					}
					nu[num] = number;
					j = j+number-1;
					num++;
				}
				else
				{
					int number = 1+sizeof(GifImage)+1+3*(int)floor(pow(2,nowImage->Flag.d));
					while(lpBy[j+number]!=0)
					{
					    number = number+lpBy[j+number];
					}
					pByte[num] = new BYTE[number];
					for(int n=0;n<number;n++)
					{
						*(BYTE*)(pByte[num]+n) = lpBy[j+n];
					}
					nu[num] = number;
					j = j+number-1;
					num++;
				}
			}
		}
	}
	int i = 1;
	while(i)
	{ 
	
		for(int m=0;m<num;m++)
		{
			CBrush brush(RGB(255,255,255));
			pdc->FillRect(CRect(&jpgRect),&brush); 
			//pdc->FillRect(CRect(0,0,50,50),&brush);
			DWORD DDD;
			VirtualProtect(lpBy,word,PAGE_READWRITE,&DDD);
            for(DWORD n=0;n<nu[m];n++)
			{
				lpBy[firstLocation+n] = *(BYTE*)(pByte[m]+n);
			}
			VirtualProtect(lpBy,word,DDD,NULL);



	        CMemFile file(lpBy,word);
            CArchive ar(&file,CArchive::load|CArchive::bNoFlushOnDelete);
            CArchiveStream arcstream(&ar);
            CComQIPtr<IPicture> m_picture;
			HRESULT hr = OleLoadPicture((LPSTREAM)&arcstream,0,false,IID_IPicture,(void**)&m_picture);
			long a,b;
			m_picture->get_Width(&a);
			m_picture->get_Height(&b);
			CSize sz(a,b);
			pdc->HIMETRICtoDP(&sz);
			CRect rect;
			m_picture->Render(*pdc,0,0,sz.cx,sz.cy,0,b,a,-b,&rect);
			Sleep(100);
		}
		/*if(!bIsRunning)
		{
			AfxEndThread(0);
			return 1;
		}*/
	}
	//::AfxMessageBox("cur tread");
	return 1;
}

//*********************************CDownload2440Dlg dialog
CDownload2440Dlg::CDownload2440Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CDownload2440Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDownload2440Dlg)
	m_FilePath = _T("");
	m_BlockNo = 0;
	m_State = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CDownload2440Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDownload2440Dlg)
	DDX_Control(pDX, IDC_FLASH, m_FlashComb);
	DDX_Control(pDX, IDC_CPU, m_CpuComb);
	DDX_Text(pDX, IDC_FILE, m_FilePath);
	DDX_Text(pDX, IDC_BLOCK, m_BlockNo);
	DDX_Text(pDX, IDC_STATE, m_State);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CDownload2440Dlg, CDialog)
	//{{AFX_MSG_MAP(CDownload2440Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_RECORD, OnRecord)
	ON_CBN_SELCHANGE(IDC_FLASH, OnSelchangeFlash)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDownload2440Dlg message handlers

BOOL CDownload2440Dlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	SetIcon(m_hIcon, TRUE);			
	SetIcon(m_hIcon, FALSE);	
	
	// this is my adding
	m_gifDC =NULL;
	bIsRunning = FALSE;
	pThread =NULL;
	m_flashNo=0;
	m_CpuComb.AddString("s3c2440");
	m_CpuComb.SetCurSel(0);

	m_FlashComb.AddString("K9F1208");
	m_FlashComb.AddString("28F128J3A");
	m_FlashComb.AddString("AM29LV800");
	m_FlashComb.AddString("Memory Rd/Wr");
	m_FlashComb.AddString("K9F1G08");
	m_FlashComb.SetCurSel(0);


	m_BlockNo =0;
	UpdateData(FALSE);
	
	return TRUE;  
}

void CDownload2440Dlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}


void CDownload2440Dlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}


HCURSOR CDownload2440Dlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CDownload2440Dlg::OnRecord() 
{
	// TODO: Add your control notification handler code here
	m_BlockNo = -1;
	UpdateData(TRUE);
	if((m_BlockNo<0) || (m_BlockNo>4096))
	{
		AfxMessageBox("block号输入错误");
		return;
	}
	strcpy(srcFileName,(LPCSTR)m_FilePath);
	if(m_FilePath =="")
	{
		AfxMessageBox("请选择文件名");
		return;
	}
	targetBlock = m_BlockNo;
		
	/********************************/
	/******GIF *****/
	pThread=NULL;
	bIsRunning =FALSE;
	CWnd *jpgHlg=NULL;
	CDC* pdc =NULL;
	m_gifDC=NULL;
	if(!bIsRunning)
	{
		jpgHlg = GetDlgItem(IDC_DRAWJPG_ZONE);
		pdc=jpgHlg->GetDC();
		
		jpgHlg->GetClientRect(&jpgRect);
	
		m_gifDC = new CDC;
		m_gifDC->Attach(pdc->GetSafeHdc());
		
		pThread=AfxBeginThread(GifThread,(LPVOID)m_gifDC);
		bIsRunning = TRUE;
	}
	m_State.Format("下载中...");
	UpdateData(FALSE);

	/************************************/
	//调用下载函数
	Init_Record(m_flashNo,srcFileName, m_BlockNo);
	m_State.Format("下载结束!");
	UpdateData(FALSE);
	
	/***********************************/
	//释放资源
	if((pThread!=NULL) && (bIsRunning))
	{
		::TerminateThread(pThread->m_hThread,0);
		pThread=NULL;
	}
	if(pdc!= NULL)
	{
		ReleaseDC(pdc);
		pdc=NULL;
	}
	if(m_gifDC!= NULL)
	{
		ReleaseDC(m_gifDC);
		m_gifDC=NULL;
	}
	jpgHlg->Invalidate();
}



BEGIN_EVENTSINK_MAP(CDownload2440Dlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CDownload2440Dlg)
	ON_EVENT(CDownload2440Dlg, IDC_IMGBTNBROWSE, 3 /* BeforeDragOver */, OnBeforeDragOverImgbtnbrowse, VTS_DISPATCH VTS_DISPATCH VTS_R4 VTS_R4 VTS_I4 VTS_DISPATCH VTS_I2)
	ON_EVENT(CDownload2440Dlg, IDC_IMGBTNBROWSE, -600 /* Click */, OnClickImgbtnbrowse, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CDownload2440Dlg::OnBeforeDragOverImgbtnbrowse(LPDISPATCH Cancel, LPDISPATCH Data, float X, float Y, long DragState, LPDISPATCH Effect, short Shift) 
{
	// TODO: Add your control notification handler code here
	
}

void CDownload2440Dlg::OnClickImgbtnbrowse() 
{
	//get filename selected
	CFileDialog   dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"所有文件   (*.*)|*.*||");   
    if(dlg.DoModal()==IDOK)   
    {   
        
		CString str=dlg.GetPathName();
		strcpy(srcFileName,(LPCSTR)str);
		m_FilePath=str;
		UpdateData(FALSE);
    }
	else
	{
		return;
	}    
}

void CDownload2440Dlg::OnSelchangeFlash() 
{
	// TODO: Add your control notification handler code here
	m_flashNo = m_FlashComb.GetCurSel();	
}


void CDownload2440Dlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	if(m_gifDC!= NULL)
	{
		ReleaseDC(m_gifDC);
		m_gifDC=NULL;
	}
}

⌨️ 快捷键说明

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