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

📄 myprogdlg.cpp

📁 上位机软件 for avricp 根据功能设定熔丝
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// MYPROGDlg.cpp : implementation file
//

#include "stdafx.h"
#include "MYPROG.h"
#include "MYPROGDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CMYPROGDlg dialog

CMYPROGDlg::CMYPROGDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMYPROGDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CMYPROGDlg)
	m_csCom = _T("");
	m_csMessage = _T("");
	m_hexfile = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMYPROGDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMYPROGDlg)
	DDX_Control(pDX, IDC_COMBO_DEVICE, m_ComboBox_Device);
	DDX_Control(pDX, IDC_OPENS, m_opens);
	DDX_Control(pDX, IDC_PROGRESS1, m_nProgress);
	DDX_Text(pDX, IDC_STATIC_COM, m_csCom);
	DDX_Text(pDX, IDC_STATIC_MESSAGE, m_csMessage);
	DDX_Text(pDX, IDC_EDIT_HEX, m_hexfile);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CMYPROGDlg, CDialog)
//{{AFX_MSG_MAP(CMYPROGDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(NM_CLICK, IDC_LIST3, OnClickList3)
ON_BN_CLICKED(IDOK, OnOpens)
ON_CBN_SELCHANGE(IDC_COMBO_DEVICE, OnSelchangeComboDevice)
ON_BN_CLICKED(IDC_BUTTON_EXPLORER, OnButtonExplorer)
ON_BN_CLICKED(IDC_BUTTON_SREAD, OnButtonSread)
ON_BN_CLICKED(IDC_BUTTON_SPROG, OnButtonSprog)
ON_BN_CLICKED(IDC_BUTTON_ERASE, OnButtonErase)
ON_CBN_SELCHANGE(IDC_COMBO_LOCK1, OnSelchangeComboLock1)
ON_CBN_SELCHANGE(IDC_COMBO_LOCK2, OnSelchangeComboLock2)
ON_CBN_SELCHANGE(IDC_COMBO_LOCK3, OnSelchangeComboLock3)
ON_BN_CLICKED(IDC_BUTTON_FPROG, OnButtonFprog)
ON_BN_CLICKED(IDC_BUTTON_FREAD, OnButtonFread)
ON_BN_CLICKED(IDC_BUTTON_FVERI, OnButtonFveri)
ON_BN_CLICKED(IDC_BUTTON_EPROG, OnButtonEprog)
ON_BN_CLICKED(IDC_BUTTON_EVERI, OnButtonEveri)
ON_BN_CLICKED(IDC_BUTTON_EREAD, OnButtonEread)
ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
ON_BN_CLICKED(IDC_CHECK4, OnCheck4)
ON_BN_CLICKED(IDC_CHECK5, OnCheck5)
ON_BN_CLICKED(IDC_CHECK6, OnCheck6)
ON_CBN_SELCHANGE(IDC_COMBO_FUSE1, OnSelchangeComboFuse1)
ON_CBN_SELCHANGE(IDC_COMBO_FUSE2, OnSelchangeComboFuse2)
ON_CBN_SELCHANGE(IDC_COMBO_FUSE3, OnSelchangeComboFuse3)
ON_CBN_SELCHANGE(IDC_COMBO_FUSE4, OnSelchangeComboFuse4)
ON_BN_CLICKED(IDC_CHECK0, OnCheck0)
ON_BN_CLICKED(IDC_CHECK7, OnCheck7)
ON_BN_CLICKED(IDC_CHECK8, OnCheck8)
ON_BN_CLICKED(IDC_CHECK9, OnCheck9)
ON_BN_CLICKED(IDC_CHECK10, OnCheck10)
ON_BN_CLICKED(IDC_CHECK11, OnCheck11)
ON_BN_CLICKED(IDC_CHECK12, OnCheck12)
ON_BN_CLICKED(IDC_CHECK13, OnCheck13)
ON_BN_CLICKED(IDC_CHECK14, OnCheck14)
ON_BN_CLICKED(IDC_CHECK15, OnCheck15)
	ON_BN_CLICKED(IDC_CHECK16, OnCheck16)
	ON_BN_CLICKED(IDC_CHECK17, OnCheck17)
	ON_BN_CLICKED(IDC_CHECK18, OnCheck18)
	ON_BN_CLICKED(IDC_CHECK19, OnCheck19)
	ON_BN_CLICKED(IDC_CHECK20, OnCheck20)
	ON_BN_CLICKED(IDC_CHECK21, OnCheck21)
	ON_BN_CLICKED(IDC_CHECK22, OnCheck22)
	ON_BN_CLICKED(IDC_CHECK23, OnCheck23)
	ON_BN_CLICKED(IDC_CHECK_L0, OnCheckL0)
	ON_BN_CLICKED(IDC_CHECK_L1, OnCheckL1)
	ON_BN_CLICKED(IDC_CHECK_L2, OnCheckL2)
	ON_BN_CLICKED(IDC_CHECK_L3, OnCheckL3)
	ON_BN_CLICKED(IDC_CHECK_L4, OnCheckL4)
	ON_BN_CLICKED(IDC_CHECK_L5, OnCheckL5)
	ON_BN_CLICKED(IDC_CHECK_L6, OnCheckL6)
ON_BN_CLICKED(IDC_OPENS, OnOpens)
	ON_BN_CLICKED(IDC_CHECK_L7, OnCheckL7)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMYPROGDlg message handlers


BOOL CMYPROGDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	
	// Add "About..." menu item to system menu.
	
	// 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
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	//锁位部分
	lockGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPLOCK);     
	lock=(CButton*)GetDlgItem(IDC_STATIC_LOCK);  
	lockb[0 ]=(CButton*)GetDlgItem(IDC_CHECK_L0);     
	lockb[1 ]=(CButton*)GetDlgItem(IDC_CHECK_L1);     
	lockb[2 ]=(CButton*)GetDlgItem(IDC_CHECK_L2);     
	lockb[3 ]=(CButton*)GetDlgItem(IDC_CHECK_L3);     
	lockb[4 ]=(CButton*)GetDlgItem(IDC_CHECK_L4);     
	lockb[5 ]=(CButton*)GetDlgItem(IDC_CHECK_L5);     
	lockb[6 ]=(CButton*)GetDlgItem(IDC_CHECK_L6);     
	lockb[7 ]=(CButton*)GetDlgItem(IDC_CHECK_L7); 
	
    lock1Combo = (CComboBox*)GetDlgItem(IDC_COMBO_LOCK1);
    lock2Combo = (CComboBox*)GetDlgItem(IDC_COMBO_LOCK2);
    lock3Combo = (CComboBox*)GetDlgItem(IDC_COMBO_LOCK3);
	
	
	//熔丝部分
	fuseGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFUSE);     
	fuse0=(CButton*)GetDlgItem(IDC_STATIC_FUSE0);  
	fuse1=(CButton*)GetDlgItem(IDC_STATIC_FUSE1);  
	fuse2=(CButton*)GetDlgItem(IDC_STATIC_FUSE2);  
	check[0 ] = (CButton*)GetDlgItem(IDC_CHECK0 );     
	check[1 ] = (CButton*)GetDlgItem(IDC_CHECK1 );     
	check[2 ] = (CButton*)GetDlgItem(IDC_CHECK2 );     
	check[3 ] = (CButton*)GetDlgItem(IDC_CHECK3 );     
	check[4 ] = (CButton*)GetDlgItem(IDC_CHECK4 );     
	check[5 ] = (CButton*)GetDlgItem(IDC_CHECK5 );     
	check[6 ] = (CButton*)GetDlgItem(IDC_CHECK6 );     
	check[7 ] = (CButton*)GetDlgItem(IDC_CHECK7 );     
	check[8 ] = (CButton*)GetDlgItem(IDC_CHECK8 );     
	check[9 ] = (CButton*)GetDlgItem(IDC_CHECK9 );     
	check[10] = (CButton*)GetDlgItem(IDC_CHECK10);     
	check[11] = (CButton*)GetDlgItem(IDC_CHECK11);     
	check[12] = (CButton*)GetDlgItem(IDC_CHECK12);  
	check[13] = (CButton*)GetDlgItem(IDC_CHECK13);     
	check[14] = (CButton*)GetDlgItem(IDC_CHECK14);     
	check[15] = (CButton*)GetDlgItem(IDC_CHECK15);     
	check[16] = (CButton*)GetDlgItem(IDC_CHECK16);     
	check[17] = (CButton*)GetDlgItem(IDC_CHECK17);     
	check[18] = (CButton*)GetDlgItem(IDC_CHECK18);     
	check[19] = (CButton*)GetDlgItem(IDC_CHECK19);     
	check[20] = (CButton*)GetDlgItem(IDC_CHECK20);     
	check[21] = (CButton*)GetDlgItem(IDC_CHECK21);     
	check[22] = (CButton*)GetDlgItem(IDC_CHECK22);     
	check[23] = (CButton*)GetDlgItem(IDC_CHECK23);     
    fuse1Combo = (CComboBox*)GetDlgItem(IDC_COMBO_FUSE1);
    fuse2Combo = (CComboBox*)GetDlgItem(IDC_COMBO_FUSE2);
    fuse3Combo = (CComboBox*)GetDlgItem(IDC_COMBO_FUSE3);
    fuse4Combo = (CComboBox*)GetDlgItem(IDC_COMBO_FUSE4);
	
	
    //操作
	sreadButton=(CButton*)GetDlgItem(IDC_BUTTON_SREAD);     
	sprogButton=(CButton*)GetDlgItem(IDC_BUTTON_SPROG);     
	eraseButton=(CButton*)GetDlgItem(IDC_BUTTON_ERASE);   

	//////////////////////////////////////////////////////////////////////////////////////////////////
	m_nProgress.SetPos(0);
	EnableFlash(FALSE);
	EnableEeprom(FALSE);
	DisableLockAndFuse();
	CButton*  OpensButton=(CButton*)GetDlgItem(IDC_OPENS);
	OpensButton->EnableWindow(FALSE);
	SetDlgItemText(IDC_STATIC_SW, "");
	SetDlgItemText(IDC_STATIC_HW, "");
	SetDlgItemText(IDC_STATIC_NAME, "");
	
	/*
	LONG RegOpenKeyEx(
	HKEY hKey,         // handle to open key
	LPCTSTR lpSubKey,  // address of name of subkey to open
	DWORD ulOptions,   // reserved
	REGSAM samDesired, // security access mask
	PHKEY phkResult    // address of handle to open key
	);
	
	  LONG RegEnumValue(
	  HKEY hKey,              // handle to key to query
	  DWORD dwIndex,          // index of value to query
	  LPTSTR lpValueName,     // address of buffer for value string
	  LPDWORD lpcbValueName,  // address for size of value buffer
	  LPDWORD lpReserved,     // reserved
	  LPDWORD lpType,         // address of buffer for type code
	  LPBYTE lpData,          // address of buffer for value data
	  LPDWORD lpcbData        // address for size of data buffer
	  );
	  LONG RegQueryValueEx(
	  HKEY hKey,           // handle to key to query
	  LPTSTR lpValueName,  // address of name of value to query
	  LPDWORD lpReserved,  // reserved
	  LPDWORD lpType,      // address of buffer for value type
	  LPBYTE lpData,       // address of data buffer
	  LPDWORD lpcbData     // address of data buffer size
	  );
	  
	*/
#define MAXKEYPATH  99
	HKEY    hKey    = HKEY_LOCAL_MACHINE;
	LPCTSTR     lpSubKey  = "HARDWARE\\DEVICEMAP\\SERIALCOMM";
	REGSAM    samDesired  = KEY_READ;
	
	DWORD   dwIndex = 0;
	LPDWORD   lpType  =new DWORD;   *lpType= REG_SZ;
	LPBYTE  COMName =new BYTE[80];
	LPDWORD lpcbData=new DWORD; *lpcbData=80;
    
	char   COMObject[MAXKEYPATH];   
	LPSTR   lpszDescBuff   =   NULL;   
	DWORD   rc;   
	DWORD   dwBufSize=MAXKEYPATH; 
	CListCtrl* p1;
	rc   =   RegOpenKeyEx(hKey,lpSubKey,0,samDesired,&hKey); 
	
	if   (rc   ==   ERROR_SUCCESS)   
	{   
		p1= (CListCtrl*)GetDlgItem(IDC_LIST3);
		//p1->SetBkColor(RGB(255,255,255));
		//p1->SetTextBkColor(RGB(255,255,255));
		while   (RegEnumValue(hKey,dwIndex++,COMObject,&dwBufSize,NULL,lpType,COMName,lpcbData)==ERROR_SUCCESS)   
		{   
			CString ts=COMName;
			p1->InsertItem(dwIndex,ts,dwIndex);
			if(dwIndex==1)SetDlgItemText(IDC_STATIC_COM, ts);
			dwBufSize   =   MAXKEYPATH;
		}   
		RegCloseKey(hKey);   
	}   
	else   
	{
		//DisplayMessage("未能检测串口!");
	}
	if(dwIndex!=0)OpensButton->EnableWindow(TRUE);
	else  SetDlgItemText(IDC_STATIC_COM, "无串口");
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

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

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CMYPROGDlg::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();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CMYPROGDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CMYPROGDlg::OnClickList3(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    CListCtrl* pList =
        (CListCtrl*) GetDlgItem(IDC_LIST3);
    int nSelected = pNMListView->iItem;
    if (nSelected >= 0) {
        CString strItem = pList->GetItemText(nSelected, 0);
		UpdateData(TRUE);
		m_csCom=strItem;
        UpdateData(FALSE);
		
    }
	
	*pResult = 0;
}
//打开串口并获取编程器信息
void CMYPROGDlg::OnOpens() 
{
	// TODO: Add your control notification handler code here
	CString ss1;//,ss2;
	UpdateData(TRUE);
	UpdateData(FALSE);
	m_opens.GetWindowText(ss1);
	
	if (ss1=="联机")
	{
		if(avrp.com.Open(m_csCom,19200))//打开串口并使用默认设置
		{
			//com.SetWnd(AfxGetMainWnd()->m_hWnd); //设置消息处理窗口
			
			
			
			long major,minor;
			CString cstr;
			//读软件标识
			cstr = avrp.readProgrammerID();
			if(cstr == "1234567")return;
			SetDlgItemText(IDC_STATIC_NAME, cstr);
			//读软件版本
			if(!avrp.programmerSoftwareVersion(&major,&minor))return;
			cstr.Empty();
			cstr.Insert(0,(char)major);
			cstr.Insert(1,'.');
			cstr.Insert(2,(char)minor);
			SetDlgItemText(IDC_STATIC_SW, cstr);
			//读硬件版本
			if(!avrp.programmerHardwareVersion(&major,&minor))return;
			cstr.Empty();
			cstr.Insert(0,(char)major);
			cstr.Insert(1,'.');
			cstr.Insert(2,(char)minor);
			SetDlgItemText(IDC_STATIC_HW, cstr);
			//读器件列表
			for(int i = 0;i<avrp.devicesupportNumber;i++)
			{
				avrp.device.SetDevice(avrp.devicesupport[i]);
				m_ComboBox_Device.AddString(avrp.device.getDeviceName());
			}
			if(m_ComboBox_Device.GetCount())
			{
				int n=m_ComboBox_Device.FindString(0,"ATmega16");
				if(n == CB_ERR)
				m_ComboBox_Device.SetCurSel(0);
				else m_ComboBox_Device.SetCurSel(n);
				OnSelchangeComboDevice();
			}
			//改变串口操作状态
			m_opens.SetWindowText("断开");
			CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST3);
			pList->EnableWindow(FALSE);
			
		}
		else 
		{
			AfxMessageBox( "联机失败:通信端口无法打开!");
		}
	}
	else
	{
		avrp.com.Close();
		m_opens.SetWindowText("联机");
		CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_LIST3);
		pList->EnableWindow();
		SetDlgItemText(IDC_STATIC_SW, "");
		SetDlgItemText(IDC_STATIC_HW, "");
		SetDlgItemText(IDC_STATIC_NAME, "");
        while(m_ComboBox_Device.GetCount())
		{
			m_ComboBox_Device.DeleteString(0);
		}
		m_nProgress.SetPos(0);
		EnableFlash(FALSE);
		EnableEeprom(FALSE);
		DisableLockAndFuse();
	}
	
}
void CMYPROGDlg::ReadSignature()
{
		//读器件标识
	char ts[60];
		if(!avrp.enterProgrammingMode())
		{
			SetDlgItemText(IDC_STATIC_SIGNATURE, "");
			return;
		}
		long s0,s1,s2;
		bool r = avrp.isRightSignature( &s0, &s1, &s2 );
		sprintf(ts," %02X %02X %02X",(UCHAR)s0,(UCHAR)s1,(UCHAR)s2);
		SetDlgItemText(IDC_STATIC_SIGNATURE, ts);
		avrp.device.getSignature(&s0,&s1,&s2);
		if(r )
		{
			
			sprintf(ts,"%s 标识:%02X %02X %02X!",avrp.device.getDeviceName(),
				(unsigned char)s0,(unsigned char)s1,(unsigned char)s2);
			UpdateData(TRUE);
			m_csMessage	= ts;
			UpdateData(FALSE);
		}
		else
		{
			
			sprintf(ts,"%s 标识不匹配:%02X %02X %02X!",avrp.device.getDeviceName(),
				(unsigned char)s0,(unsigned char)s1,(unsigned char)s2);
			UpdateData(TRUE);
			m_csMessage	= ts;
			UpdateData(FALSE);
		}
			ReadLockAndFuse();
		avrp.leaveProgrammingMode();

}

//选择器件
void CMYPROGDlg::OnSelchangeComboDevice() 
{
	// TODO: Add your control notification handler code here
	char ts[60];
	if(m_ComboBox_Device.GetCount())
	{
		m_ComboBox_Device.GetLBText(m_ComboBox_Device.GetCurSel(),ts);
		avrp.device.SetDevice(ts);
		
		EnableFlash();
		EnableEeprom();
		DisableLockAndFuse();
		EnableLockAndFuse();
		ReadSignature();
		//OnButtonSread();
	}
	
}




//打开HEX文件
void CMYPROGDlg::OnButtonExplorer() 
{
	// CFileDialog( BOOL bOpenFileDialog,            false=保存,true=打开
	//           LPCTSTR lpszDefExt = NULL,          缺省扩展名
	//           LPCTSTR lpszFileName = NULL,        文件名
	//           DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,  读写方式 
	//           LPCTSTR lpszFilter = NULL,          文件流
	//           CWnd* pParentWnd = NULL );          
	
	CString m_edit2temp=m_hexfile;
	CString sFilter="Hexfile(*.hex)|*.hex|All Files (*.*)|*.*|";
	CFileDialog dlg(true,"bin",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,(LPCTSTR)sFilter,this);
	
	UpdateData(TRUE);
	if(dlg.DoModal()==IDOK)
		m_hexfile=dlg.GetPathName();
	else
		m_hexfile=m_edit2temp;
	UpdateData(FALSE);
	
	
}


