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

📄 gmsgbox.cpp

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

#include "..\stdafx.h"
#include "GMsgBox.h"

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

GMsgBox::GMsgBox()
{

}

GMsgBox::~GMsgBox()
{

}

//消息处理函数
void GMsgBox::WndProc(int nMessage, int wParam, int lParam)
{
	switch(nMessage)
	{
	case WM_PAINT:
		if(wParam & ~ODA_CLIENT)OnNcPaint();
		if(wParam & ODA_CLIENT){OnPaint();DrawControls();}
		break;
	case WM_CREATE:
		OnCreate();
		break;
	default:
		GDialog::WndProc(nMessage, wParam,lParam);
		break;
	}
}

void GMsgBox::Create(LPCTSTR szText,LPCTSTR szCaption,int nType)
{
	m_lblText.m_strText=szText;
	m_strText=szCaption;
	m_nType=nType;

	GDialog::Create();
}

void GMsgBox::OnCreate()
{
	int nColor=m_nForeColor;
	int i,w,w2,bw,h,nCnt;
	RECT rect;
	SIZE size;

	m_nForeColor=nColor & CLR_MASK;
	
	m_r0=0;
	nCnt=0;
	switch(m_nType & 0x0f)
	{
	case MB_OK:
		AddControl(&m_btn1,"确定",0);
		m_r0=IDOK;
		m_r1=IDOK;
		nCnt=1;
		break;
	case MB_OKCANCEL:
		AddControl(&m_btn1,"确定",0);
		AddControl(&m_btn2,"取消",0);
		m_r0=IDCANCEL;
		m_r1=IDOK;m_r2=IDCANCEL;
		nCnt=2;
		break;
	case MB_ABORTRETRYIGNORE:
		AddControl(&m_btn1,"中止",0);
		AddControl(&m_btn2,"重试",0);
		AddControl(&m_btn3,"忽略",0);
		m_r1=IDABORT;m_r2=IDRETRY;m_r3=IDIGNORE;
		nCnt=3;
		break;
	case MB_YESNOCANCEL:
		AddControl(&m_btn1,"是",0);
		AddControl(&m_btn2,"否",0);
		AddControl(&m_btn3,"取消",0);
		m_r0=IDCANCEL;
		m_r1=IDYES;m_r2=IDNO;m_r3=IDCANCEL;
		nCnt=3;
		break;
	case MB_YESNO:
		AddControl(&m_btn1,"是",0);
		AddControl(&m_btn2,"否",0);
		m_r1=IDYES;m_r2=IDNO;
		nCnt=2;
		break;
	case MB_RETRYCANCEL:
		AddControl(&m_btn1,"重试",0);
		AddControl(&m_btn2,"取消",0);
		m_r0=IDCANCEL;
		m_r1=IDRETRY;m_r2=IDCANCEL;
		nCnt=2;
	case MB_NOBUTTON:
		m_r0=IDOK;
		nCnt=0;
		break;
	}
	m_btn1.m_pFont=&GUI_DEFAULTFONT;
	m_btn2.m_pFont=&GUI_DEFAULTFONT;
	m_btn3.m_pFont=&GUI_DEFAULTFONT;
	i=m_strText.Find("\n",0);
	if(i>-1)
	{
		m_btn1.m_strText=m_strText.Mid(i+1,-1);
		m_strText=m_strText.Left(i);
		i=m_btn1.m_strText.Find("\n",0);
		if(i>-1)
		{
			m_btn2.m_strText=m_btn1.m_strText.Mid(i+1,-1);
			m_btn1.m_strText=m_btn1.m_strText.Left(i);
			i=m_btn2.m_strText.Find("\n",0);
			if(i>-1)
			{
				m_btn3.m_strText=m_btn2.m_strText.Mid(i+1,-1);
				m_btn2.m_strText=m_btn2.m_strText.Left(i);
			}
		}
	}
	if(m_strText.GetLength()==0)m_nStyle &= ~WS_BORDER; 
	if(!m_r0)m_nStyle &= ~WS_SYSMENU;

	switch(m_nType & 0xf0)
	{
	case MB_ICONERROR:
		m_lblIcon.SetBitmap(&acBmpMBError);
		break;
	case MB_ICONQUESTION:
		m_lblIcon.SetBitmap(&acBmpMBQuestion);
		break;
	case MB_ICONWARNING:
		m_lblIcon.SetBitmap(&acBmpMBWarning);
		break;
	case MB_ICONINFORMATION:
		m_lblIcon.SetBitmap(&acBmpMBInformation);
		break;
	}

	m_nForeColor=nColor;

	size=GetTextExtent(m_lblText.m_strText.GetLength());
	w=GUI_DEFAULTFONT.nHeight*2+size.cx;
	h=nCnt?4*GUI_DEFAULTFONT.nHeight+12:2*GUI_DEFAULTFONT.nHeight;
	if(m_lblIcon.GetBitmap())
	{
		AddControl(&m_lblIcon,NULL,SS_BITMAP|SS_REALSIZEIMAGE);
		w+=m_lblIcon.GetBitmap()->bmWidth+GUI_DEFAULTFONT.nHeight;
		h+=max(m_lblIcon.GetBitmap()->bmHeight,size.cy);
	}
	else h+=size.cy;
	AddControl(&m_lblText,NULL,0);
	i=6;
	if(nCnt>0)i=max(i,m_btn1.m_strText.GetLength());
	if(nCnt>1)i=max(i,m_btn2.m_strText.GetLength());
	if(nCnt>2)i=max(i,m_btn3.m_strText.GetLength());
	bw=(GUI_DEFAULTFONT.nWidth*i+12);
	w2=bw*nCnt+(nCnt+3)*GUI_DEFAULTFONT.nHeight/2;
	
	i=max(w,w2)+4;
	rect.left=(GUI_CXSCREEN-i)/2;
	rect.right=rect.left+i-1;
	i=(m_nStyle & WS_CAPTION)==WS_CAPTION?h+GUI_DEFAULTFONT.nHeight+6:h+4;
	rect.top=(GUI_CYSCREEN-i)/2;
	rect.bottom=rect.top+i-1;
	MoveWindow(rect);

	i=max(w,w2);
	rect.top=GUI_DEFAULTFONT.nHeight;
	if(m_lblIcon.GetBitmap())
	{
		rect.left=(i-w+1)/2+GUI_DEFAULTFONT.nHeight;
		rect.right=rect.left+m_lblIcon.GetBitmap()->bmWidth-1;
		rect.bottom=rect.top+max(m_lblIcon.GetBitmap()->bmHeight,size.cy)-1;
		m_lblIcon.MoveWindow(rect);
		rect.left=rect.right+GUI_DEFAULTFONT.nHeight;
	}
	else
	{
		rect.left=GUI_DEFAULTFONT.nHeight;
		rect.bottom=rect.top+size.cy;
	}
	rect.right=(i+w+1)/2-GUI_DEFAULTFONT.nHeight;
	m_lblText.MoveWindow(rect);

	rect.top=rect.bottom+1+GUI_DEFAULTFONT.nHeight;
	rect.bottom=rect.top+GUI_DEFAULTFONT.nHeight+11;
	switch(nCnt)
	{
	case 1:
		rect.left=(i-bw+1)/2;
		rect.right=rect.left+bw-1;
		m_btn1.MoveWindow(rect);
		break;
	case 2:
		rect.left=(i-w2+1)/2+GUI_DEFAULTFONT.nHeight;
		rect.right=rect.left+bw-1;
		m_btn1.MoveWindow(rect);

		rect.right=(i+w2+1)/2-GUI_DEFAULTFONT.nHeight;
		rect.left=rect.right-bw+1;
		m_btn2.MoveWindow(rect);
		break;
	case 3:
		rect.left=(i-w2+1)/2+GUI_DEFAULTFONT.nHeight;
		rect.right=rect.left+bw-1;
		m_btn1.MoveWindow(rect);

		rect.left=(i-bw+1)/2;
		rect.right=rect.left+bw-1;
		m_btn2.MoveWindow(rect);

		rect.right=(i+w2+1)/2-GUI_DEFAULTFONT.nHeight;
		rect.left=rect.right-bw+1;
		m_btn3.MoveWindow(rect);
		break;
	}

	m_nForeColor=nColor;
}


int GMsgBox::PeakButton()
{
	GWnd* pWnd=(GWnd*)m_nDlgResult;

	if(pWnd==&m_btn1)m_nDlgResult=m_r1;
	else if(pWnd==&m_btn2)m_nDlgResult=m_r2;
	else if(pWnd==&m_btn3)m_nDlgResult=m_r3;
	else if(pWnd)m_nDlgResult=m_r0;
	else m_nDlgResult=0;

	return m_nDlgResult;
}

⌨️ 快捷键说明

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