📄 mainfrm.cpp
字号:
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 + -