📄 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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -