?? mainfrm.cpp
字號:
// 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 + -