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

📄 atlasmgr2dlg.cpp

📁 cell phone source code
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    // AtlasMgr2Dlg.cpp : implementation file
//

#include "stdafx.h"
#include "blcommon.h"
#include "AtlasMgr2.h"
#include "AtlasMgr2Dlg.h"
#include "AtlasFunc.h"
#include "AtlasUsbMsg.h"
#include "AtlasApi.h"
#include "ProgDlg.h"
#include ".\jtag\define.h"
#include "EnumSerial.h" 

#include "jtag_err.h"
#include "jtag.h"
#include "jtag_nf.h"
#include "jtag_nor.h"
#include "pin_cennav.h"

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

#define BIN_HEADER_LENGTH		7

extern ATLAS_DEV_INFO g_atlasdevinfo;

BOOL g_bNK5_0 = TRUE;

DWORD dwBytesPerSector;
DWORD dwSectorsPerBlock;
DWORD dwBlocks;
DWORD dwDataWidth;
DWORD dwSpareDataLength;
extern unsigned long g_NorID;
extern BOOL g_8BitsNor;
extern DumpNFInfo g_DumpNFInfo;
extern DWORD g_dwTransport;
/////////////////////////////////////////////////////////////////////////////
// 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()

/////////////////////////////////////////////////////////////////////////////
// CAtlasMgr2Dlg dialog

CAtlasMgr2Dlg::CAtlasMgr2Dlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAtlasMgr2Dlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAtlasMgr2Dlg)
	m_nCs = 0;
	m_nTransPort = 0;
	m_nPort = 0;
	m_strInput = _T("");
	m_nDumpNFStart = 0;
	m_nDumpNFEnd = 0;
	m_wholechip = FALSE;
	m_nBaud = 3;
	m_nFlashType = 0;
	m_nChipType = 0;
	m_nGPIOPreLoad1Value = 0;
	m_nGPIOPreLoad1Group = 0;
	m_nGPIOPreLoad1Pins = 0;
	m_nGPIOPreLoad2Value = 0;
	m_nGPIOPreLoad2Group = 0;
	m_nGPIOPreLoad2Pins = 0;
	m_nGPIOPreLoad3Value = 0;
	m_nGPIOPreLoad3Group = 0;
	m_nGPIOPreLoad3Pins = 0;
	m_nNorFlashType = -1;
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_bOpened = FALSE;
}

void CAtlasMgr2Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAtlasMgr2Dlg)
	DDX_Control(pDX, IDC_COMBO_NORFLASH_TYPE, m_NorFlash_Type);
	DDX_Control(pDX, IDC_COMBO_COM_PORT, m_combo_com_port);
	DDX_Control(pDX, IDC_USB_INPUT, m_inputEdit);
	DDX_Control(pDX, IDC_USB_OUTPUT, m_outputTerminal);
	DDX_Radio(pDX, IDC_CS0, m_nCs);
	DDX_Radio(pDX, IDC_TRANSPORT_USB, m_nTransPort);
	DDX_CBIndex(pDX, IDC_COMBO_COM_PORT, m_nPort);
	DDX_Text(pDX, IDC_USB_INPUT, m_strInput);
	DDX_Text(pDX, IDC_DUMP_BLOCK_START, m_nDumpNFStart);
	DDX_Text(pDX, IDC_DUMP_BLOCK_END, m_nDumpNFEnd);
	DDX_Check(pDX, IDC_DUMP_WHOLE_CHIP, m_wholechip);
	DDX_CBIndex(pDX, IDC_COMBO_COM_BAUD, m_nBaud);
	DDX_Radio(pDX, IDC_FLASHTYPE_NAND, m_nFlashType);
	DDX_CBIndex(pDX, IDC_COMBO_CHIP, m_nChipType);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD1_VALUE, m_nGPIOPreLoad1Value);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD1_GROUP, m_nGPIOPreLoad1Group);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD1_PINS, m_nGPIOPreLoad1Pins);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD2_VALUE, m_nGPIOPreLoad2Value);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD2_GROUP, m_nGPIOPreLoad2Group);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD2_PINS, m_nGPIOPreLoad2Pins);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD3_VALUE, m_nGPIOPreLoad3Value);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD3_GROUP, m_nGPIOPreLoad3Group);
	DDX_CBIndex(pDX, IDC_COMBO_GPIO_PRELOAD3_PINS, m_nGPIOPreLoad3Pins);
	DDX_CBIndex(pDX, IDC_COMBO_NORFLASH_TYPE, m_nNorFlashType);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAtlasMgr2Dlg, CDialog)
	//{{AFX_MSG_MAP(CAtlasMgr2Dlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CS0, OnCsChange)
	ON_BN_CLICKED(IDC_OPEN_DEVICE, OnOpenDevice)
	ON_BN_CLICKED(IDC_UPDATE_NBOOT, OnUpdateNboot)
	ON_BN_CLICKED(IDC_UPDATE_EBOOT, OnUpdateEboot)
	ON_BN_CLICKED(IDC_UPDATE_NB0, OnUpdateNKImage)
	ON_BN_CLICKED(IDC_TRANSPORT_RS232, OnTransportChanged)
	ON_BN_CLICKED(IDC_FLASHTYPE_NAND, OnFlashTypeChanged)
	ON_BN_CLICKED(IDC_UPDATE_NANDXIP, OnUpdateNandxip)
	ON_BN_CLICKED(IDC_UPDATE_DM, OnUpdateDm)
	ON_BN_CLICKED(IDC_DUMP_NBOOT, OnDumpNboot)
	ON_BN_CLICKED(IDC_DUMP_EBOOT, OnDumpEboot)
	ON_BN_CLICKED(IDC_DUMP_BLOCKS, OnDumpBlocks)
	ON_BN_CLICKED(IDC_CS1, OnCsChange)
	ON_BN_CLICKED(IDC_CS2, OnCsChange)
	ON_BN_CLICKED(IDC_CS3, OnCsChange)
	ON_BN_CLICKED(IDC_TRANSPORT_USB, OnTransportChanged)
	ON_BN_CLICKED(IDC_TRANSPORT_JTAG, OnTransportChanged)
	ON_BN_CLICKED(IDC_FLASHTYPE_NOR, OnFlashTypeChanged)
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_ATLAS_DBG_OUT_MESSAGE, OnAtlasDbgOutMessage)
	ON_MESSAGE(WM_ATLAS_DBG_IN_MESSAGE, OnAtlasDbgInMessage)
	ON_MESSAGE(WM_ATLAS_DBG_ENTER_EBOOT, OnAtlasEnterEboot)
	ON_MESSAGE(WM_ATLAS_DBG_DOWNLOAD_NK_5, OnAtlasDownloadNk5)
	ON_MESSAGE(WM_ATLAS_DBG_DOWNLOAD_NK_4, OnAtlasDownloadNk4)
	ON_MESSAGE(WM_ATLAS_DUMP_NF,OnAtlasDumpNF)
	ON_MESSAGE(WM_ATLAS_GET_ONE_SECTOR_DATA,OnAtlasGetOneSectorData)
	ON_MESSAGE(WM_ATALS_CONNECT_BROKEN,OnAtlasUSBConnectBroken)    
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAtlasMgr2Dlg message handlers

BOOL CAtlasMgr2Dlg::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
	m_nTransPort = AfxGetApp()->GetProfileInt("Nboot", "Transport", 0);
	m_nFlashType = AfxGetApp()->GetProfileInt("Nboot", "FlashType", 0);
	m_nPort = AfxGetApp()->GetProfileInt("Nboot", "Port", 0);
	m_nBaud = AfxGetApp()->GetProfileInt("Nboot", "Baud", 0);	
	m_nChipType = AfxGetApp()->GetProfileInt("Nboot", "Chip", 0);
	m_nGPIOPreLoad1Value = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD1Value", 0);
	m_nGPIOPreLoad1Group = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD1Group", 0);
	m_nGPIOPreLoad1Pins = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD1Pins", 0);
	m_nGPIOPreLoad2Value = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD2Value", 0);
	m_nGPIOPreLoad2Group = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD2Group", 0);
	m_nGPIOPreLoad2Pins = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD2Pins", 0);
	m_nGPIOPreLoad3Value = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD3Value", 0);
	m_nGPIOPreLoad3Group = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD3Group", 0);
	m_nGPIOPreLoad3Pins = AfxGetApp()->GetProfileInt("Nboot", "GPIOPRELOAD3Pins", 0);


    CArray<SSerInfo,SSerInfo&> asi;
    EnumSerialPorts(asi,FALSE/*include all*/);

   for (int ii=0; ii<asi.GetSize(); ii++) {
       m_combo_com_port.AddString(asi[ii].strPortName);
       TRACE("Find out Serial port:strDevPath=%s  , asi[ii].strPortName=%s,asi[ii].strFriendlyName=%s, strPortDesc=%s\r\n",asi[ii].strDevPath,asi[ii].strPortName,asi[ii].strFriendlyName,asi[ii].strPortDesc);
    }
    
    CString strNorType;
    CString strType;
    DWORD dwStrPlace = 0;
    DWORD dwNumOfNorType = 0;
    //CString strInitDir = AfxGetApp()->GetProfileString("NBoot", "Path", "");
    strNorType = AfxGetApp()->GetProfileString("NorFlash", "Type", "");

    strNorType.TrimLeft();
    strNorType.TrimRight();
    TRACE("NorType=%s\r\n",strNorType);  
    while(1)
    {
        DWORD dwCurrentTypeFinishPlace;
        if(dwStrPlace == strNorType.GetLength())
            break;
        
        dwCurrentTypeFinishPlace = strNorType.Find(';',dwStrPlace);
        if(dwCurrentTypeFinishPlace == dwStrPlace)
        {
            dwStrPlace++;
            continue;
        }
        
        if(-1 != dwCurrentTypeFinishPlace)
        {
           
           strType = strNorType.Mid(dwStrPlace,dwCurrentTypeFinishPlace - dwStrPlace);
           strType.TrimLeft();
           strType.TrimRight();
           m_NorFlash_Type.AddString(strType);
           dwStrPlace = dwCurrentTypeFinishPlace + 1;
           dwNumOfNorType++;
           TRACE("NorType:%s\r\n",strType);
           
        }
        else if(-1 == dwCurrentTypeFinishPlace)
        {
            strType = strNorType.Right(strNorType.GetLength() - dwStrPlace);
            strType.TrimLeft();
            strType.TrimRight();
            m_NorFlash_Type.AddString(strType);
            dwNumOfNorType++;
            TRACE("NorType:%s\r\n",strType);
            break;
        }

    }
    m_nNorFlashType = AfxGetApp()->GetProfileInt("NorFlash", "Default", 0);
    if(dwNumOfNorType < (DWORD)(m_nNorFlashType + 1))
        m_nNorFlashType = 0;
    else if(-1 == m_nNorFlashType && dwNumOfNorType>0)
        m_nNorFlashType = 0;
    m_NorFlash_Type.SetDroppedWidth(dwNumOfNorType);
	m_inputEdit.SetParent(GetSafeHwnd());
	UpdateData(FALSE);
	UpdateUI();
/*	if(m_nTransPort==2)
		GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(TRUE);	*/
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CAtlasMgr2Dlg::UpdateUI()
{
	GetDlgItem(IDC_CS0)->EnableWindow(FALSE);
	GetDlgItem(IDC_CS3)->EnableWindow(FALSE);
	GetDlgItem(IDC_CS1)->EnableWindow(FALSE);
	GetDlgItem(IDC_CS2)->EnableWindow(FALSE);
	
	GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(FALSE);
	GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(FALSE);
	GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(FALSE);
	GetDlgItem(IDC_UPDATE_NANDXIP)->EnableWindow(FALSE);
	GetDlgItem(IDC_UPDATE_DM)->EnableWindow(FALSE);	
	GetDlgItem(IDC_USB_OUTPUT)->EnableWindow(TRUE);	
	GetDlgItem(IDC_USB_INPUT)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_BLOCKS)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_WHOLE_CHIP)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_BLOCK_START)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_BLOCK_END)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_NBOOT)->EnableWindow(FALSE);	
	GetDlgItem(IDC_DUMP_EBOOT)->EnableWindow(FALSE);	
	
	GetDlgItem(IDC_UPDATE_NBOOT)->SetWindowText("Update NBOOT ...");

	if(m_bOpened)
	{
		if(m_nTransPort!=ATLAS_TRANSPORT_JTAG)
		{
			GetDlgItem(IDC_CS0)->EnableWindow(TRUE);
			GetDlgItem(IDC_CS1)->EnableWindow(TRUE);
			GetDlgItem(IDC_CS2)->EnableWindow(TRUE);
			GetDlgItem(IDC_CS3)->EnableWindow(TRUE);
		}

		GetDlgItem(IDC_OPEN_DEVICE)->SetWindowText("Close");

		GetDlgItem(IDC_TRANSPORT_USB)->EnableWindow(FALSE);
		GetDlgItem(IDC_TRANSPORT_RS232)->EnableWindow(FALSE);
		GetDlgItem(IDC_TRANSPORT_JTAG)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_COM_PORT)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_COM_BAUD)->EnableWindow(FALSE);
		GetDlgItem(IDC_FLASHTYPE_NAND)->EnableWindow(FALSE);
		GetDlgItem(IDC_FLASHTYPE_NOR)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_CHIP)->EnableWindow(FALSE);
        GetDlgItem(IDC_COMBO_NORFLASH_TYPE)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_VALUE)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_GROUP)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_PINS)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_VALUE)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_GROUP)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_PINS)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_VALUE)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_GROUP)->EnableWindow(FALSE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_PINS)->EnableWindow(FALSE);
		
		if(m_nTransPort==ATLAS_TRANSPORT_JTAG)
		{
			GetDlgItem(IDC_UPDATE_NBOOT)->SetWindowText("Jtag Download ...");
			GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(TRUE);
		}
		else if(m_nTransPort==ATLAS_TRANSPORT_RS232)
		{
            if(ATLAS_BOOT_STAGE_BOOTSTRAPE == g_atlasdevinfo.dwBootStage)
            {
                GetDlgItem(IDC_UPDATE_NBOOT)->SetWindowText("Update BootStrap");
                GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(TRUE);
            }
            else
            {
                GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(TRUE);
                GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(TRUE);
                if(g_atlasdevinfo.dwNandXIPInfo)
                    GetDlgItem(IDC_UPDATE_NANDXIP)->EnableWindow(TRUE);
                if(g_atlasdevinfo.dwDMReservedSize>0)
                    GetDlgItem(IDC_UPDATE_DM)->EnableWindow(TRUE);
            }
			//GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(TRUE);
		}
		else if(m_nTransPort==ATLAS_TRANSPORT_USB)
		{
//			GetDlgItem(IDC_USB_OUTPUT)->EnableWindow(TRUE);	
			GetDlgItem(IDC_USB_INPUT)->EnableWindow(TRUE);	
			GetDlgItem(IDC_USB_INPUT)->SetFocus();	
            
            if(ATLAS_BOOT_STAGE_NBOOT == g_atlasdevinfo.dwBootStage)
            {
                GetDlgItem(IDC_UPDATE_NBOOT)->EnableWindow(TRUE);
                GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(TRUE);
                
                if(g_atlasdevinfo.dwNandXIPInfo)
                    GetDlgItem(IDC_UPDATE_NANDXIP)->EnableWindow(TRUE);
                if(g_atlasdevinfo.dwDMReservedSize>0)
                    GetDlgItem(IDC_UPDATE_DM)->EnableWindow(TRUE);
                
            }
            else if(ATLAS_BOOT_STAGE_EBOOT == g_atlasdevinfo.dwBootStage )
            {
                GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(FALSE);
            }
            else if(ATLAS_BOOT_STAGE_NORFLASH_EBOOT == g_atlasdevinfo.dwBootStage )
            {
                GetDlgItem(IDC_UPDATE_NB0)->EnableWindow(FALSE);
                GetDlgItem(IDC_UPDATE_EBOOT)->EnableWindow(TRUE);
                GetDlgItem(IDC_UPDATE_DM)->EnableWindow(TRUE);
            }
			
		}

	}
	else
	{
		GetDlgItem(IDC_TRANSPORT_USB)->EnableWindow(TRUE);
		GetDlgItem(IDC_TRANSPORT_RS232)->EnableWindow(TRUE);
		GetDlgItem(IDC_TRANSPORT_JTAG)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_COM_PORT)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_COM_BAUD)->EnableWindow(TRUE);
		GetDlgItem(IDC_FLASHTYPE_NAND)->EnableWindow(TRUE);
		GetDlgItem(IDC_FLASHTYPE_NOR)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_CHIP)->EnableWindow(TRUE);
        GetDlgItem(IDC_COMBO_NORFLASH_TYPE)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_VALUE)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_GROUP)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD1_PINS)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_VALUE)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_GROUP)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD2_PINS)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_VALUE)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_GROUP)->EnableWindow(TRUE);
		GetDlgItem(IDC_COMBO_GPIO_PRELOAD3_PINS)->EnableWindow(TRUE);

		GetDlgItem(IDC_OPEN_DEVICE)->SetWindowText("Open");
		GetDlgItem(IDC_DEV_INFO)->SetWindowText("");
	}
	
	return;
}

void CAtlasMgr2Dlg::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 CAtlasMgr2Dlg::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);

⌨️ 快捷键说明

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