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

📄 mainfrm.cpp

📁 涉及到SkinMagicLiB等多种界面开发库的应用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"
#include "简易编程器.h"
#include "简易编程器doc.h"
#include "HexEditView.h"

#include "MainFrm.h"
#include "setdia.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
extern		CMyApp theApp;

IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_MESSAGE(WM_PRO_MSG,OnProMsg)
	ON_WM_NCHITTEST()
	ON_WM_CREATE()
	ON_COMMAND(IDR_CORONA, OnCorona)
	ON_COMMAND(IDR_DEVIOR, OnDevior)
	ON_COMMAND(IDR_KROMO, OnKromo)
	ON_COMMAND(IDR_XPBLUE, OnXpblue)
	ON_UPDATE_COMMAND_UI(IDR_CORONA, OnUpdateCorona)
	ON_UPDATE_COMMAND_UI(IDR_DEVIOR, OnUpdateDevior)
	ON_UPDATE_COMMAND_UI(IDR_KROMO, OnUpdateKromo)
	ON_UPDATE_COMMAND_UI(IDR_XPBLUE, OnUpdateXpblue)
	ON_COMMAND(IDR_XPGREAN, OnXpgrean)
	ON_COMMAND(IDR_XPLUS, OnXplus)
	ON_COMMAND(IDR_XPSTEEL, OnXpsteel)
	ON_UPDATE_COMMAND_UI(IDR_XPSTEEL, OnUpdateXpsteel)
	ON_UPDATE_COMMAND_UI(IDR_XPLUS, OnUpdateXplus)
	ON_UPDATE_COMMAND_UI(IDR_XPGREAN, OnUpdateXpgrean)
	ON_COMMAND(IDR_ERASE, OnErase)
	ON_COMMAND(IDR_LOCK, OnLock)
	ON_COMMAND(IDR_CHECK, OnCheck)
	ON_COMMAND(IDR_READ, OnRead)
	ON_COMMAND(IDR_WRITE, OnWrite)
	ON_COMMAND(ID_LOCKBIT_1, OnLockbit1)
	ON_COMMAND(ID_LOCKBIT_2, OnLockbit2)
	ON_COMMAND(ID_LOCKBIT_3, OnLockbit3)
	ON_UPDATE_COMMAND_UI(ID_LOCKBIT_1, OnUpdateLockbit1)
	ON_UPDATE_COMMAND_UI(ID_LOCKBIT_2, OnUpdateLockbit2)
	ON_UPDATE_COMMAND_UI(ID_LOCKBIT_3, OnUpdateLockbit3)
	ON_COMMAND(IDR_SETDIA, OnSetdia)
	ON_UPDATE_COMMAND_UI(IDR_CHECK, OnUpdateCheck)
	ON_UPDATE_COMMAND_UI(IDR_WRITE, OnUpdateWrite)
	ON_COMMAND(IDR_TXTWIN, OnTxtwin)
	ON_UPDATE_COMMAND_UI(IDR_TXTWIN, OnUpdateTxtwin)
	ON_COMMAND(ID_CHIP, OnChip)
	ON_COMMAND(IDR_CHECK_CHIP, OnCheckChip)
	ON_WM_TIMER()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
	ON_CBN_SELENDOK(ID_TOOL_COMBOBOX, OnSelectZoomed)

END_MESSAGE_MAP()
extern char CurChip[];
extern UINT m_LockBits;
extern char skin[];

static UINT indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_TYPE,
};

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	m_bWorkDetectPro=FALSE;
	m_bWorkDetectChip=FALSE;
	m_bWorkErase=FALSE;
	m_bWorkWrite=FALSE;
	m_bWorkRead=FALSE;
	m_bWorkCheck=FALSE;
	m_bAutoWork=FALSE;
}

CMainFrame::~CMainFrame()
{
}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	lpCreateStruct->cx =300;
	lpCreateStruct->cy =300;
	m_nProType=0;
	if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	// Set up hot bar image lists.
	CImageList	imageList;
	CBitmap		bitmap;

	//Create and set the normal toolbar image list.
	bitmap.LoadBitmap(IDB_MAINFRAME);
	imageList.Create(32, 32, ILC_COLORDDB|ILC_MASK, 11, 1);
	imageList.Add(&bitmap, RGB(192,192,192));
	m_wndToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
	imageList.Detach();
	bitmap.Detach();

	
	if (!m_wndMyBars.Create(_T("命令"), this, 123 ))
	{
		TRACE0("Failed to create mybar\n");
		return -1;		// fail to create
	}
	m_wndMyBars.m_szHorz=CSize(0,80);

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}
	m_wndStatusBar.SetPaneInfo( 1, ID_SEPARATOR,SBPS_NORMAL, 300 );

    int index = 0;
	RECT rect;

	//找到指定的工具项
    while(m_wndToolBar.GetItemID(index)!=ID_TOOL_COMBOBOX)
		index++;

    //设置指定工具项的宽度并获取新的区域  140是宽度
    m_wndToolBar.SetButtonInfo(index, ID_TOOL_COMBOBOX, TBBS_SEPARATOR, 140);
    m_wndToolBar.GetItemRect(index, &rect);

    //设置位置
    rect.top+=8;
    rect.bottom += 200;

    // 创建并显示
    if (!m_wndToolBar.m_wndZoom.Create(WS_CHILD|WS_VISIBLE | CBS_AUTOHSCROLL | 
                                       CBS_DROPDOWNLIST | CBS_HASSTRINGS ,
                                       rect, &m_wndToolBar, ID_TOOL_COMBOBOX))
    {
       TRACE0("Failed to create combo-box\n");
       return FALSE;
    }
    m_wndToolBar.m_wndZoom.ShowWindow(SW_SHOW);
    LoadChipList();
	m_Pro.m_nSerialPort=m_nSerialPort;
	m_Pro.m_nBaudSel=m_nBaudSel;
	m_Pro.m_pAutoCheck=m_bAutoCheck;
	m_Pro.InitPro(this,m_nProType,m_nIspSpd);
	if(!m_Pro.LoadChipList())
	{
	   AfxMessageBox("加载元件表失败\n");
       return FALSE;
	}
	menu=GetMenu();
	// TODO: Delete these three lines if you don't want the toolbar to
	//  be dockable
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	m_wndMyBars.SetBarStyle(m_wndMyBars.GetBarStyle() |
		CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
	m_wndMyBars.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
#ifdef _SCB_REPLACE_MINIFRAME
    m_pFloatingFrameClass = RUNTIME_CLASS(CSCBMiniDockFrameWnd);
#endif //_SCB_REPLACE_MINIFRAME
	DockControlBar(&m_wndMyBars, AFX_IDW_DOCKBAR_BOTTOM);
	DockControlBar(&m_wndToolBar);
	static UINT BadCommands[] = { 
	//SC_SIZE, SC_MOVE,
	//SC_MINIMIZE, 
	SC_MAXIMIZE, SC_RESTORE, 0
	};
	CMenu *pSysMenu = GetSystemMenu(FALSE);
	for (int i=0; BadCommands[i]; i++) 	pSysMenu->RemoveMenu(BadCommands[i], MF_BYCOMMAND);
	return 0;
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CMDIFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style &= ~(WS_MAXIMIZEBOX);
	cs.style &= ~FWS_ADDTOTITLE; //去除标题条中的文档名 
	cs.style &= ~WS_THICKFRAME; //去除可改变大小的边框 
	cs.style |= WS_DLGFRAME; //增加不能改变大小的边框 
	cs.cx=700;
	cs.cy=500;
	int cxScreen = ::GetSystemMetrics(SM_CXSCREEN);//获得屏幕宽 
	int cyScreen = ::GetSystemMetrics(SM_CYSCREEN); //获得屏幕高 
	cs.x=(cxScreen-700)/2;
	cs.y=(cyScreen-500)/2;
	return CFrameWnd::PreCreateWindow(cs);

}
#ifdef _DEBUG
struct {
	UINT id;
	LPCTSTR name;
} HtCodes[] = {
	{ HTNOWHERE,"HTNOWHERE" },
	{ HTCLIENT,"HTCLIENT" },
	{ HTCAPTION,"HTCAPTION" },
	{ HTSYSMENU,"HTSYSMENU" },
	{ HTSIZE,"HTSIZE" },
	{ HTMENU,"HTMENU" },
	{ HTHSCROLL,"HTHSCROLL" },
	{ HTVSCROLL,"HTVSCROLL" },
	//{ HTMINBUTTON,"HTMINBUTTON" },
	{ HTMAXBUTTON,"HTMAXBUTTON" },
	{ HTLEFT,"HTLEFT" },
	{ HTRIGHT,"HTRIGHT" },
	{ HTTOP,"HTTOP" },
	{ HTTOPLEFT,"HTTOPLEFT" },
	{ HTTOPRIGHT,"HTTOPRIGHT" },
	{ HTBOTTOM,"HTBOTTOM" },
	{ HTBOTTOMLEFT,"HTBOTTOMLEFT" },
	{ HTBOTTOMRIGHT,"HTBOTTOMRIGHT" },
	{ HTBORDER,"HTBORDER" },
	{ HTOBJECT,"HTOBJECT" },
	{ HTCLOSE,"HTCLOSE" },
	{ HTHELP,"HTHELP" },
	{ 0,NULL },
};
#endif

//////////////////
// Override to disallow move/size operations
//
UINT CMainFrame::OnNcHitTest(CPoint point)
{
	UINT hit = CFrameWnd::OnNcHitTest(point);
	return hit;
#ifdef _DEBUG
	// For debugging, display default hit code
	LPCTSTR s = "Unknown";
	for (int i=0; HtCodes[i].name; i++) {
		if (hit == HtCodes[i].id) {
			s = HtCodes[i].name;
			break;
		}
	}
	TRACE(_T("CMainFrame::OnNcHitTest: %s"), s);
#endif

	// disallow these codes: map to HTNOWHERE
	static char DisallowCodes[] = {
		HTLEFT,HTRIGHT,HTTOP,HTTOPLEFT,HTTOPRIGHT,
		HTBOTTOM,HTBOTTOMLEFT,HTBOTTOMRIGHT,HTSIZE,HTCAPTION };

	if (strchr(DisallowCodes, hit)) {
		TRACE(" -- disallowed\n");
		return HTBORDER;
	}
	TRACE("\n");
	return hit;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CMDIFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CMDIFrameWnd::Dump(dc);
}

#endif //_DEBUG


void CMainFrame::OnCorona() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "CORONA" ,"SKINMAGIC");
	strcpy(skin,"CORONA");
	m_wndMyBars.AppendText("选择皮肤:蔚蓝.");
}

void CMainFrame::OnDevior() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "DEVIOR" ,"SKINMAGIC");	
	strcpy(skin,"DEVIOR");
	m_wndMyBars.AppendText("选择皮肤:银灰.");
	
}

void CMainFrame::OnKromo() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "KROMO" ,"SKINMAGIC");	
	strcpy(skin,"KROMO");
	m_wndMyBars.AppendText("选择皮肤:金黄.");
}

void CMainFrame::OnXpblue() 
{ 
	LoadSkinFromResource( AfxGetInstanceHandle()  , "XPBLUE" ,"SKINMAGIC");	
	strcpy(skin,"XPBLUE");
	m_wndMyBars.AppendText("选择皮肤:蓝色XP.");
	
}

void CMainFrame::OnXpgrean() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "XPGREAN" ,"SKINMAGIC");	
	strcpy(skin,"XPGREAN");
	m_wndMyBars.AppendText("选择皮肤:灰绿XP.");
	
}

void CMainFrame::OnXplus() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "XPLUS" ,"SKINMAGIC");	
	strcpy(skin,"XPLUS");
	m_wndMyBars.AppendText("选择皮肤:缩微XP.");
}

void CMainFrame::OnXpsteel() 
{
	LoadSkinFromResource( AfxGetInstanceHandle()  , "XPSTEEL" ,"SKINMAGIC");	
	strcpy(skin,"XPSTEEL");
	m_wndMyBars.AppendText("选择皮肤:银白金属XP.");
	
}


BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) 
{
    if(pMsg -> message == 0x112)
	{
		if(pMsg->wParam==0xf030)		return true;
	}
	return CMDIFrameWnd::PreTranslateMessage(pMsg);
}
extern CString m_strAppPath;//应用程序所在的目录
void CMainFrame::LoadChipList()//从ChipList.chip中载入器件列表
{

	
	CString strEasyIspIni;
	strEasyIspIni=m_strAppPath+"简易编程器.ini";
	//从简易编程器.ini文件获得配置信息
	m_bAutoCheck=GetPrivateProfileInt( "设置","自动检测器件",1,strEasyIspIni);
	m_nBaudSel=GetPrivateProfileInt( "设置","波特率",2,strEasyIspIni);
	m_nSerialPort=GetPrivateProfileInt( "设置","端口",0,strEasyIspIni);
	m_bSound=GetPrivateProfileInt( "设置","声音提示",1,strEasyIspIni);
	m_nIspSpd=GetPrivateProfileInt( "设置","性能",0,strEasyIspIni);
}

BOOL CMainFrame::DestroyWindow() 
{
	CString strEasyIspIni;
	CString s;
	strEasyIspIni=m_strAppPath+"简易编程器.ini";
	s.Format("%d",m_LockBits);
 //   m_wndToolBar.m_wndZoom.GetWindowText( CurChip);
	//保存信息到 简易编程器.ini文件
	WritePrivateProfileString( "芯片","当前芯片",CurChip,strEasyIspIni);
	WritePrivateProfileString( "芯片","加密位",s,strEasyIspIni);
	WritePrivateProfileString( "皮肤","当前皮肤",skin,strEasyIspIni);
	s.Format("%d",m_bAutoCheck);
	WritePrivateProfileString( "设置","自动检测器件",s,strEasyIspIni);
	s.Format("%d",m_nBaudSel);
	WritePrivateProfileString( "设置","波特率",s,strEasyIspIni);
	s.Format("%d",m_nSerialPort);
	WritePrivateProfileString( "设置","端口",s,strEasyIspIni);
	s.Format("%d",m_bSound);
	WritePrivateProfileString( "设置","声音提示",s,strEasyIspIni);
	s.Format("%d",m_nIspSpd);
	WritePrivateProfileString( "设置","性能",s,strEasyIspIni);
	return CMDIFrameWnd::DestroyWindow();
}

void CMainFrame::OnSelectZoomed()
{
    m_wndToolBar.m_wndZoom.GetWindowText(CurChip,100);
	m_Pro.SetStatusCom();
	CString s;
	s.Format("选择芯片:%s",CurChip);
	m_wndMyBars.AppendText(s);
}

void CMainFrame::OnUpdateCorona(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"CORONA"));	
}

void CMainFrame::OnUpdateDevior(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"DEVIOR"));	
	
}

void CMainFrame::OnUpdateKromo(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"KROMO"));	
	
}

void CMainFrame::OnUpdateXpblue(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"XPBLUE"));	
	
}


void CMainFrame::OnUpdateXpsteel(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(!strcmp(skin,"XPSTEEL"));	

⌨️ 快捷键说明

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