📄 burnnanddlg.cpp.svn-base
字号:
//for better look of BS(backspace) char.,
//the BS in the end of the string will be processed next time.
for(i=0;i<prevBSCnt;i++) //process the previous BS char.
string[i]='\b';
string[prevBSCnt]='\0';
lstrcat(string,string2);
string2[0]='\0';
slen=lstrlen(string);
for(i=0;i<slen;i++)
if(string[slen-i-1]!='\b')break;
prevBSCnt=i; // These BSs will be processed next time.
slen=slen-prevBSCnt;
if(slen==0)
{
return;
}
for(i=0;i<slen;i++)
{
if( (string[i]==KEY_BACKSPACE))
{
if (str2Pt>0)
{
string2[str2Pt--]=' '; //KEY_BACKSPACE;
txtRepEnd--;
wasCr=0;
continue;
}
}
if( (string[i]=='\n'))
{
string2[str2Pt++]='\r';txtRepEnd++;
string2[str2Pt++]='\n';txtRepEnd++;
wasCr=0;
continue;
}
if( (string[i]!='\n') && (wasCr==1) )
{
string2[str2Pt++]='\r';txtRepEnd++;
string2[str2Pt++]='\n';txtRepEnd++;
wasCr=0;
}
if(string[i]=='\r')
{
wasCr=1;
continue;
}
if(string[i]=='\b')
{
//flush string2
if(str2Pt>0)
{
string2[--str2Pt]='\0';
txtRepEnd--;
continue;
}
//str2Pt==0;
if(txtRepStart>0)
{
txtRepStart--;
}
continue;
}
string2[str2Pt++]=string[i];
txtRepEnd++;
// if(str2Pt>256-3)break; //why needed? 2001.1.26
}
string2[str2Pt]='\0';
if(str2Pt>0)
{
_hwndEdit->SetSel(txtRepStart, txtRepEnd + 1);
_hwndEdit->ReplaceSel(string2);
}
else
{
if(txtRepStart<=txtRepEnd)
{
_hwndEdit->SetSel(txtRepStart, txtRepEnd + 1);
_hwndEdit->ReplaceSel("");
}
}
//If edit buffer is over EDIT_BUF_SIZE,
//the size of buffer must be decreased by EDIT_BUF_DEC_SIZE.
if(txtRepEnd>EDIT_BUF_SIZE)
{
lineIdx = _hwndEdit->LineFromChar(EDIT_BUF_DEC_SIZE);
txtSelEnd = _hwndEdit->LineIndex(lineIdx) - 1;
_hwndEdit->SetSel(0, txtSelEnd + 1);
_hwndEdit->ReplaceSel("");
//make the end of the text shown.
txtRepEnd = _hwndEdit->GetWindowTextLength() - 1;
_hwndEdit->SetSel(txtRepEnd + 1, txtRepEnd + 2);
_hwndEdit->ReplaceSel(" ");
_hwndEdit->SetSel(txtRepEnd + 1, txtRepEnd + 2);
_hwndEdit->ReplaceSel("");
}
}
void CBurnNANDDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if(!m_dlgInit)
return;
#define BUTTON_BURN_X 500
#define BUTTON_BURN_Y 2
#define BUTTON_BURN_WIDTH 50
#define BUTTON_BURN_HEIGHT 20
#define COM1_GROUP_BOX_X 10
#define COM1_GROUP_BOX_Y 20
#define GROUP_BOX_WIDTH 350
#define GROUP_BOX_HEIGHT 70
#define GROUP_BOX_CLEARANCE 10
#define COLOR_STATIC_X_OFFSET 5
#define COLOR_STATIC_Y_OFFSET 25
#define COLOR_STATIC_WIDTH 40
#define COLOR_STATIC_HEIGHT 30
#define STATUS_STATIC_X_OFFSET COLOR_STATIC_X_OFFSET + COLOR_STATIC_WIDTH + 5
#define STATUS_STATIC_Y_OFFSET 15
#define STATUS_STATIC_WIDTH 110
#define STATUS_STATIC_HEIGHT 20
#define PROGRESS_X_OFFSET STATUS_STATIC_X_OFFSET
#define PROGRESS_Y_OFFSET STATUS_STATIC_Y_OFFSET + STATUS_STATIC_HEIGHT + 5
#define PROGRESS_WIDTH 140
#define PROGRESS_HEIGHT 20
#define COM_SCREEN_X_OFFSET PROGRESS_X_OFFSET + PROGRESS_WIDTH + 5
#define COM_SCREEN_Y_OFFSET STATUS_STATIC_Y_OFFSET
#define COM_SCREEN_WIDTH 135
#define COM_SCREEN_HEIGHT 50
for(int i = 0; i < MAX_DEVICE_NUM / 2; i++)
{
int group_box_y = COM1_GROUP_BOX_Y + i * (GROUP_BOX_HEIGHT + GROUP_BOX_CLEARANCE);
::MoveWindow(GetDlgItem(IDC_GROUP_COM1 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X, group_box_y,
GROUP_BOX_WIDTH, GROUP_BOX_HEIGHT, TRUE);
// GetDlgItem(IDC_STATIC_COLOR_COM1 + i)->MoveWindow(COM1_GROUP_BOX_X + COLOR_STATIC_X_OFFSET,
// group_box_y + COLOR_STATIC_Y_OFFSET, COLOR_STATIC_WIDTH, COLOR_STATIC_HEIGHT);
::MoveWindow(GetDlgItem(IDC_STATIC_COLOR_COM1 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + COLOR_STATIC_X_OFFSET,
group_box_y + COLOR_STATIC_Y_OFFSET, COLOR_STATIC_WIDTH, COLOR_STATIC_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_STATIC_COM1 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + STATUS_STATIC_X_OFFSET,
group_box_y + STATUS_STATIC_Y_OFFSET, STATUS_STATIC_WIDTH, STATUS_STATIC_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_PROGRESS_COM1 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + PROGRESS_X_OFFSET,
group_box_y + PROGRESS_Y_OFFSET, PROGRESS_WIDTH, PROGRESS_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_SCREEN_COM1 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + COM_SCREEN_X_OFFSET,
group_box_y + COM_SCREEN_Y_OFFSET, COM_SCREEN_WIDTH, COM_SCREEN_HEIGHT, TRUE);
}
for(i = 0; i < MAX_DEVICE_NUM / 2; i++)
{
int group_box_y = COM1_GROUP_BOX_Y + i * (GROUP_BOX_HEIGHT + GROUP_BOX_CLEARANCE);
::MoveWindow(GetDlgItem(IDC_GROUP_COM9 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + GROUP_BOX_WIDTH + 40, group_box_y,
GROUP_BOX_WIDTH, GROUP_BOX_HEIGHT, TRUE);
// GetDlgItem(IDC_STATIC_COLOR_COM1 + i)->MoveWindow(COM1_GROUP_BOX_X + COLOR_STATIC_X_OFFSET,
// group_box_y + COLOR_STATIC_Y_OFFSET, COLOR_STATIC_WIDTH, COLOR_STATIC_HEIGHT);
::MoveWindow(GetDlgItem(IDC_STATIC_COLOR_COM9 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + GROUP_BOX_WIDTH + 40 + COLOR_STATIC_X_OFFSET,
group_box_y + COLOR_STATIC_Y_OFFSET, COLOR_STATIC_WIDTH, COLOR_STATIC_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_STATIC_COM9 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + GROUP_BOX_WIDTH + 40 + STATUS_STATIC_X_OFFSET,
group_box_y + STATUS_STATIC_Y_OFFSET, STATUS_STATIC_WIDTH, STATUS_STATIC_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_PROGRESS_COM9 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + GROUP_BOX_WIDTH + 40 + PROGRESS_X_OFFSET,
group_box_y + PROGRESS_Y_OFFSET, PROGRESS_WIDTH, PROGRESS_HEIGHT, TRUE);
::MoveWindow(GetDlgItem(IDC_SCREEN_COM9 + i)->GetSafeHwnd(), COM1_GROUP_BOX_X + GROUP_BOX_WIDTH + 40 + COM_SCREEN_X_OFFSET,
group_box_y + COM_SCREEN_Y_OFFSET, COM_SCREEN_WIDTH, COM_SCREEN_HEIGHT, TRUE);
}
::MoveWindow(GetDlgItem(IDC_BUTTON_BURN)->GetSafeHwnd(), BUTTON_BURN_X, BUTTON_BURN_Y,
BUTTON_BURN_WIDTH, BUTTON_BURN_HEIGHT, TRUE);
}
HBRUSH CBurnNANDDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
for(int i = 0; i < MAX_DEVICE_NUM; i++)
{
if(GetDlgItem(IDC_STATIC_COLOR_COM1 + i)->GetSafeHwnd() == pWnd->m_hWnd)
{
// pDC->SetBkColor(m_StaticColor[i]);
return *m_brStaticBrush[i];
}
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
BOOL CBurnNANDDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
DEFINE_GUID(M3USB_GUID,
0x6e7ac6a7, 0x1a4c, 0x4a72, 0x83, 0x54, 0x89, 0x95, 0x11, 0xf8, 0x13, 0x51);
void CBurnNANDDlg::OnButtonBurn()
{
// TODO: Add your control notification handler code here
if(m_nWorkNum > 0)
return;
for(int i = 0; i < MAX_DEVICE_NUM; i++)
{
if(burnflash[i].is_standby())
{
if(burnflash[i].is_com_open())
{
record_int(config.base_com + i);
}
if(config.bUBoot)
{
burnflash[i].open_usb();
}
else
{
set_reg_com(0x20060000 + 0x04, (config.system_clock * 1000000
/16/115200) & 0xff, burnflash[i].com);
//burnflash[i].set_reg(0x20060000 + 0x08, ((60000000/16/115200) >> 8) & 0xff);
burnflash[i].close_com();
bool ret = burnflash[i].open_com(config.base_com + i, 115200, m_hWnd);
//burnflash[i].set_dcb(115200, config.ByteSize, config.Parity, config.StopBits);
//bool ret = burnflash[i].set_para();
if(!ret)
{
CString str;
str.Format("打开串口%d失败", config.base_com + i);
MessageBox(str, NULL, MB_OK);
}
}
burnflash[i].begin_burn_flash();
burnflash[i].set_standby(FALSE);
m_bWorking[i] = TRUE;
m_nWorkNum++;
GetMenu()->EnableMenuItem(IDM_CONFIG, MF_BYCOMMAND | MF_GRAYED );
}
else
{
m_brStaticBrush[i] = &m_brBlackBrush;
m_StaticColor[i] = RGB(0, 0, 0);
GetDlgItem(IDC_STATIC_COM1 + i)->SetWindowText("");
GetDlgItem(IDC_STATIC_COLOR_COM1 + i)->Invalidate();
}
}
}
void CBurnNANDDlg::OnSettingHelp()
{
// TODO: Add your command handler code here
CAboutDlg help;
help.DoModal();
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CString str;
str.Format("烧录工具 %d.%d.%dc 版", MAIN_VERSION, SUB_VERSION, SUB1_VERSION);
GetDlgItem(IDC_STATIC_VERSION)->SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CBurnNANDDlg::StartBurn(int i)
{
if(burnflash[i].is_standby())
{
record_int(config.base_com + i);
set_reg_com(0x20060000 + 0x04, (config.system_clock * 1000000
/16/115200) & 0xff, burnflash[i].com);
//burnflash[i].set_reg(0x20060000 + 0x08, ((60000000/16/115200) >> 8) & 0xff);
burnflash[i].close_com();
bool ret = burnflash[i].open_com(config.base_com + i, 115200, m_hWnd);
//burnflash[i].set_dcb(115200, config.ByteSize, config.Parity, config.StopBits);
//bool ret = burnflash[i].set_para();
if(!ret)
{
CString str;
str.Format("打开串口%d失败", config.base_com + i);
MessageBox(str, NULL, MB_OK);
}
m_bWorking[i] = TRUE;
m_nWorkNum++;
GetMenu()->EnableMenuItem(IDM_CONFIG, MF_BYCOMMAND | MF_GRAYED );
burnflash[i].begin_burn_flash();
burnflash[i].set_standby(FALSE);
}
}
LRESULT CBurnNANDDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
PDEV_BROADCAST_DEVICEINTERFACE hDev_Broadcast_Deviceinterface;
if(message == WM_DEVICECHANGE)
{
if(wParam == DBT_DEVICEARRIVAL)
{
PDEV_BROADCAST_HDR hDev_Broadcast_HDR = (PDEV_BROADCAST_HDR)lParam;
switch(hDev_Broadcast_HDR->dbch_devicetype)
{
case DBT_DEVTYP_DEVICEINTERFACE:
hDev_Broadcast_Deviceinterface =
(PDEV_BROADCAST_DEVICEINTERFACE)lParam;
if( hDev_Broadcast_Deviceinterface->dbcc_classguid ==
M3USB_GUID )
{
for(int i = 0; i < (config.equipment_count * 2); i++)
{
if(m_arrive_name[i].IsEmpty())
break;
}
if(i >= (config.equipment_count * 2))
i = 0;
m_arrive_name[i] = hDev_Broadcast_Deviceinterface->dbcc_name;
PostMessage(ON_BURNFLASH_DEVICE_ARRIVE, (WPARAM)i, lParam);
}
break;
default:
break;
}
}
else if(wParam == DBT_DEVICEREMOVECOMPLETE)
{
PDEV_BROADCAST_HDR hDev_Broadcast_HDR = (PDEV_BROADCAST_HDR)lParam;
switch(hDev_Broadcast_HDR->dbch_devicetype)
{
case DBT_DEVTYP_DEVICEINTERFACE:
hDev_Broadcast_Deviceinterface =
(PDEV_BROADCAST_DEVICEINTERFACE)lParam;
if( hDev_Broadcast_Deviceinterface->dbcc_classguid ==
M3USB_GUID )
{
for(int i = 0; i < (config.equipment_count * 2); i++)
{
if(m_remove_name[i].IsEmpty())
break;
}
if(i >= (config.equipment_count * 2))
i = 0;
m_remove_name[i] = hDev_Broadcast_Deviceinterface->dbcc_name;
PostMessage(ON_BURNFLASH_DEVICE_REMOVE, (WPARAM)i, 0);
}
break;
default:
break;
}
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
BOOL CBurnNANDDlg::DoRegisterDeviceInterface( GUID InterfaceClassGuid )
{
DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
DWORD Err;
ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
NotificationFilter.dbcc_size =
sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
NotificationFilter.dbcc_classguid = InterfaceClassGuid;
m_hDevNotify = RegisterDeviceNotification( m_hWnd,
&NotificationFilter,
DEVICE_NOTIFY_WINDOW_HANDLE
);
if(!m_hDevNotify)
{
Err = GetLastError();
printf( "RegisterDeviceNotification failed: %lx.\n", Err);
return FALSE;
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -