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

📄 axtivextctrl.cpp

📁 Active控件Card调用和自制.rar
💻 CPP
字号:
// axtivextCtrl.cpp : CaxtivextCtrl ActiveX 控件类的实现。

#include "stdafx.h"
#include "axtivext.h"
#include "axtivextCtrl.h"
#include "axtivextPropPage.h"
#include ".\axtivextctrl.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#endif


IMPLEMENT_DYNCREATE(CaxtivextCtrl, COleControl)



// 消息映射

BEGIN_MESSAGE_MAP(CaxtivextCtrl, COleControl)
	ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()



// 调度映射

BEGIN_DISPATCH_MAP(CaxtivextCtrl, COleControl)
	DISP_FUNCTION_ID(CaxtivextCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "value", dispidvalue, GetValue, SetValue, VT_I2)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "background", dispidbackground, Getbackground, Setbackground, VT_BOOL)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "backbmp", dispidbackbmp, Getbackbmp, Setbackbmp, VT_I2)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "CancelPopup", dispidCancelPopup, GetCancelPopup, SetCancelPopup, VT_BOOL)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "IsMove", dispidIsMove, GetIsMove, SetIsMove, VT_BOOL)
	DISP_PROPERTY_EX_ID(CaxtivextCtrl, "IsGoHome", dispidIsGoHome, GetIsGoHome, SetIsGoHome, VT_BOOL)
END_DISPATCH_MAP()



// 事件映射

BEGIN_EVENT_MAP(CaxtivextCtrl, COleControl)
	EVENT_STOCK_CLICK()
	EVENT_STOCK_DBLCLICK()
	EVENT_STOCK_MOUSEDOWN()
	EVENT_STOCK_MOUSEMOVE()
	EVENT_STOCK_MOUSEUP()
END_EVENT_MAP()



// 属性页

// TODO: 按需要添加更多属性页。请记住增加计数!
BEGIN_PROPPAGEIDS(CaxtivextCtrl, 1)
	PROPPAGEID(CaxtivextPropPage::guid)
END_PROPPAGEIDS(CaxtivextCtrl)



// 初始化类工厂和 guid

IMPLEMENT_OLECREATE_EX(CaxtivextCtrl, "AXTIVEXT.axtivextCtrl.1",
	0xb6f9ea09, 0x8398, 0x4a98, 0x97, 0x96, 0x24, 0x74, 0xd2, 0x4d, 0x8a, 0xd9)



// 键入库 ID 和版本

IMPLEMENT_OLETYPELIB(CaxtivextCtrl, _tlid, _wVerMajor, _wVerMinor)



// 接口 ID

const IID BASED_CODE IID_Daxtivext =
		{ 0xA577EBF8, 0x46B3, 0x4384, { 0xAF, 0xD9, 0x65, 0xEB, 0x4E, 0xE3, 0x69, 0xCD } };
const IID BASED_CODE IID_DaxtivextEvents =
		{ 0x27981EA8, 0xECFE, 0x4CB9, { 0xBA, 0x9, 0xF1, 0x96, 0x20, 0xEF, 0x63, 0x78 } };



// 控件类型信息

static const DWORD BASED_CODE _dwaxtivextOleMisc =
	OLEMISC_ACTIVATEWHENVISIBLE |
	OLEMISC_SETCLIENTSITEFIRST |
	OLEMISC_INSIDEOUT |
	OLEMISC_CANTLINKINSIDE |
	OLEMISC_RECOMPOSEONRESIZE;

IMPLEMENT_OLECTLTYPE(CaxtivextCtrl, IDS_AXTIVEXT, _dwaxtivextOleMisc)



// CaxtivextCtrl::CaxtivextCtrlFactory::UpdateRegistry -
// 添加或移除 CaxtivextCtrl 的系统注册表项

BOOL CaxtivextCtrl::CaxtivextCtrlFactory::UpdateRegistry(BOOL bRegister)
{
	// TODO: 验证您的控件是否符合单元模型线程处理规则。
	// 有关更多信息,请参考 MFC 技术说明 64。
	// 如果您的控件不符合单元模型规则,则
	// 必须修改如下代码,将第六个参数从
	// afxRegApartmentThreading 改为 0。

	if (bRegister)
		return AfxOleRegisterControlClass(
			AfxGetInstanceHandle(),
			m_clsid,
			m_lpszProgID,
			IDS_AXTIVEXT,
			IDB_AXTIVEXT,
			afxRegApartmentThreading,
			_dwaxtivextOleMisc,
			_tlid,
			_wVerMajor,
			_wVerMinor);
	else
		return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}



// 授权字符串

static const TCHAR BASED_CODE _szLicFileName[] = _T("axtivext.lic");

static const WCHAR BASED_CODE _szLicString[] =
	L"Copyright (c) 2007 ";



// CaxtivextCtrl::CaxtivextCtrlFactory::VerifyUserLicense -
// 检查是否存在用户许可证

BOOL CaxtivextCtrl::CaxtivextCtrlFactory::VerifyUserLicense()
{
	return AfxVerifyLicFile(AfxGetInstanceHandle(), _szLicFileName,
		_szLicString);
}



// CaxtivextCtrl::CaxtivextCtrlFactory::GetLicenseKey -
// 返回运行时授权密钥

BOOL CaxtivextCtrl::CaxtivextCtrlFactory::GetLicenseKey(DWORD dwReserved,
	BSTR FAR* pbstrKey)
{
	if (pbstrKey == NULL)
		return FALSE;

	*pbstrKey = SysAllocString(_szLicString);
	return (*pbstrKey != NULL);
}



// CaxtivextCtrl::CaxtivextCtrl - 构造函数

CaxtivextCtrl::CaxtivextCtrl()
{
	InitializeIIDs(&IID_Daxtivext, &IID_DaxtivextEvents);
	// TODO: 在此初始化控件的实例数据。
	value=11;backbmp=2;background=false;
	IsMove=true;m_IsMove=false;IsGoHome=true;
}



// CaxtivextCtrl::~CaxtivextCtrl - 析构函数

CaxtivextCtrl::~CaxtivextCtrl()
{
	// TODO: 在此清理控件的实例数据。
}



// CaxtivextCtrl::OnDraw - 绘图函数

void CaxtivextCtrl::OnDraw(
			CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
{
	//if (!pdc)
	//	return;

	// TODO: 用您自己的绘图代码替换下面的代码。
	CBitmap *pOldBitmap;
	CBitmap bitmap;
	CRect rect;
	GetClientRect(rect);
	CDC ppdc;
	CClientDC dc(this);
	ppdc.CreateCompatibleDC(&dc);
	if(background)//背景图案
	{
		if(backbmp==1)bitmap.LoadBitmap(255);
		if(backbmp==2)bitmap.LoadBitmap(256);
	}
	else//前景图案
		bitmap.LoadBitmap(IDB_BITMAP1+value-1);
	pOldBitmap=ppdc.SelectObject(&bitmap);
	dc.BitBlt(0,0,rect.Width(),rect.Height(),&ppdc,0,0,SRCCOPY);
	ppdc.SelectObject(pOldBitmap);
}



// CaxtivextCtrl::DoPropExchange - 持久性支持

void CaxtivextCtrl::DoPropExchange(CPropExchange* pPX)
{
	ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
	COleControl::DoPropExchange(pPX);

	// TODO: 为每个持久的自定义属性调用 PX_ 函数。
}



// CaxtivextCtrl::OnResetState - 将控件重置为默认状态

void CaxtivextCtrl::OnResetState()
{
	COleControl::OnResetState();  // 重置 DoPropExchange 中找到的默认值

	// TODO: 在此重置任意其他控件状态。
}



// CaxtivextCtrl::AboutBox - 向用户显示“关于”框

void CaxtivextCtrl::AboutBox()
{
	CDialog dlgAbout(IDD_ABOUTBOX_AXTIVEXT);
	dlgAbout.DoModal();
}



// CaxtivextCtrl 消息处理程序

void CaxtivextCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(IsMove)//属性框中设置的是否是允许拖动鼠标
	{
		m_IsMove=true;
		SetCapture();//捕获鼠标
		xx=point.x;//得到鼠标(相对于控件左上角)的坐标
		yy=point.y;

		GetClientRect(&rect);//保存拖动前的扑克位置
		::ClientToScreen(m_hWnd,&rect.TopLeft());
		OldPoint=rect.TopLeft();

		MoveWindow(0,0,71,96);//得到相对量
		GetClientRect(&rect);
		::ClientToScreen(m_hWnd,&rect.TopLeft());
	}
	Invalidate();//立即刷新
	COleControl::OnLButtonDown(nFlags, point);
}

void CaxtivextCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(m_IsMove)
	{
		ReleaseCapture();
		m_IsMove=false;
		if(IsGoHome)
		    MoveWindow(OldPoint.x-rect.left,OldPoint.y-rect.top,71,96);//还原到扑克牌拖动前的位置
	}
	Invalidate();//立即刷新
	COleControl::OnLButtonUp(nFlags, point);
}

void CaxtivextCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CPoint MyPoint=point;
	if(m_IsMove)
	{
		ClientToScreen(&MyPoint);
        MoveWindow(MyPoint.x-xx-rect.left,MyPoint.y-yy-rect.top,71,96);
	}
	//Invalidate();//立即刷新
	COleControl::OnMouseMove(nFlags, point);
}

short CaxtivextCtrl::GetValue(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码
	return value;

	//return 0;
}

void CaxtivextCtrl::SetValue(short newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	value=newVal;
	SetModifiedFlag();
	Invalidate();//立即刷新

	//SetModifiedFlag();
}

BOOL CaxtivextCtrl::Getbackground(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码
	return background;

	//return VARIANT_TRUE;
}

void CaxtivextCtrl::Setbackground(BOOL newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	background=newVal;
	SetModifiedFlag();
	Invalidate();

	//SetModifiedFlag();
}

short CaxtivextCtrl::Getbackbmp(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码
	return backbmp;

	//return 0;
}

void CaxtivextCtrl::Setbackbmp(short newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	backbmp=newVal;
	SetModifiedFlag();
	Invalidate();

	//SetModifiedFlag();
}

BOOL CaxtivextCtrl::GetCancelPopup(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码
	return CancelPopup;

	//return VARIANT_TRUE;
}

void CaxtivextCtrl::SetCancelPopup(BOOL newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	CancelPopup=newVal;
	SetModifiedFlag();
	Invalidate();

	//SetModifiedFlag();
}

BOOL CaxtivextCtrl::GetIsMove(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码
	return IsMove;

	//return VARIANT_TRUE;
}

void CaxtivextCtrl::SetIsMove(BOOL newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	IsMove=newVal;
	SetModifiedFlag();
	Invalidate();

	//SetModifiedFlag();
}

BOOL CaxtivextCtrl::GetIsGoHome(void)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加调度处理程序代码

	return IsGoHome;

	//return VARIANT_TRUE;
}

void CaxtivextCtrl::SetIsGoHome(BOOL newVal)
{
	//AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: 在此添加属性处理程序代码
	IsGoHome=newVal;
	SetModifiedFlag();
	Invalidate();

	//SetModifiedFlag();
}

⌨️ 快捷键说明

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