// SmartComDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "SmartCom.h"
#include "SmartComDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
/******************************************/
//COM RETURN
HRESULT hRe;
//Silverlight全局
IXRApplicationPtr slApp;
IXRVisualHostPtr slVisualHost;
//Silverlight控件
IXREllipsePtr slTXLedObj; //tx
IXREllipsePtr slRXLedObj; //rx
IXRTextBlockPtr slTime; //time
//Silverlight DOM
IXRFrameworkElementPtr slroot;
IXRFrameworkElementPtr slcanvas;
//tx,rx LED指示灯
IXRLinearGradientBrushPtr slflashBrush;
IXRLinearGradientBrushPtr sltxBrush;
IXRLinearGradientBrushPtr slrxBrush;
//资源
IXRResourceDictionaryPtr resource;
//事件委托
IXRDelegate<XRMouseButtonEventArgs>* txDelegate;
IXRDelegate<XRMouseButtonEventArgs>* rxDelegate;
/*******************************************/
/********************事件处理************************/
class SilverlightEventHandle
{
public:
HRESULT OnExit(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
ExitProcess(0);
return S_OK;
}
HRESULT OnTxClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
return S_OK;
}
HRESULT OnRxClick(IXRDependencyObject* source,XRMouseButtonEventArgs* args)
{
return S_OK;
}
};
事件变量
SilverlightEventHandle slEventHandle;
HRESULT FindControl(IXRFrameworkElementPtr p,const WCHAR* name,IXRDependencyObject** found)
{
return p->FindName(name,found);
}
/****************************************************/
BOOL CSmartComDlg::InitSilverlight(wchar_t* FileName)
{
if(!XamlRuntimeInitialize())
{
ShowMessage(_T("XamlRuntimeInitialize失败"));
return FALSE;
}
if(FAILED(hRe=GetXRApplicationInstance(&slApp)))
{
ShowMessage(_T("GetXRApplicationInstance失败"));
return FALSE;
}
XRWindowCreateParams wcp;
ZeroMemory(&wcp,sizeof(wcp));
wcp.Width=800;
wcp.Height=40;
//wcp.ExStyle=WS_EX_CAPTIONOKBTN;
//wcp.Style=WS_OVERLAPPED;
//wcp.ExStyle=WS_EX_OVERLAPPEDWINDOW;
wcp.Style=WS_CHILD|WS_VISIBLE;
wcp.pTitle=_T("");
wcp.ParentWindow=this->m_hWnd;
XRXamlSource xmlFile;
xmlFile.SetFile(FileName);
if(FAILED(hRe=slApp->CreateHostFromXaml(&xmlFile,&wcp,&slVisualHost)))
{
ShowMessage(_T("CreateHostFromXaml失败"));
return FALSE;
}
hRe=slVisualHost->GetRootElement(&slroot);
hRe=slroot->FindName(L"BackGround",&slcanvas);
return TRUE;
}
BOOL CSmartComDlg::InitControl()
{
IXRFrameworkElementPtr grid;
hRe=slcanvas->FindName(L"TXLed",&grid);
hRe=grid->FindName(L"TXLedObj",&slTXLedObj);
hRe=slcanvas->FindName(L"RXLed",&grid);
hRe=grid->FindName(L"RXLedObj",&slRXLedObj);
hRe=slcanvas->FindName(L"LbTime",&slTime);
return TRUE;
}
BOOL CSmartComDlg::InitEvent()
{
hRe=CreateDelegate(&slEventHandle,&SilverlightEventHandle::OnRxClick,&rxDelegate);
hRe=CreateDelegate(&slEventHandle,&SilverlightEventHandle::OnTxClick,&txDelegate);
hRe=slTXLedObj->AddMouseLeftButtonDownEventHandler(txDelegate);
hRe=slRXLedObj->AddMouseLeftButtonDownEventHandler(rxDelegate);
return TRUE;
}
BOOL CSmartComDlg::LoadSilverLightResource()
{
hRe=slroot->GetResources(&resource);
hRe=resource->GetItem(L"RxLedBrush",&slrxBrush);
hRe=resource->GetItem(L"TxLedBrush",&sltxBrush);
hRe=resource->GetItem(L"FlashLEDBrush",&slflashBrush);
return TRUE;
}
// CSmartComDlg 对话框
CSmartComDlg::CSmartComDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSmartComDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSmartComDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CSmartComDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_WM_TIMER()
END_MESSAGE_MAP()
// CSmartComDlg 消息处理程序
UINT_PTR timer;
BOOL CSmartComDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//设置大小
MoveWindow(0,0,800,40);
::SetWindowPos(this->m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE);
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
//初始化Silverlight环境
if(!this->InitSilverlight(L"//Storage card//SmartComHeader.xaml"))
{
ExitProcess(0);
}
//初始化控件
this->InitControl();
this->LoadSilverLightResource();
this->InitEvent();
hRe=slVisualHost->ShowWindow();
timer=SetTimer(100,1000,NULL);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
void CSmartComDlg::OnSize(UINT /*nType*/, int /*cx*/, int /*cy*/)
{
if (AfxIsDRAEnabled())
{
DRA::RelayoutDialog(
AfxGetResourceHandle(),
this->m_hWnd,
DRA::GetDisplayMode() != DRA::Portrait ?
MAKEINTRESOURCE(IDD_SMARTCOM_DIALOG_WIDE) :
MAKEINTRESOURCE(IDD_SMARTCOM_DIALOG));
}
}
#endif
int tx=0,rx=0;
void CSmartComDlg::OnTimer(UINT_PTR nIDEvent)
{
if(rx==0)
{
slRXLedObj->SetFill(slflashBrush);
rx=1;
}
else
{
slRXLedObj->SetFill(slrxBrush);
rx=0;
}
if(tx==0)
{
slTXLedObj->SetFill(slflashBrush);
tx=1;
}
else
{
slTXLedObj->SetFill(sltxBrush);
tx=0;
}
// }
//}/*else if(nIDEvent==3)
// {
// IXRInlineCollectionPtr inlinetxt;
// hRe=app->CreateObject(IID_IXRCollection,&inlinetxt);
// IXRRunPtr date;
// IXRRunPtr time;
// hRe=app->CreateObject(IID_IXRRun,&date);
// hRe=app->CreateObject(IID_IXRRun,&time);
SYSTEMTIME systime;
GetSystemTime(&systime);
WCHAR wcdate[32]={0};
WCHAR wctime[32]={0};
wsprintf(wcdate,L"%d-%d-%d %d:%d:%d",systime.wYear,systime.wMonth,systime.wDay,systime.wHour,systime.wMinute,systime.wSecond);
//wsprintf(wctime,L"",);
// hRe=date->SetText(wcdate);
// hRe=time->SetText(wctime);
// int index=0;
// hRe=inlinetxt->Add(date,&index);
// hRe=inlinetxt->Add(time,&index);
slTime->SetText(wcdate);
// lbTime->SetInlines(inlinetxt);
CDialog::OnTimer(nIDEvent);
}