GVKun编程网logo

cocos2d-x带有自定义button响应事件的messagebox(cocos button)

7

在这篇文章中,我们将为您详细介绍cocos2d-x带有自定义button响应事件的messagebox的内容,并且讨论关于cocosbutton的相关问题。此外,我们还会涉及一些关于AfxMessag

在这篇文章中,我们将为您详细介绍cocos2d-x带有自定义button响应事件的messagebox的内容,并且讨论关于cocos button的相关问题。此外,我们还会涉及一些关于AfxMessageBox () 和 MessageBox () 的区别 & PCH 预编译头文件(201...、AfxMessageBox()和MessageBox()的区别 & PCH预编译头文件(201...、C# DevExpress XtraMessageBox自定义字体,字体大小,自定义按钮大小,自定义Icon、c# – MessageBoxIcon.Exclamation和MessageBoxIcon.Warning有什么区别?的知识,以帮助您更全面地了解这个主题。

本文目录一览:

cocos2d-x带有自定义button响应事件的messagebox(cocos button)

cocos2d-x带有自定义button响应事件的messagebox(cocos button)

官方给的例子里MessageBox居然只有一个确定按钮,没有我想要的确认,取消按钮,没办法就自己写了一个,难点是确认按钮的回调格式怎么写,定义如下:

bool initWithNode(cocos2d::Node* node,const std::string& msg,
const float& time,cocos2d::Vec2 point,const cocos2d::ccmenuCallback& callback);

注意这里的ccmenuCallback& callback,这是我从官方menuItemImage源代码里抄来的,ccmenuCallback实际上是:

typedef std::function<void(Ref*)> ccmenuCallback;

在实现文件中是这么写:

//确认提交按钮
MenuItemImage* btnOK = MenuItemImage::create("Store/okBtn.png","Store/okBtnDown.png","Store/okBtn.png",callback); //注意这个callback,不要在这里加什么CC_CALLBACK_XX什么的了

在调用的时候这么写:

BDMessageBox* msgBox = BDMessageBox::createtoast(this,“对不起金钱不足,是否充值?”,1.f,
pos,CC_CALLBACK_1(UpdataSence::gotoStoreLayer,this));

这里才用到CC_CALLBACK_1


给出完整的MessageBox源码,比较简陋,可以自己修改内容,不过我还加了从小变大的弹出效果,


BDMessageBox.h

/*********************************
   自定义弹出框
**********************************/
#ifndef _BDMessageBox_
#define _BDMessageBox_

#include "cocos2d.h"

class BDMessageBox : public cocos2d::Layer
{
public:
	BDMessageBox();
	~BDMessageBox();
	//初始化弹出框 node:父结点,msg:显示的消息内容,time:弹出框弹出需要的时间,暂时未用,point:显示在父结点的位置
	//callback: 确认按钮的回调函数
	bool initWithNode(cocos2d::Node* node,const float& time,const cocos2d::ccmenuCallback& callback);

	//产生一个弹出框 node:父结点,msg:显示的消息内容,time:弹出框弹出需要的时间,暂时未用,point:显示在父结点的位置
	//callback: 确认按钮的回调函数
	static BDMessageBox* createtoast(cocos2d::Node* node,const cocos2d::ccmenuCallback& callback);  //std::function<void()> callback

	virtual void onEnter();
protected:
	void OkClick();  //点击OK响应,这里已经不用了,已经改成回调用户定义的callback
	void CancelClick();  //点击cancel响应事件
protected:
	cocos2d::Sprite* _bg; //背影
private:
};
#endif

BDMessageBox.cpp

#include "BDMessageBox.h"
#include "LanguageString.h"

#define TAG_TOAST_LABEL 1130
#define TAG_TOAST_LAYER 1131

using namespace std;
USING_NS_CC;

BDMessageBox::BDMessageBox()
{

}

BDMessageBox::~BDMessageBox()
{

}

bool BDMessageBox::initWithNode(cocos2d::Node* node,const ccmenuCallback& callback )
{
	if (!Layer::init())
	{
		return false;
	}
	//背景
	_bg = Sprite::create("store/msgBoxBg.png");
	this->addChild(_bg);

	Size size = _bg->getContentSize();
	this->setContentSize(size);

	//显示的信息
	//_labelExplain = Label::create(Explain,"Helvetica-Bold",16,Size(200,100),TextHAlignment::LEFT);
	Label* label = Label::create(msg.c_str(),15,TextHAlignment::LEFT,TextVAlignment::CENTER);
	label->setColor(Color3B::YELLOW);
	label->ignoreAnchorPointForPosition(false); //开启锚点有效,不设false就是label被addChild后锚点不是原来的锚点而变为(0,0)左下角,设为false还是取原来的锚点
	label->setAnchorPoint(Vec2::ANCHOR_MIDDLE); //锚点在中间
	label->setTag(TAG_TOAST_LABEL);
	label->setPosition(Vec2(size.width/2,size.height/2));

	_bg->addChild(label);

	//CallFunc* call = CallFunc::create(callback);
	//确认提交按钮
	MenuItemImage* btnOK = MenuItemImage::create("Store/okBtn.png",callback);
	btnOK->setScale(0.8f);
	Menu* btnOkMenu = Menu::create(btnOK,NULL);
	btnOkMenu->setPosition(Vec2(size.width*0.3f,size.height*0.25f));
	_bg->addChild(btnOkMenu,2);

	//取消按钮
	MenuItemImage* btnCancel = MenuItemImage::create("Store/cancelBtn.png","Store/cancelBtnDown.png","Store/cancelBtn.png",CC_CALLBACK_0(BDMessageBox::CancelClick,this));
	btnCancel->setScale(0.8f);
	Menu* btnCancelMenu = Menu::create(btnCancel,NULL);
	btnCancelMenu->setPosition(Vec2(size.width*0.7f,size.height*0.25f));
	_bg->addChild(btnCancelMenu,2);

	//初始设置小
	_bg->setScale(0.01f);
	_bg->setVisible(false);

	node->addChild(this,5);
	this->setPosition(point);

	return true;
}
BDMessageBox* BDMessageBox::createtoast(cocos2d::Node* node,const ccmenuCallback& callback)
{
	BDMessageBox* pRet = new BDMessageBox();
	if (pRet && pRet->initWithNode(node,msg,time,point,callback))
	{
		return pRet;
	}
	else
	{
		delete pRet;
		pRet = nullptr;
		return pRet;
	}
}

void BDMessageBox::onEnter()
{
	Layer::onEnter();
	_bg->setVisible(true);
	//对话框由小到大
	Sequence *seq = Sequence::create(EaseElasticIn::create(Scaleto::create(0.5f,1.1f,1.1f)),EaseElasticOut::create(Scaleto::create(0.2f,1.f)),NULL);
	_bg->runAction(seq);
}

void BDMessageBox::OkClick()
{

}

void BDMessageBox::CancelClick()
{
	CallFunc* removeC = CallFunc::create([this]()   //飘出后要删除掉自身
	{
		_bg->setVisible(false);
		this->removeFromParentAndCleanup(true);    //这里CallFunc参数是lambda表达式,捕获参数是类自身
	});

	Sequence *seq = Sequence::create(EaseElasticOut::create(Scaleto::create(0.5f,0.01f,0.01f)),removeC,nullptr);
	_bg->runAction(seq);
}

AfxMessageBox () 和 MessageBox () 的区别 & PCH 预编译头文件(201...

AfxMessageBox () 和 MessageBox () 的区别 & PCH 预编译头文件(201...

----------------------------------------------------------------------------------------------  
    问:AfxMessageBox () 和 MessageBox () 的区别?
    答:带 Afx 的是全局函数,可以在程序任何地方使用,不带的是 CWnd 的子函数,只能在 CWnd 窗口类对象里面使用

    附: int AfxMessageBox (LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0);
---------------------------------------------------------------------------------------------- 
    因为看到 *.pch 文件很大,于是便把它给删了,编译的时候出现这样的问题 Cannot open precompiled header file: ''Debug/6_6 消息对话框.pch'': No such file
    网上找了一下解决办法,其实很简单,只需要让编译器生成一个 pch 文件就可以了。也就是说把 Stdafx.cpp(即指定 / Yc 的那个 cpp 文件)重新编译一遍,当然你可以傻傻的 Rebuild All
----------------------------------------------------------------------------------------------

AfxMessageBox()和MessageBox()的区别 & PCH预编译头文件(201...

AfxMessageBox()和MessageBox()的区别 & PCH预编译头文件(201...

----------------------------------------------------------------------------------------------  
    问:AfxMessageBox()和MessageBox()的区别?
    答:带Afx的是全局函数,可以在程序任何地方使用,不带的是CWnd的子函数,只能在CWnd窗口类对象里面使用

    附: int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );
---------------------------------------------------------------------------------------------- 
    因为看到*.pch文件很大,于是便把它给删了,编译的时候出现这样的问题 Cannot open precompiled header file: ''Debug/6_6消息对话框.pch'': No such file
    网上找了一下解决办法,其实很简单,只需要让编译器生成一个pch文件就可以了。也就是说把 Stdafx.cpp(即指定/Yc的那个cpp文件)重新编译一遍,当然你可以傻傻的 Rebuild All
----------------------------------------------------------------------------------------------

C# DevExpress XtraMessageBox自定义字体,字体大小,自定义按钮大小,自定义Icon

C# DevExpress XtraMessageBox自定义字体,字体大小,自定义按钮大小,自定义Icon

1.使用XtraMessageBoxForm,自定义Icon

2.重写XtraMessageBoxForm,自定义消息字体,标题字体

3.注册XtraMessageBoxForm的Showing事件,自定义按钮字体及按钮大小

 

具体代码如下,只写了简单两种方法,可自己扩展,赋值MessageBoxIcon可以显示想要的Icon

 

public static class UIMessageBox
    {
        static UIMessageBox()
        {
            MessageBoxForm.MessageBoxFont = new Font("Arial", 14F); //定义字体类型
        }

        static readonly Icon MessageBoxIcon = null;


        public static void Show(string message)
        {
            ShowInternal(null, message, "Notice", SystemIcons.Information, DialogResult.OK);
        }

        public static void Show(Control owner, string message)
        {
            ShowInternal(owner, message, "Notice", SystemIcons.Information, DialogResult.OK);
        }

private static DialogResult ShowInternal(Control owner, string message, string caption, Icon messageIcon, params DialogResult[] dialogResults) { MessageBoxForm form = new MessageBoxForm(); form.Icon = MessageBoxIcon; XtraMessageBoxArgs args = new XtraMessageBoxArgs(owner, message, caption, dialogResults, messageIcon, 0); args.Showing += Args_Showing; return form.ShowMessageBoxDialog(args); } private static void Args_Showing(object sender, XtraMessageShowingArgs e) { MessageButtonCollection buttons = e.Buttons as MessageButtonCollection; SimpleButton btn = null; foreach (var dialog in (DialogResult[])Enum.GetValues(typeof(DialogResult))) { btn = buttons[dialog] as SimpleButton; if (btn != null) { btn.Size = new Size(Convert.ToInt32(btn.Width * 1.2), Convert.ToInt32(btn.Height * 1.2)); //按钮大小 btn.Font = e.Form.Font; //按钮字体 } } } } internal class MessageBoxForm : XtraMessageBoxForm { internal static Font MessageBoxFont = new Font("Arial", 10F); public MessageBoxForm() { Appearance.Font = MessageBoxFont; } protected override FormPainter CreateFormBorderPainter() { return new MessageBoxFormPainter(this, LookAndFeel); } } internal class MessageBoxFormPainter : FormPainter { internal MessageBoxFormPainter(Control owner, ISkinProvider provider) : base(owner, provider) { } protected override void DrawText(GraphicsCache cache) { string text = Text; if (text == null || text.Length == 0 || TextBounds.IsEmpty) return; AppearanceObject appearance = new AppearanceObject(GetDefaultAppearance()); appearance.Font = Owner.Font; appearance.TextOptions.Trimming = Trimming.EllipsisCharacter; Rectangle r = RectangleHelper.GetCenterBounds(TextBounds, new Size(TextBounds.Width, appearance.CalcDefaultTextSize(cache.Graphics).Height)); DrawTextShadow(cache, appearance, r); cache.DrawString(text, appearance.Font, appearance.GetForeBrush(cache), r, appearance.GetStringFormat()); } protected override int CalcTextHeight(Graphics graphics, AppearanceObject appearance) { return (int)(graphics.MeasureString(Text, Owner.Font).Height); //标题栏的高度 } }

 

调用时:

UIMessageBox.Show("This is a message");

 

c# – MessageBoxIcon.Exclamation和MessageBoxIcon.Warning有什么区别?

c# – MessageBoxIcon.Exclamation和MessageBoxIcon.Warning有什么区别?

MessageBoxIcon.Exclamation和MessageBoxIcon.Warning有什么区别?

解决方法

没有区别,它们是相同数字的别名(48).
public enum MessageBoxIcon
{
   None = 0,Error = 16,Hand = 16,Stop = 16,Question = 32,Exclamation = 48,Warning = 48,Asterisk = 64,information = 64,}

关于cocos2d-x带有自定义button响应事件的messageboxcocos button的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于AfxMessageBox () 和 MessageBox () 的区别 & PCH 预编译头文件(201...、AfxMessageBox()和MessageBox()的区别 & PCH预编译头文件(201...、C# DevExpress XtraMessageBox自定义字体,字体大小,自定义按钮大小,自定义Icon、c# – MessageBoxIcon.Exclamation和MessageBoxIcon.Warning有什么区别?的相关知识,请在本站寻找。

本文标签: