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

📄 mainframe.cpp

📁 一个简单而又高效的嵌入式操作系统.包括GUI及文件系统.仿Windows设计,类似于MFC风格
💻 CPP
字号:
// CMainFrame.cpp: implementation of the CMainFrame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MainFrame.h"
#define ITEM_W 85
#define ITEM_H 90


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMainFrame::CMainFrame()
{
	m_nBackColor=RGB(6,105,178)|EdgeRGB(255,192,0);
	m_nStyle|=WS_MAXIMIZE;
	//m_nStyle &= ~WS_CAPTION;
}

CMainFrame::~CMainFrame()
{

}

//消息处理函数
void CMainFrame::WndProc(int nMessage, int wParam, int lParam)
{
	GWnd* pWnd;
	switch(nMessage)
	{
	case WM_PAINT:
		if(wParam & ~ODA_CLIENT)OnNcPaint();
		if(wParam & ODA_CLIENT){OnPaint();DrawControls();}
		break;
	case WM_COMMAND:
		pWnd=(GWnd*)wParam;
		if(pWnd==&m_btnOK)OnOK();
		else if(pWnd==&m_btnCancel)OnCancel();
		else OnRadio(pWnd);
		break;
	case WM_CREATE:
		OnCreate();
		break;
	case WM_CLOSE:
		if(wParam)OnQueryClose();
		break;
	case WM_TIMER:
		OnTimer(lParam);
		break;
	case WM_LBUTTONDOWN:
		GDialog::WndProc(nMessage, wParam,lParam);
		if(!(m_nState & ODS_GRAYED) && PtInRect(wParam,lParam,m_Rect))OnButton(TRUE,wParam,lParam);
		break;
	case WM_LBUTTONUP:
		if(PtInRect(wParam,lParam,m_Rect))OnButton(FALSE,wParam,lParam);
		else GDialog::WndProc(nMessage, wParam,lParam);
		break;
	default:
		GDialog::WndProc(nMessage, wParam,lParam);
		break;
	}
}

void CMainFrame::OnCreate()
{
	
	m_nTextTop=-20;
	GDialog::OnCreate();
	m_strText="GSPDA 2005";

	int nWidth=m_Rect.right-m_Rect.left;
	int nHeight=m_Rect.bottom-m_Rect.top;
/*	KString str;
	for(int i=0;i<5;i++)
	{
		str.Format("Sng%d",i);
		AddControl(&m_btnRadio[i],str,BS_RADIOBUTTON|BS_PUSHLIKE);
		m_btnRadio[i].MoveWindow(nWidth-(i<3?80:100),10+i*30,75,25);
	}
	m_btnRadio[0].m_nStyle|=WS_GROUP;
	m_btnRadio[3].m_nStyle|=WS_GROUP;*/
	
	//AddControl(&m_btnOK,"启动",0);
	//m_btnOK.MoveWindow(nWidth-160,nHeight-40,70,35);
	/*AddControl(&m_btnCancel,"退出",0);
	m_btnCancel.MoveWindow(nWidth-80,nHeight-40,70,35);
	m_rectClick.left=-1;*/
	
}

void CMainFrame::OnPaint()
{
	//GDialog::OnPaint();
{
	int y,dy,y1=m_Rect.top,y2=m_Rect.bottom,h=y2-y1+1;
	int c,r,g,b;
	for(y=y1;y<=y2;y++)
	{
		dy=y2-y;
		r=(255-6)*dy/h+6;
		g=(255-105)*dy/h+105;
		b=(255-178)*dy/h+178;
		m_nForeColor=RGB(r,g,b);
		Line(m_Rect.left,y,m_Rect.right,y);
	}
	m_nForeColor=RGB(0,0,0);
}
	
	RECT r;


	r=MakeRect(m_Rect.left,m_Rect.top-m_nTextTop,ITEM_W,ITEM_H-5);
	DrawItem(&acBmpMyComp,"Camera",r);
	
	r.left+=ITEM_W;r.right+=ITEM_W;
	DrawItem(&acBmpUser,"User",r);
	
	r.left+=ITEM_W;r.right+=ITEM_W;
	DrawItem(&acBmpPower,"GSM/3G",r);

	r=MakeRect(m_Rect.left,r.bottom+5,ITEM_W,ITEM_W-5);
	DrawItem(&acBmpChart,"Vedio",r);
	
	r.left+=ITEM_W;r.right+=ITEM_W;
	DrawItem(&acBmpHelp,"Audio",r);
}

void CMainFrame::OnQueryClose()
{
	if(m_nDlgResult==-1)
	{
		int nResult=MessageBox("Close GSPDA?",NULL,MB_YESNO|MB_ICONQUESTION);
		if(nResult==IDNO)m_nDlgResult=0;
	}
}


void CMainFrame::DrawItem(const BITMAP *bm, LPCTSTR szText,RECT rect)
{
	RECT r;
	int w0=(rect.left+rect.right+1)/2;
	
	r=MakeRect(w0-bm->bmWidth/2,rect.top+m_pFont->nHeight/2,bm->bmWidth,bm->bmHeight);
	DrawBitmap(bm,r);
	r.bottom=rect.bottom-m_pFont->nHeight;
	r.left=rect.left;r.right=rect.right;
	DrawText(szText,r,DT_CENTER|DT_BOTTOM);
}

void CMainFrame::OnOK()
{
	/*GIME dlg;
	dlg.m_btn[0].m_strText=m_btnOK.m_strText;
	dlg.DoModal();
	m_btnOK.m_strText=dlg.m_btn[0].m_strText;*/

	GIME dlg;
	KString str;
	KFile file;
	file.Open("fdj.ini",KFile::modeCreate);
	file.ReadString(str);
	dlg.m_btn[0].m_strText=str;
	dlg.DoModal();
	str=dlg.m_btn[0].m_strText;
	file.SeekToBegin();
	file.WriteString(str);
}

void CMainFrame::OnCancel()
{
	m_nDlgResult=IDCANCEL;
}

void CMainFrame::OnRadio(GWnd *pWnd)
{
	if(pWnd==&m_btnRadio[0])
	{
		for(int i=0;i<5;i++)
		{
			m_btnRadio[i].m_nStyle |=BS_PUSHLIKE;
			m_btnRadio[i].PostMessage(WM_PAINT,-1,-1);
		}
	}
	else if(pWnd==&m_btnRadio[1])
	{
		for(int i=0;i<5;i++)
		{
			m_btnRadio[i].m_nStyle &= ~BS_PUSHLIKE;
			m_btnRadio[i].m_nStyle &= ~BS_LEFTTEXT;
			m_btnRadio[i].PostMessage(WM_PAINT,-1,-1);
		}
	}
	else if(pWnd==&m_btnRadio[2])
	{
		for(int i=0;i<5;i++)
		{
			m_btnRadio[i].m_nStyle &= ~BS_PUSHLIKE;
			m_btnRadio[i].m_nStyle |= BS_LEFTTEXT;
			m_btnRadio[i].PostMessage(WM_PAINT,-1,-1);
		}
	}
}

void CMainFrame::OnTimer(int nTick)
{
	m_strText.Format("Tick:%d",nTick);
	PostMessage(WM_PAINT,ODA_FOCUS,-1);
}

void CMainFrame::OnButton(BOOL bDown, int x, int y)
{
	x-=m_Rect.left;y-=m_Rect.top;
	int nColor=m_nForeColor;
	if(bDown==1)
	{
		if(m_Rect.left!=-1)
		{
			OnButton(-1,m_rectClick.left,m_rectClick.top);
		}
		m_rectClick.left=m_Rect.left+(x/ITEM_W)*ITEM_W;
		m_rectClick.right=m_rectClick.left+ITEM_W;
		m_rectClick.top=m_Rect.top-m_nTextTop-(y/ITEM_H)*ITEM_H;
		m_rectClick.bottom=m_rectClick.top+ITEM_H-5;
		m_nForeColor=RGB(255,255,0)|PS_DOT1;
		Rectangle(m_rectClick);
	}
	else
	{
		OnPaint();DrawControls();
		//m_nForeColor=m_nBackColor & 0xffffff;
		//Rectangle(m_rectClick);
		if(PtInRect(x,y,m_rectClick) && bDown==0)
		{
			x/=ITEM_W;y/=ITEM_H;
			if(x==0 && y==0)
			{
				OnSystem();
			}
			if(x==0 && y==1)
			{
				OnChart();
			}
		}
		m_rectClick.left=-1;
	}
	m_nForeColor=nColor;
}

void CMainFrame::OnSystem()
{
	CGenIO dlg;
	dlg.DoModal();
}

void CMainFrame::OnChart()
{
	CVibration dlg;
	dlg.DoModal();
}

⌨️ 快捷键说明

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