📄 download2440dlg.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 + -