www.pudn.com > GOS.rar > GMsgBox.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; 
}