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

📄 mainfrm.cpp

📁 UHF RFID Reader Program
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	m_wndTagAccessToolBar.EnableDocking(CBRS_ALIGN_ANY);

	EnableDocking(CBRS_ALIGN_ANY);

	DockControlBar(&m_wndToolBar);
	DockControlBar(&m_wndInfoToolBar);
	DockControlBar(&m_wndTagAccessToolBar);

	HCURSOR crsArrow = ::LoadCursor(0, IDC_ARROW);
	CString classLeft =		AfxRegisterWndClass(CS_DBLCLKS, crsArrow, (HBRUSH)CBrush(RGB(255,255,255)), 0);
	const int vert_splitter_sizes[4] = { 70, 10 };

/*
	m_wndSplitterVert.Create(this);
	m_wndSplitterVert.SetPaneSizes(vert_splitter_sizes);
	m_wndSplitterVert.CreatePane(0, GetActiveView(), 0, WS_EX_CLIENTEDGE, classLeft);
*/

#ifdef LARGE_COUNT
	m_wndCountDlg = new CCountDlg(this);
	m_wndCountDlg->Create(CCountDlg::IDD, GetDesktopWindow());
	m_wndCountDlg->ShowWindow(SW_SHOW);
#endif

#endif

	m_wndStatusBar.GetStatusBarCtrl().SetMinHeight(23);

	///////////////////////////////////////////////////////////////////////////////////
	// Set Pane width
	// disable for windows ce
	//	m_wndStatusBar.SetPaneWidth(0,100);	

	strClear.LoadString(IDS_CLEAR_BUTTON);

	AddStatusBarPane(1, 4, 50, ID_INDICATOR_CLEAR);
	m_pWndButton->SetWindowText(strClear);
	UpdateData(0);

	AddStatusBarPane(2, 0, 50, ID_INDICATOR_COUNT);
	UpdateData(0);

	AddStatusBarPane(3, 1, 25, ID_INDICATOR_COUNT_EDIT);
	UpdateData(0);

	return 0;
}

#ifdef _WIN32_WCE
DWORD WINAPI CMainFrame::WakeUpThreadFunc(LPVOID pParam)
{
//	CoInitializeEx(NULL, COINIT_MULTITHREADED);

	CMainFrame*	pFrame = (CMainFrame*) pParam;

	MSGQUEUEOPTIONS	lm_Options;
	HANDLE			lm_hPMMQ, lm_hPMNoti;
	DWORD			lm_dwErrCode, lm_dwPri = 251, lm_dwCount = 0;
	CString			lm_szErr;
	UCHAR			lm_ucBuf[QUEUE_SIZE];
	DWORD			lm_dwReadSize = 0, lm_dwFlags;
	BOOL			lm_bResult;
	DWORD			lm_dwWaitReturn = 0;

	lm_Options.dwSize			= sizeof (MSGQUEUEOPTIONS);
	lm_Options.dwFlags			= MSGQUEUE_ALLOW_BROKEN;
	lm_Options.dwMaxMessages	= 10;							// 皋矫瘤钮俊 甸绢啊绰 弥措 皋矫瘤 肮荐
	lm_Options.cbMaxMessage		= QUEUE_SIZE;					// 皋矫瘤 窍唱寸 弥措 荤捞令
	lm_Options.bReadAccess		= TRUE;

	lm_hPMMQ = CreateMsgQueue (NULL, &lm_Options);				// 皋矫瘤 钮 积己
	if (lm_hPMMQ == NULL)
	{
		lm_dwErrCode = GetLastError();
		lm_szErr.Format (TEXT("CreateMsgQueue ERROR:%d\n"), lm_dwErrCode);
		AfxMessageBox (lm_szErr);
		goto _Exit;
	}

	//RESUME矫俊 舅覆 夸没阑 殿废钦聪促.
	lm_hPMNoti = RequestPowerNotifications (lm_hPMMQ, PBT_RESUME);//PBT_TRANSITION);
	if (lm_hPMNoti == NULL)
	{
		lm_dwErrCode = GetLastError();
		lm_szErr.Format (TEXT("RequestPowerNotifications ERROR:%d\n"), lm_dwErrCode);
		AfxMessageBox (lm_szErr);
		goto _Exit;
	}

	while (1)
	{
		memset (&lm_ucBuf, 0, QUEUE_SIZE);

		lm_dwWaitReturn = WaitForSingleObject (lm_hPMMQ, 100);

		if (lm_dwWaitReturn == WAIT_TIMEOUT)
		{
			continue;
		}

		lm_bResult = ReadMsgQueue (lm_hPMMQ, &lm_ucBuf, sizeof (POWER_BROADCAST), &lm_dwReadSize, INFINITE, &lm_dwFlags);

		if(lm_bResult)
		{
			if (lm_dwReadSize >= sizeof(POWER_BROADCAST))
			{
				PPOWER_BROADCAST	pB = (PPOWER_BROADCAST)&lm_ucBuf;
				if(pB->Message == PBT_RESUME)
				{
					pFrame->SetStatusBar(0, TEXT("Power On"));

					if(::GetControlState(RFID_POWER) != TRUE)
					{
						::SetControlState(RFID_POWER, TRUE);

						Sleep(1200);
						
						if(::GetControlState(RFID_GREEN_LED) != TRUE)
							::SetControlState(RFID_GREEN_LED, TRUE);
					}

					if(pFrame->GetRFIDRadioManager()->IsConnect())
					{
						pFrame->GetRFIDRadioManager()->Connect();
					}
					else
					{
						pFrame->GetRFIDRadioManager()->Disconnect();
					}

					pFrame->SetStatusBar(0, TEXT("WakeUp Complete"));
				}

				if(pB->Message == PBT_POWERINFOCHANGE)
				{
					pFrame->SetStatusBar(0, TEXT("Power Off"));
				}
			}
		}
		else
		{
			lm_dwErrCode = GetLastError ();
			lm_szErr.Format (_T("ReadMsgQueue : %d"), lm_dwErrCode);
			AfxMessageBox (lm_szErr);
			goto _Exit;
		}
	}

_Exit:
	StopPowerNotifications (lm_hPMNoti);
	CloseMsgQueue (lm_hPMMQ);

	//*** 炼沥饶 : Thread Function捞 吝酶 角青狼 啊瓷己捞 乐绢 茄锅父 角青矫虐霸 父甸扁 困茄 Flag 眠啊 利侩矫淖嚼聪促.
	pFrame->m_bOneExcuteThread = FALSE;

//	CoUninitialize();

	return 0;
}
#endif

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if (!CFrameWnd::PreCreateWindow(cs))
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return TRUE;
}


void CMainFrame::OnNcDestroy()
{
	CFrameWnd::OnNcDestroy();

//	OnRfidPowerOnOff();
}

// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}
#endif //_DEBUG

// CMainFrame message handlers


void CMainFrame::OnRfidConnection()
{
	m_pRFIDRadioManager->SetParent(GetActiveView());

	if(m_pRFIDRadioManager->Connect() != RFID_STATUS_OK)
	{
		SetStatusBar(0, _T("RFID Handle Create Fail"));
	}

	SetStatusBar(0, _T("Connection"));
}

void CMainFrame::OnRfidDisconnection()
{
	if(m_pRFIDRadioManager->Disconnect() == RFID_STATUS_OK)
	{
		SetStatusBar(0, _T("Disconnection"));
	}
	else
	{
		SetStatusBar(0, _T("Disconnection Fail"));
	}
}

void CMainFrame::OnRfidMacversion()
{
/*
	for(int i = 0; i < m_pRFIDRadio->GetRadioCount(); i++)
	{
		RFID_VERSION* macVersion;

		macVersion = m_pRFIDRadio->GetRadioMacVersion(i);
		CString str;

		str.Format(_T("MAC Version:\nMajor: %u\nMinor: %u\nPatch: %u\n"),
			macVersion->major,
			macVersion->minor,
			macVersion->patch);
	
		AfxMessageBox(str);
	}
*/
}
#ifdef WINCE
void CMainFrame::OnToolbarDropDown(NMTOOLBAR* pnmtbwce, LRESULT *plr)
#elif WIN32
void CMainFrame::OnToolbarDropDown(NMHDR* pnmtbw32, LRESULT* plr)
#endif
{
	CWnd *pWnd;
	UINT nID;

#ifdef WINCE
	NMTOOLBAR* pnmtb = (NMTOOLBAR*)pnmtbwce;
#elif WIN32
	NMTOOLBAR* pnmtb = (NMTOOLBAR*)pnmtbw32;
#endif

	// Switch on button command id's.
	switch (pnmtb->iItem)
	{
	case ID_VIEW_LIST:
		pWnd = &m_wndToolBar;
		nID  = IDR_MENU_LIST;
		break;
	default:
		return;
	}
	
	// load and display popup menu
	CMenu menu;
	menu.LoadMenu(nID);
	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup);
	
	CRect rc;
	pWnd->SendMessage(TB_GETRECT, pnmtb->iItem, (LPARAM)&rc);
	pWnd->ClientToScreen(&rc);
	
	// Popup Menu
	pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_VERTICAL,
		rc.left, rc.bottom, this, &rc);
}

void CMainFrame::OnViewList()
{
	CPoint   pt;   
	CWnd *pWnd = &m_wndToolBar;
	UINT nID = IDR_MENU_LIST;

	// load and display popup menu
	CMenu menu;
	menu.LoadMenu(nID);
	CMenu* pPopup = menu.GetSubMenu(0);
	ASSERT(pPopup);
	
	CRect rc;
	GetCursorPos(&pt);   	
	pWnd->SendMessage(TB_GETRECT, ID_VIEW_LIST, (LPARAM)&rc);
	pWnd->ClientToScreen(&rc);
	
	pPopup->TrackPopupMenu( TPM_LEFTALIGN | TPM_VERTICAL,
		rc.left, rc.bottom, this, &rc);
}