//使能或禁止Flash操作按钮
void CMYPROGDlg::EnableFlash(BOOL EN)
{
	CButton *flashGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPFLASH);     
	flashGroup->EnableWindow(EN);
	
	if(EN)
	{
		char s[30];
		sprintf(s,"Flash:%d",avrp.device.getFlashSize());
		flashGroup->SetWindowText(s);
	}
	else flashGroup->SetWindowText("Flash");
	
	CButton *fprogButton=(CButton*)GetDlgItem(IDC_BUTTON_FPROG);     
	CButton *fveriButton=(CButton*)GetDlgItem(IDC_BUTTON_FVERI);   
	CButton *freadButton=(CButton*)GetDlgItem(IDC_BUTTON_FREAD);     
	
	fprogButton->EnableWindow(EN);
	fveriButton->EnableWindow(EN);
	freadButton->EnableWindow(EN);
	
}
//使能或禁止Eeprom操作按钮
void CMYPROGDlg::EnableEeprom(BOOL EN)
{
	CButton *eepromGroup=(CButton*)GetDlgItem(IDC_STATIC_GROUPEEPROM);     
	CButton *eprogButton=(CButton*)GetDlgItem(IDC_BUTTON_EPROG);     
	CButton *everiButton=(CButton*)GetDlgItem(IDC_BUTTON_EVERI);   
	CButton *ereadButton=(CButton*)GetDlgItem(IDC_BUTTON_EREAD);     
	
	if(avrp.device.getEEPROMSize() && EN)
	{
		eepromGroup->EnableWindow(EN);
		eprogButton->EnableWindow(EN);
		everiButton->EnableWindow(EN);
		ereadButton->EnableWindow(EN);
		char s[30];
		sprintf(s,"EEPROM:%d",avrp.device.getEEPROMSize());
		eepromGroup->SetWindowText(s);
	}
	else 
	{
		eepromGroup->EnableWindow(FALSE);

⌨️ 快捷键说明

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