LAPTOP-SNT8I5JK\Boounion
2025-01-07 4981115416e00a561570e9467a9eca123dee07f1
SourceCode/Bond/BoounionPLC/BoounionPLCDlg.cpp
@@ -71,6 +71,12 @@
   ON_WM_DESTROY()
   ON_WM_SIZE()
   ON_WM_CTLCOLOR()
   ON_COMMAND(ID_MENU_FILE_EXIT, &CBoounionPLCDlg::OnMenuFileExit)
   ON_UPDATE_COMMAND_UI(ID_MENU_FILE_EXIT, &CBoounionPLCDlg::OnUpdateMenuFileExit)
   ON_COMMAND(ID_MENU_FILE_SETTINGS, &CBoounionPLCDlg::OnMenuFileSettings)
   ON_UPDATE_COMMAND_UI(ID_MENU_FILE_SETTINGS, &CBoounionPLCDlg::OnUpdateMenuFileSettings)
   ON_COMMAND(ID_MENU_HELP_ABOUT, &CBoounionPLCDlg::OnMenuHelpAbout)
   ON_WM_INITMENUPOPUP()
END_MESSAGE_MAP()
@@ -119,6 +125,12 @@
   m_pPagePlcList = new CPagePlcList();
   m_pPagePlcList->Create(IDD_PAGE_PLC_LIST, this);
   m_pPagePlcList->ShowWindow(SW_SHOW);
   // 菜单
   CMenu menu;
   menu.LoadMenu(IDR_MENU_APP);
   SetMenu(&menu);
   ShowWindow(SW_MAXIMIZE);
@@ -177,6 +189,76 @@
   return static_cast<HCURSOR>(m_hIcon);
}
void CBoounionPLCDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
   ASSERT(pPopupMenu != NULL);
   CCmdUI state;
   state.m_pMenu = pPopupMenu;
   ASSERT(state.m_pOther == NULL);
   ASSERT(state.m_pParentMenu == NULL);
   HMENU hParentMenu;
   if (AfxGetThreadState()->m_hTrackingMenu == pPopupMenu->m_hMenu)
      state.m_pParentMenu = pPopupMenu;
   else if ((hParentMenu = ::GetMenu(m_hWnd)) != NULL)
   {
      CWnd* pParent = this;
      if (pParent != NULL &&
         (hParentMenu = ::GetMenu(pParent->m_hWnd)) != NULL)
      {
         int nIndexMax = ::GetMenuItemCount(hParentMenu);
         for (int nIndex = 0; nIndex < nIndexMax; nIndex++)
         {
            if (::GetSubMenu(hParentMenu, nIndex) == pPopupMenu->m_hMenu)
            {
               state.m_pParentMenu = CMenu::FromHandle(hParentMenu);
               break;
            }
         }
      }
   }
   state.m_nIndexMax = pPopupMenu->GetMenuItemCount();
   for (state.m_nIndex = 0; state.m_nIndex < state.m_nIndexMax;
   state.m_nIndex++)
   {
      state.m_nID = pPopupMenu->GetMenuItemID(state.m_nIndex);
      if (state.m_nID == 0)
         continue;
      ASSERT(state.m_pOther == NULL);
      ASSERT(state.m_pMenu != NULL);
      if (state.m_nID == (UINT)-1)
      {
         state.m_pSubMenu = pPopupMenu->GetSubMenu(state.m_nIndex);
         if (state.m_pSubMenu == NULL ||
            (state.m_nID = state.m_pSubMenu->GetMenuItemID(0)) == 0 ||
            state.m_nID == (UINT)-1)
         {
            continue;
         }
         state.DoUpdate(this, TRUE);
      }
      else
      {
         state.m_pSubMenu = NULL;
         state.DoUpdate(this, FALSE);
      }
      UINT nCount = pPopupMenu->GetMenuItemCount();
      if (nCount < state.m_nIndexMax)
      {
         state.m_nIndex -= (state.m_nIndexMax - nCount);
         while (state.m_nIndex < nCount &&
            pPopupMenu->GetMenuItemID(state.m_nIndex) == state.m_nID)
         {
            state.m_nIndex++;
         }
      }
      state.m_nIndexMax = nCount;
   }
}
void CBoounionPLCDlg::OnDestroy()
{
@@ -238,3 +320,30 @@
   return m_hbrBkgnd;
}
void CBoounionPLCDlg::OnMenuFileSettings()
{
   //CSettingsDlg dlg;
   //dlg.DoModal();
}
void CBoounionPLCDlg::OnUpdateMenuFileSettings(CCmdUI* pCmdUI)
{
   pCmdUI->Enable(FALSE);
}
void CBoounionPLCDlg::OnMenuFileExit()
{
   PostMessage(WM_CLOSE);
}
void CBoounionPLCDlg::OnUpdateMenuFileExit(CCmdUI* pCmdUI)
{
   pCmdUI->Enable(TRUE);
}
void CBoounionPLCDlg::OnMenuHelpAbout()
{
   CAboutDlg dlgAbout;
   dlgAbout.DoModal();
}