void CMainFrame::SetStatusBar(int nPaneID, CString strMessage)
{
	int index = 0;

	switch(nPaneID)
	{
	case 0:
		index = m_wndStatusBar.CommandToIndex(ID_SEPARATOR); //瘤矫磊亲格狼 鉴辑 锅龋甫 掘绰促.
		break;
	case 1:
		index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_CAPS); //瘤矫磊亲格狼 鉴辑 锅龋甫 掘绰促.
		break;
	case 2:
		index = m_wndStatusBar.CommandToIndex(ID_INDICATOR_NUM); //瘤矫磊亲格狼 鉴辑 锅龋甫 掘绰促.
		break;

	default:
		break;
	}

	m_wndStatusBar.SetPaneText(index, strMessage); // 巩磊甫 持绰促.
//	m_wndStatusBar.SetPaneText(nPaneID, strMessage);
}

void CMainFrame::OnClose()
{
	if(m_pRFIDRadioManager->IsInventory())
		m_pRFIDRadioManager->StopInventory();
	
	if(m_pRFIDRadioManager->IsConnect())
		m_pRFIDRadioManager->Disconnect();

	OnRfidPowerOnOff();

	CFrameWnd::OnClose();
}

void CMainFrame::OnRfidStopInventory()
{
	CString strTemp;

	if(RFID_STATUS_OK !=
		m_pRFIDRadioManager->StopInventory(0))
	{
		strTemp.LoadString(IDS_STRING_RFID_STOP_FAIL);
	}

	strTemp.LoadString(IDS_STRING_RFID_STOP_SUCCESS);
	SetStatusBar(0, strTemp);
}

void CMainFrame::OnRfidRunInventory()
{
	CRFRMDoc* pDoc = (CRFRMDoc*)GetActiveDocument();
	CString strTemp;

	m_pRFIDRadioManager->RunInventory(0, -1);

	// Set to Leak Timer
	if(pDoc->m_bLeakEnable)
		SetTimer(1, pDoc->m_nLeakTime * 1000, NULL);

	strTemp.LoadString(IDS_STRING_INVENTORY);
	SetStatusBar(0, strTemp);

	if (!m_wndSplitter.IsPaneHidden(Bottom))
	{
		m_wndSplitter.ShowPane(Bottom, FALSE);
	}
}

void CMainFrame::OnUpdateRfidDisconnection(CCmdUI *pCmdUI)
{
#ifdef WINCE
	if(m_pRFIDRadioManager->GetControlState(RFID_POWER))
	{
#endif
		if(m_pRFIDRadioManager->IsConnect() && !m_pRFIDRadioManager->IsInventory(0))
			pCmdUI->Enable(1);
		else
			pCmdUI->Enable(0);
#ifdef WINCE
	}
	else
	{
		pCmdUI->Enable(0);
	}
#endif
}

void CMainFrame::OnUpdateRfidRunInventory(CCmdUI *pCmdUI)
{
	if(m_pRFIDRadioManager->GetControlState(RFID_POWER) && m_pRFIDRadioManager->IsConnect() && !m_pRFIDRadioManager->IsInventory(0))
	{
		pCmdUI->Enable(1);
	}
	else
	{
		pCmdUI->Enable(0);
	}
}

void CMainFrame::OnUpdateRfidStopInventory(CCmdUI *pCmdUI)
{
	if(m_pRFIDRadioManager->IsConnect() && m_pRFIDRadioManager->IsInventory(0))
	{
		pCmdUI->Enable(1);
	}
	else
	{
		pCmdUI->Enable(0);
	}
}

void CMainFrame::OnUpdateRfidConnection(CCmdUI *pCmdUI)
{
#ifdef WINCE
	if(m_pRFIDRadioManager->GetControlState(RFID_POWER))
	{
#endif	// WINCE
		if(m_pRFIDRadioManager->IsConnect())
			pCmdUI->Enable(0);
		else
			pCmdUI->Enable(1);
#ifdef WINCE
	}
	else
	{
		pCmdUI->Enable(0);
	}
#endif	// WINCE
}

void CMainFrame::AddStatusBarPane(int nPosition, int nPaneType, int width, int nID)
{
	UpdateData();

	if( nPosition < 0 || nPosition > 20 )
		return;

	switch( nPaneType ) 
	{
	case 0: // text
		{
			BOOL bRet = m_wndStatusBar.AddPane(nID,nPosition);
			if(!bRet){
				AfxMessageBox(_T("Pane index out of range\nor pane with same ID already exists in the status bar"), MB_ICONERROR);
				return;
			}
		}
		break;

	case 1: // edit
		{
			m_pWndEdit = new CStatusBarEdit;
			if (!m_pWndEdit->Create(
				WS_CHILD|WS_VISIBLE|WS_TABSTOP, 
				CRect(0,0,0,0), 
				&m_wndStatusBar, 
				0))
			{
				TRACE(_T("Failed to create edit control.\n"));
				return;
			}

			m_pWndEdit->SetFont(
				CFont::FromHandle(

⌨️ 快捷键说明

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