16,472
社区成员
发帖
与我相关
我的任务
分享
class GPMessageBoxDlg : public GPBaseDialog
{
DECLARE_DYNAMIC(GPMessageBoxDlg)
int m_nWidthExtend, //宽度扩展量
m_nHeightExtend, //高度扩展量
m_nMaxLen; //信息行的最大长度
UINT m_uDlgMode; //对话框样式
CFont m_fontMsg; //信息的字体
CStringArray m_strarrayMsg; //信息字符串的数组
public:
GPMessageBoxDlg(CWnd* pParent = NULL); // 标准构造函数
virtual ~GPMessageBoxDlg();
/**
* SetMessageFont(const CString& strFont, int nPointSize, int nWeight)
* 此函数的作用是现实信息的文字的字体
* @param: strFont 该参数指定了字体的名称
* @param: nPointSize 该参数指定了字号的大小
* @param: nWeight 该参数指定了字体的样式
* @return: void 返回值为空
**/
void SetMessageFont(const CString& strFont, int nPointSize, int nWeight);
/**
* RunMessageBox(CString strMessage, UINT uDlgMode)
* 该函数用于运行消息框
* @param: strMessage 该参数传入欲显示的消息
* @param: uDlgMode 该参数传入界面风格
* @return: INT_PTR 返回对话框的处理ID
**/
INT_PTR RunMessageBox(CString strMessage, UINT uDlgMode=MESSAGEBOX_OK_ONLY);
/**
* RunMessageBox(UINT uMsgID, UINT uDlgMode)
* 该函数用于运行消息框
* @param: uMsgID 该参数传入欲显示的消息ID
* @param: uDlgMode 该参数传入欲定制的界面的ID
* @return: INT_PTR 返回对话框的处理ID
**/
INT_PTR RunMessageBox(UINT uMsgID, UINT uDlgMode=MESSAGEBOX_OK_ONLY);
// 对话框数据
enum { IDD = IDD_MESSAGEBOX };
GPButtonNormal m_norbtnOK, //确定按钮的控制变量
m_norbtnCancel; //取消按钮的控制变量
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
};
#include "stdafx.h"
#include "GPGameBridge.h"
#include "GPMessageBoxDlg.h"
#include ".\gpmessageboxdlg.h"
#include ".\gpinterface.h"
// GPMessageBoxDlg 对话框
IMPLEMENT_DYNAMIC(GPMessageBoxDlg, GPBaseDialog)
GPMessageBoxDlg::GPMessageBoxDlg(CWnd* pParent /*=NULL*/)
: GPBaseDialog(GPMessageBoxDlg::IDD, pParent)
{
m_nWidthExtend = 0;
m_nHeightExtend = 0;
m_nMaxLen = 20;
m_uDlgMode = MESSAGEBOX_OK_ONLY;
}
GPMessageBoxDlg::~GPMessageBoxDlg()
{
}
void GPMessageBoxDlg::SetMessageFont(const CString& strFont, int nPointSize, int nWeight)
{
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
//设置字体样式
_tcscpy(lf.lfFaceName, strFont);
lf.lfHeight = nPointSize;
lf.lfWeight = nWeight;
lf.lfCharSet = GB2312_CHARSET;
//清楚已有样式
if (m_fontMsg.GetSafeHandle())
m_fontMsg.DeleteObject();
//设置字体
m_fontMsg.CreateFontIndirect(&lf);
}
INT_PTR GPMessageBoxDlg::RunMessageBox(CString strMessage, UINT uDlgMode)
{
CString strTemp;
int nCount;
//清空数组
m_strarrayMsg.RemoveAll();
//分解消息
while(strMessage.Find('\n')!=-1)
{
nCount = strMessage.Find('\n');
strTemp = strMessage.Left(nCount);
strMessage = strMessage.Mid(nCount+1);
m_strarrayMsg.Add(strTemp);
if(strTemp.GetLength()>m_nMaxLen)
m_nMaxLen = strTemp.GetLength();
}
m_strarrayMsg.Add(strMessage);
if(strMessage.GetLength()>m_nMaxLen)
m_nMaxLen = strMessage.GetLength();
m_nWidthExtend = 6*(m_nMaxLen-20);
m_nHeightExtend = 12*((int)m_strarrayMsg.GetCount()-1);
m_uDlgMode = uDlgMode;
//禁用托盘
GPInterface::m_bIsEnableTray = false;
//调用消息框
MessageBeep(MB_ICONWARNING);
INT_PTR nResponse = DoModal();
//启用托盘
GPInterface::m_bIsEnableTray = true;
return nResponse;
}
INT_PTR GPMessageBoxDlg::RunMessageBox(UINT uMsgID, UINT uDlgMode)
{
CString strMessage;
//加载字符串
strMessage.LoadString(uMsgID);
//运行对话框
return RunMessageBox(strMessage, uDlgMode);
}
void GPMessageBoxDlg::DoDataExchange(CDataExchange* pDX)
{
GPBaseDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDOK, m_norbtnOK);
DDX_Control(pDX, IDCANCEL, m_norbtnCancel);
}
BEGIN_MESSAGE_MAP(GPMessageBoxDlg, GPBaseDialog)
ON_WM_PAINT()
END_MESSAGE_MAP()
// GPMessageBoxDlg 消息处理程序
BOOL GPMessageBoxDlg::OnInitDialog()
{
GPBaseDialog::OnInitDialog();
//设置窗口标题
CString strCaption;
strCaption.LoadString(GPMAINFRAME_CAPTION_STR);
SetWindowText(strCaption);
//设置窗口
CRect rectWnd;
GetWindowRect(rectWnd);
rectWnd.right += m_nWidthExtend;
rectWnd.bottom += m_nHeightExtend;
MoveWindow(rectWnd);
//设置按钮
m_norbtnOK.SetButtonBitmap("IDB_BITMAP_NORMALBUTTON", 4);
m_norbtnOK.SetWindowText(GPSERIALDLG_BUTTON_OK_STR);
m_norbtnCancel.SetButtonBitmap("IDB_BITMAP_NORMALBUTTON", 4);
m_norbtnCancel.SetWindowText(GPCONFIGDLG_BUTTON_CANCEL_STR);
//布置界面
switch(m_uDlgMode)
{
case MESSAGEBOX_OK_ONLY:
{
m_norbtnCancel.ShowWindow(SW_HIDE);
m_norbtnOK.MoveButton(rectWnd.Width()/2-35, rectWnd.Height()-60);
}break;
case MESSAGEBOX_OKCANCEL:
{
m_norbtnOK.MoveButton(rectWnd.Width()/2-66-10, rectWnd.Height()-60);
m_norbtnCancel.MoveButton(rectWnd.Width()/2+10, rectWnd.Height()-60);
}break;
}
//设置字体
SetMessageFont("宋体", 12, FW_NORMAL);
return TRUE;
}
void GPMessageBoxDlg::OnPaint()
{
CPaintDC dc(this);
int nOffset = 15;
CRect rectClient;
CDC* pMemDC=new CDC;
CBitmap bitmapTemp, *pOldBitmap;
CRect rect;
int nMargin = 2;
//获取客户区
GetClientRect(&rectClient);
GetClientRect(rect);
rect.left += nMargin;
rect.right -= nMargin;
rect.bottom -= nMargin;
//创建位图内存
bitmapTemp.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
pMemDC->CreateCompatibleDC(&dc);
pOldBitmap=pMemDC->SelectObject(&bitmapTemp);
//填充底色
pMemDC->FillSolidRect(0, 0, rectClient.Width(), rectClient.Height(), RGB(255, 156, 96));
pMemDC->FillSolidRect(rect, RGB(255, 231, 207));
DrawIconEx(pMemDC->GetSafeHdc(), rect.left+10, rect.top+10, AfxGetApp()->LoadIcon(IDI_ICON_WARNING), 32, 32, 0, NULL, DI_NORMAL);
//输出消息
CFont* pOldFont = pMemDC->SelectObject(&m_fontMsg);
for(int i=0; i<m_strarrayMsg.GetCount(); i++)
{
pMemDC->TextOut(rect.left+50, rect.top+20+nOffset*i, m_strarrayMsg.GetAt(i));
}
pMemDC->SelectObject(pOldFont);
dc.BitBlt(0, 0, rectClient.Width(), rectClient.Height(), pMemDC, 0, 0, SRCCOPY);
pMemDC->SelectObject(pOldBitmap);
ReleaseDC(pMemDC);
delete pMemDC;
}