void CMenuSpawn::RemapMenu(HMENU hMenu) { static int iRecurse = 0; iRecurse ++; CMenu pMenu; pMenu.Attach(hMenu); ASSERT(pMenu); int nItem = pMenu.GetMenuItemCount(); while ((--nItem)>=0) { UINT itemId = pMenu.GetMenuItemID(nItem); if (itemId == (UINT) -1) { CMenu pops(pMenu.GetSubMenu(nItem)); if (pops.GetHandleMenu()) RemapMenu(pops.GetHandleMenu()); if (bIsPopup || iRecurse > 0) { TCHAR cs[128]; memset(cs,0x00,128); pMenu.GetMenuString(nItem, cs, 128,MF_BYPOSITION); if (lstrlen(cs)>0) { SpawnItem * sp = AddSpawnItem(cs, (!bIsPopup && iRecurse == 1) ? -4 : -2); pMenu.ModifyMenu(nItem,MF_BYPOSITION|MF_OWNERDRAW, (UINT) -1, (LPCTSTR)sp); } } } else { if (itemId != 0) { UINT oldState = pMenu.GetMenuState(nItem,MF_BYPOSITION); if (!(oldState&MF_OWNERDRAW) && !(oldState&MF_BITMAP)) { ASSERT(oldState != (UINT)-1); TCHAR cs[128]; memset(cs,0x00,128); pMenu.GetMenuString(nItem, cs, 128, MF_BYPOSITION); SpawnItem * sp = AddSpawnItem(cs, itemId); if (itemId!=SC_CLOSE) pMenu.ModifyMenu(nItem,MF_BYPOSITION|MF_OWNERDRAW|oldState, (LPARAM)itemId, (LPCTSTR)sp); } } else { UINT oldState = pMenu.GetMenuState(nItem,MF_BYPOSITION); if (!(oldState&MF_OWNERDRAW) && !(oldState&MF_BITMAP)) { ASSERT(oldState != (UINT)-1); SpawnItem * sp = AddSpawnItem("--", -3); pMenu.ModifyMenu(nItem,MF_BYPOSITION|MF_OWNERDRAW|oldState, (LPARAM)itemId, (LPCTSTR)sp); } } } } iRecurse --; pMenu.Detach(); }
void CHello2Dlg::OnStnDblclickRunGraph() { // TODO: 在此添加控件通知处理程序代码 CMenu mainmenu; mainmenu.LoadMenu(IDR_SELPROBE); m_graph.Invalidate(); CMenu *pM = mainmenu.GetSubMenu(0); //remove the existing menu CString str ; int i; for(i=pM->GetMenuItemCount()-1;i>=0;i--) //取得菜单的项数。 { pM->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 pM->DeleteMenu(i,MF_BYPOSITION); } pM->AppendMenu(MF_STRING,ID_32771,_T("关闭辅助显示")); for(i=0;i<sizeof(m_ridlgs)/sizeof(CRunitemDialog*);i++){ CString name; name.Format(_T("同时显示通道%i"),i+1); pM->AppendMenu(MF_STRING,ID_32771+1+i,name); } m_cmdbase = ID_32772; CPoint pt; GetCursorPos(&pt); SetForegroundWindow(); pM->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); return; /* CString tt; tt.Format(_T("clicked:%i,%i"),pt.x,pt.y); GetDlgItem(IDC_MAIN_STATUS)->SetWindowText(tt); */ }
void CHello2Dlg::OnLbnDblclkList4() { // TODO: 在此添加控件通知处理程序代码 CMenu mainmenu; mainmenu.LoadMenu(IDR_SELPROBE); CMenu *pM = mainmenu.GetSubMenu(0); //remove the existing menu CString str ; int i; for(i=pM->GetMenuItemCount()-1;i>=0;i--) //取得菜单的项数。 { pM->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 pM->DeleteMenu(i,MF_BYPOSITION); } pM->AppendMenu(MF_STRING,ID_32771,_T("显示转换结果")); pM->AppendMenu(MF_STRING,ID_32771+1,_T("显示原始数据")); pM->AppendMenu(MF_STRING,ID_32771+2,_T("删除选中数据")); pM->AppendMenu(MF_STRING,ID_32771+3,_T("清空所有数据")); pM->AppendMenu(MF_STRING,ID_32771+4,_T("导出所有数据")); m_cmdbase = ID_32773; CRect rect; m_chlist.GetClientRect(&rect); CPoint pt; GetCursorPos(&pt); pM->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); return; }
void CCoolMenuBarCtrl::SetMenu(HMENU hMenu) { m_hMenu = hMenu; Clear(); if ( ! m_hMenu ) return; CMenu pMenu; pMenu.Attach( m_hMenu ); for ( UINT nItem = 0 ; nItem < pMenu.GetMenuItemCount() ; nItem++ ) { CString strMenu; pMenu.GetMenuString( nItem, strMenu, MF_BYPOSITION ); int nAmp = strMenu.Find( '&' ); if ( nAmp >= 0 ) strMenu = strMenu.Left( nAmp ) + strMenu.Mid( nAmp + 1 ); CCoolBarItem* pItem = new CCoolBarItem( this, nItem + 1 ); pItem->SetText( _T(" ") + strMenu + _T(" ") ); m_pItems.AddTail( pItem ); } pMenu.Detach(); }
void set_value(int id) // sets selected menu item { for(int i=0; i<nItems; i++) popmenu.CheckMenuItem(i+100,MF_UNCHECKED); popmenu.CheckMenuItem(id+100,MF_CHECKED); CString txt; popmenu.GetMenuString(id+100, txt, 24 ); back.redraw(); butt.redraw(); txtbox.SetWindowText(txt); curr_sel=id+100; };
static CString pGetMenuString(UINT MenuId) { CMenu menu; CString menuString; menu.LoadMenu(MAKEINTRESOURCE(IDR_MAINPOPUP)); menu.GetMenuString(MenuId, menuString, MF_BYCOMMAND); menuString.Remove(_T('&')); menu.DestroyMenu(); return menuString; }
//************************************************************************************** void CBCGPTearOffManager::SetupTearOffMenus (HMENU hMenu) { ASSERT (hMenu != NULL); CMenu* pMenu = CMenu::FromHandle (hMenu); if (pMenu == NULL) { return; } int iCount = (int) pMenu->GetMenuItemCount (); for (int i = 0; i < iCount; i ++) { UINT uiID = pMenu->GetMenuItemID (i); if (uiID != (UINT) -1) { continue; } UINT uiState = pMenu->GetMenuState (i, MF_BYPOSITION); if (uiState & MF_MENUBARBREAK) { CString str; pMenu->GetMenuString (i, str, MF_BYPOSITION); if (str [0] != cIDChar) { UINT uiCtrlBarId = GetFreeTearOffID (); if (uiCtrlBarId == 0) // No more free IDs! { // Reserve more IDs in Initialize!!! ASSERT (FALSE); return; } Build (uiCtrlBarId, str); pMenu->ModifyMenu (i, MF_BYPOSITION, i, str); } } CMenu* pPopupMenu = pMenu->GetSubMenu (i); if (pPopupMenu != NULL) { SetupTearOffMenus (pPopupMenu->GetSafeHmenu ()); } } }
// // Find a statistic by its name (as stored in result file) and select it // as though it had been selected from the menu. // void CPageDisplay::SelectStatisticByName( int button, const char *statistic_name ) { unsigned int submenu_id, menu_item; if ( (button < 0) || (button >= NUM_STATUS_BARS) ) { ErrorMessage("Invalid button value in CPageDisplay::SelectStatisticByName()"); return; } if ( !statistic_name ) { ErrorMessage("Invalid string in CPageDisplay::SelectStatisticByName()"); return; } CMenu menu; VERIFY(menu.LoadMenu(IDR_POPUP_DISPLAY_LIST)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); // we can use ASSERT here because this should work every time if it works at all for ( submenu_id = 0; submenu_id < MDisplayNumSubmenus; submenu_id++ ) { CMenu* pSubPopup = pPopup->GetSubMenu( submenu_id ); if ( pSubPopup == NULL ) { ErrorMessage("Could not get submenu in CPageDisplay::SelectStatisticByName()"); return; } for ( menu_item = 0; menu_item < pSubPopup->GetMenuItemCount(); menu_item++ ) { CString title; pSubPopup->GetMenuString( menu_item, title, MF_BYPOSITION ); if ( title.CompareNoCase(statistic_name) == 0 ) { selected_button = button; theApp.pView->OnMDisplay( submenu_id, pSubPopup->GetMenuItemID( menu_item ) ); return; } } } // No match found, just leave the current selection unchanged return; }
// Call AttachCustomMenu once // it will replace the menu item with the ID 'IDM_TEST_CUSTOM_MENU' // with a color menu popup // Replace the specified menu item with a color popup void CTestWindow::AttachCustomMenu() { // now add a few new menu items for (int iColor = 0; iColor < nColors; iColor++) m_colorMenu.AppendColorMenuItem(IDS_COLOR_NAME_FIRST + iColor, colors[iColor]); // Replace the specified menu item with a color popup // (note: will only work once) CMenu* pMenuBar = GetMenu(); ENSURE(pMenuBar != NULL); TCHAR szString[256]; // don't change the string pMenuBar->GetMenuString(IDM_TEST_CUSTOM_MENU, szString, sizeof(szString), MF_BYCOMMAND); VERIFY(GetMenu()->ModifyMenu(IDM_TEST_CUSTOM_MENU, MF_BYCOMMAND | MF_POPUP, (UINT_PTR)m_colorMenu.m_hMenu, szString)); }
// // Generic handler for any selection from the IDR_POPUP_DISPLAY_LIST menu. // (The specific handlers for each selection are members of the CGalileoView class; // they each call this function.) Its main purpose is to set the result_to_display // member variable. // // This function assumes that the member variable selected_button is set to // indicate the button that was pressed to pop up the menu. This is typically done // by the function OnBResultType(), which popped up the menu. // // The parameters submenu_id and menu_item are resource ID's, used to get the // menu item string for the button label. The parameter result_code must be one // of the *_RESULT constants from PageDisplay.h, and determines which result will // be displayed by the status bar associated with the selected_button. // void CPageDisplay::OnMDisplay( int submenu_id, int menu_item, int result_code ) { if ( (selected_button < 0) || (selected_button >= NUM_STATUS_BARS) ) { ErrorMessage("Invalid selected_button value in CPageDisplay::OnMDisplay()"); return; } if ( (submenu_id < 0) || (submenu_id >= MDisplayNumSubmenus) ) { ErrorMessage("Invalid submenu_id value in CPageDisplay::OnMDisplay()"); return; } if ( (result_code < 0) || (result_code >= NUM_RESULTS) ) { ErrorMessage("Invalid result_code value in CPageDisplay::OnMDisplay()"); return; } // store the selected result for later use barcharts[selected_button].result_to_display = result_code; // get the selected menu item's title and store it in the selected button CMenu menu; VERIFY(menu.LoadMenu(IDR_POPUP_DISPLAY_LIST)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); // we can use ASSERT here because this should work every time if it works at all CMenu* pSubPopup = pPopup->GetSubMenu( submenu_id ); if ( pSubPopup == NULL ) { ErrorMessage("Could not get submenu in CPageDisplay::OnMDisplay()"); return; } CString title; pSubPopup->GetMenuString( menu_item, title, MF_BYCOMMAND ); GetDlgItem( BResultType1 + selected_button )->SetWindowText( title ); ( (CButton*)GetDlgItem( BResultType1 + selected_button ) )->SetCheck( FALSE ); Update(); }
//************************************************************************************** void CBCGPTearOffManager::Reset (HMENU hMenu) { int nCount = m_uiTearOffMenuLast - m_uiTearOffMenuFirst + 1; if (hMenu == NULL) // Reset all { for (int i = 0; i < nCount; i ++) { m_arTearOffIDsUsage [i] = 0; } return; } CMenu* pMenu = CMenu::FromHandle (hMenu); if (pMenu == NULL) { ASSERT (FALSE); return; } int iCount = (int) pMenu->GetMenuItemCount (); for (int i = 0; i < iCount; i ++) { CString str; pMenu->GetMenuString (i, str, MF_BYPOSITION); UINT uiTearOffID = Parse (str); if (uiTearOffID >= m_uiTearOffMenuFirst && uiTearOffID <= m_uiTearOffMenuLast) { m_arTearOffIDsUsage [uiTearOffID - m_uiTearOffMenuFirst] = 0; } if (pMenu->GetMenuItemID (i) == (UINT)-1) { CMenu* pPopupMenu = pMenu->GetSubMenu (i); ASSERT (pPopupMenu != NULL); Reset (pPopupMenu->GetSafeHmenu ()); } } }
BOOL CMonitorWnd::ApplyMenu(UINT nMenuId) { CMenu pMenu; pMenu.LoadMenu( nMenuId ); CString str; pMenu.GetMenuString( 0, str, MF_BYPOSITION ); CMenu* pSubMenu = pMenu.GetSubMenu( 0 ); m_hSubMenu = pMenu.GetSubMenu(0)->m_hMenu; CMenu* pMainMenu = AfxGetMainWnd()->GetMenu(); pMainMenu->AppendMenu( MF_POPUP|MF_STRING, (UINT)m_hSubMenu, str ); pMainMenu->Detach(); pMenu.Detach(); AfxGetMainWnd()->DrawMenuBar(); return TRUE; }
// Search the "Select" menu to see if a CRC setting name is in use. // Returns the ID (index into settings_) if found or -1 if not int CGeneralCRC::find_name(LPCTSTR name) { int retval = -1; CMenu menu; menu.Attach(select_menu_.m_hMenu); int lst = menu.GetMenuItemCount(); for (int ii = 0; ii < lst; ++ii) { CString ss; menu.GetMenuString(ii, ss, MF_BYPOSITION); if (ss.CompareNoCase(name) == 0) { retval = menu.GetMenuItemID(ii); break; } } menu.Detach(); return retval; }
BOOL CCoolMenuBarCtrl::OpenMenuChar(UINT nChar) { CMenu pMenu; pMenu.Attach( m_hMenu ); for ( UINT nItem = 0 ; nItem < pMenu.GetMenuItemCount() ; nItem++ ) { CString strMenu; pMenu.GetMenuString( nItem, strMenu, MF_BYPOSITION ); LPCTSTR pszChar = _tcschr( strMenu, '&' ); if ( ! pszChar++ ) continue; if ( toupper( *pszChar ) == toupper( nChar ) ) { pMenu.Detach(); if ( m_pSelect = GetIndex( nItem ) ) PostMessage( WM_TIMER, 5 ); return TRUE; } } pMenu.Detach(); return FALSE; }
void CMainFrame::OnInitMenu(CMenu* pMenu) { CMDIFrameWnd::OnInitMenu(pMenu); //find the help submenu CMenu* pSubMenu = NULL; CString strHelp; strHelp.LoadString(IDS_TIPOFTHEDAYHELP); CString strMenu; int nMenuCount = pMenu->GetMenuItemCount(); BOOL bFound = FALSE; for (int i=0; i < nMenuCount; i++) { pMenu->GetMenuString(i, strMenu, MF_BYPOSITION); if (strMenu == strHelp) { pSubMenu = pMenu->GetSubMenu(i); bFound = TRUE; ASSERT(pSubMenu != NULL); } } CString strTipMenu; strTipMenu.LoadString(IDS_TIPOFTHEDAYMENU); if(bFound) { //check to see if the menu has already been added. pSubMenu->GetMenuString(0, strMenu, MF_BYPOSITION); //only add it if the tips were loaded OK if( strMenu != strTipMenu && m_wndMDIClientArea.m_fTipsLoadedOK ) { pSubMenu->InsertMenu(0, MF_BYPOSITION); pSubMenu->InsertMenu(0, MF_STRING|MF_BYPOSITION, IDS_TIPOFTHEDAY, strTipMenu); } } }
void CHello2Dlg::OnLbnDblclkList3() { // TODO: 在此添加控件通知处理程序代码 CMenu mainmenu; mainmenu.LoadMenu(IDR_SELPROBE); CMenu *pM = mainmenu.GetSubMenu(0); //remove the existing menu CString str ; for(int i=pM->GetMenuItemCount()-1;i>=0;i--) //取得菜单的项数。 { pM->GetMenuString(i,str,MF_BYPOSITION); //将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 pM->DeleteMenu(i,MF_BYPOSITION); } CSetting<PROBECFG> prbset; prbset.InstallFromFile(PRB_DEFINFO); CString namelist = prbset.GetTitleList('|'); int curch = m_chlist.GetCurSel(); if(curch < 0) return; if(m_cfgtype == CFGTYPE_BORE) { int j = 1; pM->AppendMenu(MF_STRING,ID_32771,_T("关闭")); while(namelist.Find('|',0) >= 0){ CString item = namelist.Left(namelist.Find('|',0)); pM->AppendMenu(MF_STRING,ID_32771+j,item); //添加新的菜单项 namelist.Delete(0,item.GetLength() + 1); j = j+1; } m_cmdbase = ID_32771; } if(m_cfgtype == CFGTYPE_THMO) { //TBEJKNRS m_cmdbase = ID_32771;; pM->AppendMenu(MF_STRING,ID_32771,_T("关闭")); pM->AppendMenu(MF_STRING,ID_32772,_T("T型热电偶")); pM->AppendMenu(MF_STRING,ID_32773,_T("B型热电偶")); pM->AppendMenu(MF_STRING,ID_32774,_T("E型热电偶")); pM->AppendMenu(MF_STRING,ID_32775,_T("J型热电偶")); pM->AppendMenu(MF_STRING,ID_32776,_T("K型热电偶")); pM->AppendMenu(MF_STRING,ID_32777,_T("N型热电偶")); pM->AppendMenu(MF_STRING,ID_32778,_T("R型热电偶")); pM->AppendMenu(MF_STRING,ID_32779,_T("S型热电偶")); } CRect rect; m_chlist.GetClientRect(&rect); CPoint pt; GetCursorPos(&pt); SetForegroundWindow(); pM->TrackPopupMenu(TPM_LEFTALIGN,pt.x,pt.y,this); return; }
BOOL CChatFrame::OnShowPopupMenu (CBCGPopupMenu* pMenuPopup) { clearIdleTime(); //--------------------------------------------------------- // Replace ID_VIEW_TOOLBARS menu item to the toolbars list: //--------------------------------------------------------- CFrameWnd::OnShowPopupMenu (pMenuPopup); if (pMenuPopup != NULL && pMenuPopup->GetMenuBar ()->CommandToIndex (ID_VIEW_TOOLBARS) >= 0) { if (CBCGToolBar::IsCustomizeMode ()) { //---------------------------------------------------- // Don't show toolbars list in the cuztomization mode! //---------------------------------------------------- return FALSE; } pMenuPopup->RemoveAllItems (); CMenu menu; VERIFY(menu.LoadMenu (IDR_POPUP_TOOLBAR)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); pMenuPopup->GetMenuBar ()->ImportFromMenu (*pPopup, TRUE); } if ( pMenuPopup != NULL && pMenuPopup->GetParentToolBar() == &m_wndTopChatBar ) { if ( m_wndTopChatBar.GetButton( m_GameButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getGames( m_Games ) < 0 ) { //MessageBox( "Failed to get game list." ); return FALSE; } pMenuPopup->RemoveAllItems(); CMenu gameMenu; gameMenu.CreatePopupMenu(); for(int i=0;i<m_Games.size() && i < MAX_GAMES;i++) gameMenu.AppendMenu( MF_STRING, ID_GAMES_BEGIN + i, CString(m_Games[i].name) ); pMenuPopup->GetMenuBar()->ImportFromMenu (gameMenu, TRUE); } if ( m_wndTopChatBar.GetButton( m_RoomsButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getRooms( m_Rooms ) < 0 ) return FALSE; pMenuPopup->RemoveAllItems(); CMenu roomMenu; roomMenu.CreatePopupMenu(); roomMenu.AppendMenu( MF_STRING, ID_CHAT_CREATEROOM, _T("New Room") ); roomMenu.AppendMenu( MF_SEPARATOR ); for(int i=0;i<m_Rooms.size() && i < MAX_ROOMS;i++) { MetaClient::Room & room = m_Rooms[i]; CString sName; sName.Format( _T("%s "), CString( room.name ) ); if ( room.flags & MetaClient::FLAG_ROOM_MODERATED ) sName += _T("[MODERATED]"); if ( room.flags & MetaClient::FLAG_ROOM_PASSWORD ) sName += _T("[PRIVATE]"); if ( room.flags & MetaClient::FLAG_ROOM_PRIVATE ) sName += _T("[HIDDEN]"); CString sMembers; sMembers.Format( _T("\t%u"), room.members ); sName += sMembers; roomMenu.AppendMenu( MF_STRING, ID_ROOM_BEGIN + i, sName ); } pMenuPopup->GetMenuBar()->ImportFromMenu (roomMenu, TRUE); } if ( m_wndTopChatBar.GetButton( m_FriendsButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getFriends( m_Friends ) < 0 ) { //MessageBox( "Failed to get room list." ); return FALSE; } // let friends who are online appear on top of the list m_Friends.qsort( userOnlineSort ); pMenuPopup->RemoveAllItems(); CMenu friendsMenu; friendsMenu.CreatePopupMenu(); for(int i=0;i<m_Friends.size() && i < MAX_FRIENDS;i++) { MetaClient::ShortProfile & profile = m_Friends[ i ]; CString sFriend; sFriend.Format(_T("%s\t%s"), CString(profile.name), CString(profile.status) ); CMenu friendMenu; friendMenu.CreateMenu(); friendMenu.AppendMenu( MF_STRING, ID_FRIEND_MSG_BEGIN + i, _T("Message") ); friendMenu.AppendMenu( MF_STRING, ID_FRIEND_DEL_BEGIN + i, _T("Delete") ); friendsMenu.AppendMenu( MF_POPUP, (UINT)friendMenu.Detach(), sFriend ); } pMenuPopup->GetMenuBar()->ImportFromMenu( friendsMenu, TRUE ); } if ( m_wndTopChatBar.GetButton( m_StaffButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; MetaClient & client = CGCQLApp::sm_MetaClient; if ( client.getStaffOnline( m_Staff ) < 0 ) return FALSE; dword userId = client.profile().userId; for( int i = 0 ; i < m_Staff.size() ; i++ ) if( m_Staff[ i ].userId == userId ) { m_Staff.remove(i); break; } pMenuPopup->RemoveAllItems(); CMenu staffMenu; staffMenu.CreatePopupMenu(); for(int i=0;i<m_Staff.size() && i < MAX_STAFF;i++) { MetaClient::ShortProfile & profile = m_Staff[ i ]; CString sType; if ( profile.flags & MetaClient::ADMINISTRATOR ) sType = "[ADMIN]"; else if ( profile.flags & MetaClient::MODERATOR ) sType = "[MOD]"; CString sName; sName = profile.name; CString sStaffMember; sStaffMember.Format( _T("%s: %s\t%s"), sType, sName, CString(profile.status) ); CMenu stMenu; stMenu.CreateMenu(); stMenu.AppendMenu( MF_STRING, ID_STAFF_MSG_BEGIN + i, _T("Message") ); bool bInserted = false; for(unsigned int j=0;j<staffMenu.GetMenuItemCount() && !bInserted;j++) { CString sCompare; staffMenu.GetMenuString( j, sCompare, MF_BYPOSITION ); if ( _tcscmp( sCompare, sName ) > 0 ) { staffMenu.InsertMenu( j, MF_BYPOSITION|MF_POPUP, (UINT)stMenu.Detach(), sStaffMember ) ? true : false; bInserted = true; } } if (!bInserted ) staffMenu.AppendMenu( MF_POPUP, (UINT)stMenu.Detach(), sStaffMember ); } pMenuPopup->GetMenuBar()->ImportFromMenu( staffMenu, TRUE ); } if ( m_wndTopChatBar.GetButton( m_ClanButton ) == pMenuPopup->GetParentButton() ) { CWaitCursor wait; pMenuPopup->RemoveAllItems(); MetaClient & client = CGCQLApp::sm_MetaClient; CMenu clanMenu; clanMenu.CreatePopupMenu(); //clanMenu.AppendMenu( MF_STRING, ID_GAMEBAR_CLAN, _T("Fleet Home") ); dword clanId = client.profile().clanId; if ( clanId != 0 ) { clanMenu.AppendMenu( MF_SEPARATOR ); if ( client.getClan( clanId, m_Clan ) < 0 ) { //MessageBox( "Failed to get clan members" ); return FALSE; } // Remove self from clanlist for( int i = 0 ; i < m_Clan.size() ; i++ ) if( m_Clan[i].userId == client.profile().userId ) { m_Clan.remove(i); break; } // let members who are online appear on top of the list m_Clan.qsort( userOnlineSort ); for( int i = 0 ; i < m_Clan.size() && i < MAX_CLAN ; i++ ) { MetaClient::ShortProfile & profile = m_Clan[ i ]; CString sClanMember; sClanMember.Format( _T("%s\t%s"), CString(profile.name), CString(profile.status) ); CMenu subMenu; subMenu.CreateMenu(); subMenu.AppendMenu( MF_STRING, ID_CLAN_MSG_BEGIN + i, _T("Message") ); clanMenu.AppendMenu( MF_POPUP, (UINT)subMenu.Detach(), sClanMember ); } } pMenuPopup->GetMenuBar()->ImportFromMenu( clanMenu, TRUE ); } } return TRUE; }
BOOL CMainWizard::OnInitDialog(void) { CString strRestore; CString strMinimize; CMenu menuTemp; CString strNewItem; int nInitialDelay, nAutoPopDelay; int cxMaxWidth; DWORD crTipBk, crTipText; // invoke inherited handler BOOL fResult = __super::OnInitDialog(); CenterWindow(FromHandle(::GetDesktopWindow())); // set wizard's icons SetIcon(m_hIcon, TRUE); SetIcon(m_hSmIcon, FALSE); // try to obtain localized text for the "Minimize" system command HMODULE hUser32 = ::GetModuleHandle(_T("user32")); if (menuTemp.Attach(::LoadMenu(hUser32, MAKEINTRESOURCE(16)))) { menuTemp.GetMenuString(SC_RESTORE, strRestore, MF_BYCOMMAND); menuTemp.GetMenuString(SC_MINIMIZE, strMinimize, MF_BYCOMMAND); ::DestroyMenu(menuTemp.Detach()); } if (strMinimize.IsEmpty()) { // probably f****n' Win9x strRestore.LoadString(IDS_SC_RESTORE); strMinimize.LoadString(IDS_SC_MINIMIZE); } // adjust system menu CMenu* pSysMenu = GetSystemMenu(FALSE); ASSERT_VALID(pSysMenu); pSysMenu->InsertMenu(SC_MOVE, MF_BYCOMMAND, SC_RESTORE, strRestore); pSysMenu->InsertMenu(SC_CLOSE, MF_BYCOMMAND, SC_MINIMIZE, strMinimize); pSysMenu->InsertMenu(SC_CLOSE, MF_BYCOMMAND | MF_SEPARATOR); MENUITEMINFO miInfo = { sizeof(miInfo), MIIM_BITMAP }; miInfo.hbmpItem = HBMMENU_POPUP_RESTORE; ::SetMenuItemInfo(pSysMenu->GetSafeHmenu(), SC_RESTORE, FALSE, &miInfo); miInfo.hbmpItem = HBMMENU_POPUP_MINIMIZE; ::SetMenuItemInfo(pSysMenu->GetSafeHmenu(), SC_MINIMIZE, FALSE, &miInfo); ModifyStyle(0, WS_MINIMIZEBOX); int iInsertPos = 0; CUpdateItApp* pApp = DYNAMIC_DOWNCAST(CUpdateItApp, AfxGetApp()); ASSERT_VALID(pApp); if (m_arrLangNames.GetCount() > 1) { CMenu menuLangs; menuLangs.LoadMenu(IDR_MENU_LANGS); CMenu* pPopupMenu = menuLangs.GetSubMenu(0); ASSERT_VALID(pPopupMenu); UINT_PTR uID = reinterpret_cast<UINT_PTR>(pPopupMenu->Detach()); CString strText; menuLangs.GetMenuString(0, strText, MF_BYPOSITION); pSysMenu->InsertMenu(iInsertPos++, MF_BYPOSITION | MF_POPUP, uID, strText); pSysMenu->InsertMenu(iInsertPos++, MF_BYPOSITION | MF_SEPARATOR); menuLangs.Detach(); CheckCurLangMenuItem(); } OSVERSIONINFO osVerInfo = { sizeof(osVerInfo) }; GetVersionEx(&osVerInfo); if (osVerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT && osVerInfo.dwMajorVersion >= 5) { // Windows 2000/XP/2003 strNewItem.LoadString(IDS_SC_EXPORT_SETTINGS); pSysMenu->InsertMenu(iInsertPos++, MF_BYPOSITION, IDM_SC_EXPORT_SETTINGS, strNewItem); strNewItem.LoadString(IDS_SC_IMPORT_SETTINGS); pSysMenu->InsertMenu(iInsertPos++, MF_BYPOSITION, IDM_SC_IMPORT_SETTINGS, strNewItem); pSysMenu->InsertMenu(iInsertPos++, MF_BYPOSITION | MF_SEPARATOR); } // customize tool tips nInitialDelay = pApp->GetProfileInt(SZ_REGK_TIPS, SZ_REGV_TIPS_INITIAL_DELAY, 900); nAutoPopDelay = pApp->GetProfileInt(SZ_REGK_TIPS, SZ_REGV_TIPS_AUTO_POP_DELAY, 5000); cxMaxWidth = pApp->GetProfileInt(SZ_REGK_TIPS, SZ_REGV_TIPS_MAX_WIDTH, 300); crTipBk = pApp->GetProfileInt(SZ_REGK_TIPS, SZ_REGV_TIPS_BK_COLOR, ::GetSysColor(COLOR_INFOBK)); crTipText = pApp->GetProfileInt(SZ_REGK_TIPS, SZ_REGV_TIPS_TEXT_COLOR, ::GetSysColor(COLOR_INFOTEXT)); int cPages = m_pages.GetSize(); for (int i = 0; i < cPages; ++i) { CBetterPropPage* pPage = reinterpret_cast<CBetterPropPage*>(m_pages[i]); CToolTipCtrl& tipWnd = pPage->GetToolTipCtrl(); tipWnd.SetDelayTime(TTDT_INITIAL, nInitialDelay); tipWnd.SetDelayTime(TTDT_AUTOPOP, nAutoPopDelay); tipWnd.SetMaxTipWidth(cxMaxWidth); tipWnd.SetTipBkColor(crTipBk); tipWnd.SetTipTextColor(crTipText); } // initialized return (fResult); }
bool CMainFrame::SetLanguageMenu() { CMenu* pParentMenu = GetMenu(); CMenu* pMenu = GetMenu()->GetSubMenu( m_nLangOptionMenuPos ); CUStringConvert strCnv; ASSERT( pMenu ); if ( NULL == m_pPopupMenu ) { m_pPopupMenu = new CMenu; m_pPopupMenu->CreatePopupMenu(); CUString strAdd( g_language.GetString( IDS_CHECKFORADDITIONAL_LANGUAGE_FILES ) ); CUStringConvert strCnv; // Add Check for Updates m_pPopupMenu->AppendMenu( MF_STRING | MF_ENABLED, ID_LANGUAGE_START, strCnv.ToT( strAdd ) ); // Add language menu items for ( DWORD idx = 0; idx < g_language.GetNumLanguageStrings() ; idx++ ) { CUString strAdd( g_language.GetLanguageString( idx ) ); m_pPopupMenu->AppendMenu( MF_STRING | MF_ENABLED, ID_LANGUAGE_START + idx + 1, strCnv.ToT( strAdd ) ); } } CString strCurrent; pMenu->GetMenuString( m_nLangLangMenuPos, strCurrent, MF_BYPOSITION ); // Add language menu items for ( DWORD idx = 0; idx < m_pPopupMenu->GetMenuItemCount(); idx++ ) { CString strMenu; if ( 0 == idx ) { m_pPopupMenu->ModifyMenu( idx, MF_BYPOSITION | MF_STRING, ID_LANGUAGE_START, strCnv.ToT( g_language.GetString( IDS_CHECKFORADDITIONAL_LANGUAGE_FILES ) )); } // get menu string m_pPopupMenu->GetMenuString( idx, strMenu, MF_BYPOSITION ); // check if this is the selected language if ( 0 == g_language.GetLanguage().CompareNoCase( CUString( strMenu ) ) ) { m_pPopupMenu->CheckMenuItem( idx, MF_BYPOSITION | MF_CHECKED ); } else { m_pPopupMenu->CheckMenuItem( idx, MF_BYPOSITION | MF_UNCHECKED ); } } // remove exisiting menu item pMenu->RemoveMenu( m_nLangLangMenuPos, MF_BYPOSITION ); // insert new popup menu pMenu->InsertMenu( m_nLangLangMenuPos, MF_BYPOSITION | MF_POPUP, (UINT)m_pPopupMenu->m_hMenu, strCurrent ); // peform translation g_language.TranslateMenu( GetMenu(), m_nMenuID ); // refresh frame windows ActivateFrame( SW_HIDE ); ActivateFrame( SW_SHOW ); return true; }
void MenuVoicing::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu) { USES_CONVERSION; //CMenu* pMenu = DYNAMIC_DOWNCAST(CMenu, (CObject*)hSysMenu); //TRACE("OnMenuSelect, hSysMenu=%p is %s\n", hSysMenu, ::IsMenu(hSysMenu) ? "HMENU" : pMenu ? "CMenu" : "unknown"); bool isSysMenu = false; //HWND hWnd = MainWndParts::Instance()->mpMainFrame->GetSafeHwnd(); CMenu * pSysMenu = mFrm->GetSystemMenu(FALSE); if (pSysMenu != NULL) { if (pSysMenu->m_hMenu == hSysMenu) { amis::util::Log* p_log = amis::util::Log::Instance(); p_log->writeTrace("System Menu", "MenuVoicing::OnMenuSelect"); TRACE("System Menu !"); isSysMenu = true; } } if (isSysMenu) { CString str; pSysMenu->GetMenuString(nItemID, str, MF_BYCOMMAND); str.Replace(L"&", L""); AudioSequence* seq = new AudioSequence; seq->append(str); AudioSequencePlayer::Instance()->Play(seq); //CMenu* p_menu = p_menu->GetSubMenu(nItemID); /* int nLen = ::GetMenuString(pSysMenu, nItemID, NULL, 0, MF_BYCOMMAND); if (nLen > 0) { LPTSTR lpszText = (LPTSTR)_alloca((nLen + 1) * sizeof(TCHAR)); if (::GetMenuString(pSysMenu, nItemID, lpszText, nLen + 1, MF_BYCOMMAND) == nLen) { CString str; //pSysMenu->GetMenuString(nItemID, str, nFlags); //TRACE(str); str.Append(lpszText); str.Replace(L"&", L""); //str.Replace(CString("&"), CString("")); AudioSequence* seq = new AudioSequence; seq->append(str); AudioSequencePlayer::Instance()->Play(seq); } } */ return; } //don't read separators if (nFlags & MF_SEPARATOR) return; CString s; string prompt; if (nFlags & MF_POPUP) { if ( nFlags & MF_BYPOSITION ) { //AmisBrain::Instance()->playPromptFromUiId(nItemID); } if ( nFlags & MF_BYCOMMAND ) { //AmisBrain::Instance()->playPromptFromUiId(nItemID); } if ((nItemID == 8 || nItemID == 2 || nItemID == 3) && m_lastOpenPopupMenu != NULL && ::IsMenu(m_lastOpenPopupMenu->m_hMenu)) // 8 => "recent" (including separators), 2 => "show section depth" { UINT nID = m_lastOpenPopupMenu->GetMenuItemID(0); std::string prompt = computeRootMenuFromFirstChildID(nID, false); s.Format(_T("\nMenuVoicing::OnMenuSelect(%d) '%s'\n"), nItemID, prompt.c_str()); TRACE(s); amis::util::Log* p_log = amis::util::Log::Instance(); p_log->writeTrace(T2A(s)); AudioSequence* seq = createSeqPrepend(nFlags); if (prompt.compare("file") == 0 || prompt.compare("recentBooksList") == 0) { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "recentBooksList"); PromptItem* p_prompt_ = DataTree::Instance()->findPromptItem("menu"); if (p_prompt_ != NULL) AudioSequencePlayer::fillSequenceContents(seq, p_prompt_); else seq->append(_T("menu")); if (seq->GetCount() == 0) delete seq; else AudioSequencePlayer::Instance()->Play(seq); return; } else if (prompt.compare("navigate") == 0 || prompt.compare("sectiondepth") == 0) { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "sectiondepth"); PromptItem* p_prompt_ = DataTree::Instance()->findPromptItem("menu"); if (p_prompt_ != NULL) AudioSequencePlayer::fillSequenceContents(seq, p_prompt_); else seq->append(_T("menu")); if (seq->GetCount() == 0) delete seq; else AudioSequencePlayer::Instance()->Play(seq); return; } else if (prompt.compare("view") == 0 || prompt.compare("pageStylesList") == 0) { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "pageStylesList"); PromptItem* p_prompt_ = DataTree::Instance()->findPromptItem("menu"); if (p_prompt_ != NULL) AudioSequencePlayer::fillSequenceContents(seq, p_prompt_); else seq->append(_T("menu")); if (seq->GetCount() == 0) delete seq; else AudioSequencePlayer::Instance()->Play(seq); return; } else { delete seq; } } else if ((nItemID >=0 && nItemID <=6) && (m_lastOpenPopupMenu == NULL)) //TODO: Yuuk ! UGLY ! This is only a temporary workaround ! //(nFlags & MF_GRAYED) { s.Format(_T("\nMenuVoicing::OnMenuSelect(%d)\n"), nItemID); TRACE(s); amis::util::Log* p_log = amis::util::Log::Instance(); p_log->writeMessage(T2A(s), "MenuVoicing::OnMenuSelect"); AudioSequence* seq = createSeqPrepend(nFlags); switch (nItemID) { case 0: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "file"); break; } case 1: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "view"); break; } case 2: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "play"); break; } case 3: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "navigate"); break; } case 4: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "bookmarks"); break; } case 5: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "info"); break; } case 6: { AudioSequencePlayer::fillSequenceContainerPromptFromId(seq, "help"); break; } } PromptItem* p_prompt_ = DataTree::Instance()->findPromptItem("menu"); if (p_prompt_ != NULL) AudioSequencePlayer::fillSequenceContents(seq, p_prompt_); else seq->append(_T("menu")); if (seq->GetCount() == 0) delete seq; else AudioSequencePlayer::Instance()->Play(seq); return; } } else { s.Format(_T("MenuVoicing::OnMenuSelect(%d is selected)\n"), nItemID); TRACE(s); amis::util::Log* p_log = amis::util::Log::Instance(); p_log->writeTrace(T2A(s), "MenuVoicing::OnMenuSelect"); amis::BookList* books = theApp.getHistory(); int nRecentBooks = (books ? books->getNumberOfEntries() : 0); if (nRecentBooks > 0 && (nItemID >= AMIS_RECENT_BOOK_BASE_ID && nItemID < AMIS_RECENT_BOOK_BASE_ID + nRecentBooks)) { int idx = nItemID - AMIS_RECENT_BOOK_BASE_ID; amis::BookEntry* p_entry = theApp.getHistory()->getEntry(idx); AudioSequence* seq = createSeqPrepend(nFlags); amis::AudioNode* node = p_entry->getTitleAudio(); std::wstring title = p_entry->getTitleText(); CString strTitle(title.c_str()); if (node != NULL && node->getPath().length() > 0) // todo: the src string length check is there because there seems to be a bug in getTitleAudio { seq->append(node->clone(), strTitle); } else if (title.length() != 0) { seq->append(strTitle); } string str = p_entry->mPath.get_url(); seq->append(A2T(str.c_str())); AudioSequencePlayer::Instance()->Play(seq); return; //CString cstr_filepath = A2T(filepath.c_str()); /* amis::io::BookmarksFileIO bmk_file_io; bmk_file_io.readFromFile(&p_entry->mPath); amis::MediaGroup* p_title = NULL; p_title = bmk_file_io.getBookmarkSet()->getTitle(); if (p_title != NULL) { if (p_title->hasAudio() == true) { amis::AudioNode* p_audio = NULL; p_audio = (amis::AudioNode*)p_title->getAudio(0)->clone(); if (p_audio != NULL) { seq->append(p_audio); AudioSequencePlayer::Instance()->Play(seq); } }else if (p_title->hasText() == true) { amis::TextNode* p_text = NULL; p_text = p_title->getText(); if (p_text != NULL) { wstring str = p_text->getTextString(); seq->append(str.c_str()); AudioSequencePlayer::Instance()->Play(seq); } } } */ } else if (nItemID >= AMIS_BOOKMARKS_BASE_ID && nItemID <= AMIS_BOOKMARKS_BASE_ID + AMIS_MAX_ANYTHING) { int idx = nItemID - AMIS_BOOKMARKS_BASE_ID; //amis::dtb::BookmarkSet* p_bmks = amis::dtb::DtbWithHooks::Instance()->getBookmarks(); //amis::dtb::PositionMark* p_mark = p_bmks->getItem(idx); AudioSequence* seq = createSeqPrepend(nFlags); amis::MediaGroup* p_note = amis::dtb::DtbWithHooks::Instance()->getBookmarks()->getItem(idx)->mpNote; if (p_note!=NULL) { if (p_note->hasAudio() == true) { amis::AudioNode* p_audio = NULL; p_audio = p_note->getAudio(0); if (p_audio != NULL) { amis::TextNode* p_text = NULL; p_text = p_note->getText(); seq->append(p_audio->clone(), (p_text != NULL ? p_text->getTextString().c_str() : L"")); AudioSequencePlayer::Instance()->Play(seq); return; } } else if (p_note->hasText() == true) { amis::TextNode* p_text = NULL; p_text = p_note->getText(); if (p_text != NULL) { wstring str = p_text->getTextString(); seq->append(str.c_str()); AudioSequencePlayer::Instance()->Play(seq); return; } } } } else if (nItemID > AMIS_SECTION_DEPTH_BASE_ID && nItemID <= (AMIS_SECTION_DEPTH_BASE_ID + AMIS_MAX_ANYTHING)) { string strPrompt; switch (nItemID) { case (AMIS_SECTION_DEPTH_BASE_ID+1): { strPrompt = "numeric_one"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+2): { strPrompt = "numeric_two"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+3): { strPrompt = "numeric_three"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+4): { strPrompt = "numeric_four"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+5): { strPrompt = "numeric_five"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+6): { strPrompt = "numeric_six"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+7): { strPrompt = "numeric_seven"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+8): { strPrompt = "numeric_eight"; break; } case (AMIS_SECTION_DEPTH_BASE_ID+9): { strPrompt = "numeric_nine"; break; } } if (!strPrompt.empty()) { //seq->append(strPrompt.c_str()); TEST ONLY AudioSequencePlayer::playPromptFromStringId(strPrompt); return; } } //is this a view menu item (sections/prodnotes/etc) else if (nItemID >= AMIS_VIEW_MENU_BASE_ID && nItemID < AMIS_VIEW_MENU_BASE_ID + MenuManip::Instance()->getNumberOfViewMenuNavContainers()) { amis::dtb::nav::NavModel* p_model = amis::dtb::DtbWithHooks::Instance()->getNavModel(); //first item in the list is always "sections" if (nItemID == AMIS_VIEW_MENU_BASE_ID) { AudioSequencePlayer::playPromptFromStringId("sections"); } //then "pages", if exists else if (nItemID == AMIS_VIEW_MENU_BASE_ID + 1 && p_model != NULL && p_model->hasPages()) { AudioSequencePlayer::playPromptFromStringId("pages"); } else if (p_model != NULL) { //otherwise it's a nav list so ask NavParse for the nav list ID //subtract 1 because the menu items include sections, pages, navlists //we want just the index relative to nav lists int idx = nItemID - AMIS_VIEW_MENU_BASE_ID - 1; //adjust again by subtracting 1 if there are pages in this book if (p_model->hasPages() == true) { idx--; } std::string item_id = p_model->getNavList(idx)->getId(); if (item_id.compare("prodnote") == 0 || item_id.compare("optional-prodnote") == 0 ) { AudioSequencePlayer::playPromptFromStringId("prodnotes"); } else if (item_id.compare("sidebar") == 0) { AudioSequencePlayer::playPromptFromStringId("sidebars"); } else if (item_id.compare("footnote") == 0 || item_id.compare("noteref") == 0) { AudioSequencePlayer::playPromptFromStringId("noterefs"); } else { //we can't identify it, so read its name with TTS AudioSequencePlayer::playPromptFromUiId(nItemID); } } } else { AudioSequence* seq = createSeqPrepend(nFlags); AudioSequencePlayer::playPromptFromUiId(nItemID, seq); return; } } }
void CChatBkDlg::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if(m_selBtnRect.PtInRect(point)) { CMenu poupoMenu; poupoMenu.CreatePopupMenu(); USERINFO::IPListLock.lock(CReadWriteLock::LOCK_LEVEL_READ); int index = 0; for (set<tstring>::iterator it = m_pCurrentUser->ipList.begin(); it != m_pCurrentUser->ipList.end(); ++it, ++index) { if(_tcscmp(m_curUserIP.c_str(), (*it).c_str()) == 0) poupoMenu.AppendMenu(MF_STRING | MF_CHECKED, WM_INDEXBASE + index, (*it).c_str()); else poupoMenu.AppendMenu(MF_STRING, WM_INDEXBASE + index, (*it).c_str()); } USERINFO::IPListLock.unlock(); int menuSel = 0; CPoint pt = point; ClientToScreen(&pt); if(menuSel = poupoMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RETURNCMD, pt.x, pt.y, this)) { CString strText = _T(""); poupoMenu.GetMenuString(menuSel, strText, MF_BYCOMMAND); m_curUserIP = strText; Invalidate(FALSE); } poupoMenu.DestroyMenu(); } else if (m_minBtnRect.PtInRect(point)) { ShowWindow(SW_MINIMIZE); return; } else if (m_maxBtnRect.PtInRect(point)) { if (IsZoomed()) ShowWindow(SW_NORMAL); else ShowWindow(SW_MAXIMIZE); return; } else if (m_closeBtnRect.PtInRect(point) || m_close1BtnRect.PtInRect(point)) { OnCancel(); return; } else if (m_sendBtnRect.PtInRect(point)) { PostMessage(WM_PRESEND); return; } else if (m_sendFileRc.PtInRect(point)) { AfxGetMainWnd()->SendMessage(WM_PRESEND, 1, 0); return; } else if (m_sendDicRc.PtInRect(point)) { AfxGetMainWnd()->SendMessage(WM_PRESEND, 2, 0); return; } else if (m_sendPictureRc.PtInRect(point)) { AfxGetMainWnd()->SendMessage(WM_PRESEND, 3, 0); return; } CDialog::OnLButtonUp(nFlags, point); }
void CCompileEditView::SaveDataMenu(UINT nID) { if(g_pSaveMenu.m_hMenu == NULL) return; CString strComm; g_pSaveMenu.GetMenuString(nID,strComm,MF_BYCOMMAND); if(strComm.IsEmpty()) return; int nPos = strComm.Find(":"); if( nPos != -1 ) { strComm = strComm.Mid(nPos+1); } if(strComm.IsEmpty()) return; if(!IsCompileEdit(COMPILE)) return; CTreeCtrlFormula* pHxTreeCtrl = NULL; HTREEITEM hFloatTreeItem = NULL; CTreeCtrlFormula* pFloatTree = NULL; CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd(); if(pMain != NULL) { if(pMain->GetIndividualInfo() != NULL) { pFloatTree = pMain->GetIndividualInfo(); } } HTREEITEM hTreeItem = NULL; char cType = 0; nID -= SAVEMENU_BEGIN; if(nID >= 0 && nID < 100) { cType = Tech; if(pHxTreeCtrl != NULL) { hTreeItem = pHxTreeCtrl->GetRootTree(CTreeCtrlFormula::g_strTech);// = "技术指标"; hTreeItem = pHxTreeCtrl->GetTreeItem(strComm,hTreeItem); } if(pFloatTree != NULL) { hFloatTreeItem = pFloatTree->GetRootTree(CTreeCtrlFormula::g_strTech);// = "技术指标"; hFloatTreeItem = pFloatTree->GetTreeItem(strComm,hFloatTreeItem); } } if( nID >= 100 && nID < 200 ) { cType = Condition; if(pHxTreeCtrl != NULL) { hTreeItem = pHxTreeCtrl->GetRootTree(CTreeCtrlFormula::g_strCondition);// = "技术指标"; hTreeItem = pHxTreeCtrl->GetTreeItem(strComm,hTreeItem); } if(pFloatTree != NULL) { hFloatTreeItem = pFloatTree->GetRootTree(CTreeCtrlFormula::g_strCondition);// = "技术指标"; hFloatTreeItem = pFloatTree->GetTreeItem(strComm,hFloatTreeItem); } } if( nID >= 200 && nID < 300 ) { cType = Exchange; if(pHxTreeCtrl != NULL) { hTreeItem = pHxTreeCtrl->GetRootTree(CTreeCtrlFormula::g_strExchange);// = "技术指标"; hTreeItem = pHxTreeCtrl->GetTreeItem(strComm,hTreeItem); } if(pFloatTree != NULL) { hFloatTreeItem = pFloatTree->GetRootTree(CTreeCtrlFormula::g_strExchange);// = "技术指标"; hFloatTreeItem = pFloatTree->GetTreeItem(strComm,hFloatTreeItem); } } if( nID >= 300 && nID < 400 ) { cType = MoreKLine; if(pHxTreeCtrl != NULL) { hTreeItem = pHxTreeCtrl->GetRootTree(CTreeCtrlFormula::g_strColorKLine);// = "技术指标"; hTreeItem = pHxTreeCtrl->GetTreeItem(strComm,hTreeItem); } if(pFloatTree != NULL) { hFloatTreeItem = pFloatTree->GetRootTree(CTreeCtrlFormula::g_strColorKLine);// = "技术指标"; hFloatTreeItem = pFloatTree->GetTreeItem(strComm,hFloatTreeItem); } } if( nID >= 400 && nID < 500 ) { cType = ExpressBin; if(pHxTreeCtrl != NULL) { hTreeItem = pHxTreeCtrl->GetRootTree(CTreeCtrlFormula::g_strRecycleBin);// = "技术指标"; hTreeItem = pHxTreeCtrl->GetTreeItem(strComm,hTreeItem); } if(pFloatTree != NULL) { hFloatTreeItem = pFloatTree->GetRootTree(CTreeCtrlFormula::g_strRecycleBin);// = "技术指标"; hFloatTreeItem = pFloatTree->GetTreeItem(strComm,hFloatTreeItem); } } CString strName; CComboBox* pBox = NULL; if(m_pwndDlgMainBar != NULL) { pBox = (CComboBox*)m_pwndDlgMainBar->GetDlgItem(IDC_NAMECOMBO); if(pBox != NULL) { pBox->GetWindowText(strName); strName.MakeUpper(); if( pBox->FindString(0,strName) != CB_ERR ) { CValue* valoare; if ( m_pExternExpression->Lookup(strName,valoare) ) // 外部表达式表 { } } else { pBox->AddString(strName); } } } if( pHxTreeCtrl != NULL && hTreeItem != NULL && !strName.IsEmpty()) { m_hExpressInTreePos = pHxTreeCtrl->AddItem(strName,cType,hTreeItem/*pHxTreeCtrl->GetCurSavePos(hTreeItem)*/,m_pExternExpression); } // 浮动窗口 if( pFloatTree != NULL && hFloatTreeItem != NULL && !strName.IsEmpty()) { pFloatTree->AddItem(strName,cType,hFloatTreeItem/*pFloatTree->GetCurSavePos(hFloatTreeItem)*/,m_pExternExpression); } ::SendMessage( g_hParentWnd,HX_USER_UPDATEDATA,0,(LPARAM)&strName ); }
BOOL CXTPResizePropertySheet::OnInitDialog() { CRect rcClientBegin, rcClientEnd; GetWindowRect(rcClientBegin); SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)(LPRECT)rcClientBegin); // Modify the window style to include WS_THICKFRAME for resizing. ::SetWindowLong(m_hWnd, GWL_STYLE, GetStyle() | WS_THICKFRAME); GetWindowRect(rcClientEnd); SendMessage(WM_NCCALCSIZE, FALSE, (LPARAM)(LPRECT)rcClientEnd); CPropertySheet::OnInitDialog(); // subclass our "flicker-free" tab control. m_tabCtrl.SubclassWindow(GetTabControl()->m_hWnd); // the size icon is too close to the buttons, so inflate the sheet CRect rc; GetWindowRect(rc); if (rcClientBegin.Width() - rcClientEnd.Width() > 3) { rc.InflateRect((rcClientBegin.Width() - rcClientEnd.Width()) / 2, (rcClientBegin.Height() - rcClientEnd.Height()) / 2); MoveWindow(rc); } // Do this last so that any prop pages are moved accordingly else if (!HasFlag(xtpResizeNoSizeIcon) && !IsWizard()) { rc.InflateRect(1, 1, 2, 2); MoveWindow(rc); } // add sizing entries to the system menu CMenu* pSysMenu = (CMenu*)GetSystemMenu(FALSE); if (pSysMenu) { CString szMaximize, szMinimize, szSize, szRestore; // try to get the strings from the topmost window CWnd* pwndTop; for (pwndTop = this; pwndTop->GetParent(); pwndTop = pwndTop->GetParent()); CMenu* pTopSysMenu = (CMenu*)pwndTop->GetSystemMenu(FALSE); if (pTopSysMenu) { pTopSysMenu->GetMenuString(SC_MAXIMIZE, szMaximize, MF_BYCOMMAND); pTopSysMenu->GetMenuString(SC_MINIMIZE, szMinimize, MF_BYCOMMAND); pTopSysMenu->GetMenuString(SC_SIZE, szSize, MF_BYCOMMAND); pTopSysMenu->GetMenuString(SC_RESTORE, szRestore, MF_BYCOMMAND); } // if we din't get the strings then set them to the English defaults if (szMaximize.IsEmpty()) szMaximize = _T("Ma&ximize"); if (szMinimize.IsEmpty()) szMinimize = _T("Mi&nimize"); if (szSize.IsEmpty()) szSize = _T("&Size"); if (szRestore.IsEmpty()) szRestore = _T("&Restore"); pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_SEPARATOR, 0, (LPCTSTR) 0); pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_MAXIMIZE, szMaximize); pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_MINIMIZE, szMinimize); pSysMenu->InsertMenu(1, MF_BYPOSITION | MF_STRING, SC_SIZE, szSize); pSysMenu->InsertMenu(0, MF_BYPOSITION | MF_STRING, SC_RESTORE, szRestore); } DWORD dwStyle = ::GetWindowLong(m_hWnd, GWL_STYLE); if ((dwStyle & WS_THICKFRAME) == 0) { SetFlag(xtpResizeNoSizeIcon); } CXTPResize::Init(); // Check which buttons are available in sheet or wizard if (IsWizard()) { SetResize(ID_WIZBACK, XTP_ATTR_REPOS(1)); SetResize(ID_WIZNEXT, XTP_ATTR_REPOS(1)); SetResize(ID_WIZFINISH, XTP_ATTR_REPOS(1)); SetResize(ID_WIZLINE, XTP_ANCHOR_BOTTOMLEFT, XTP_ANCHOR_BOTTOMRIGHT); } else { SetResize(IDOK, XTP_ATTR_REPOS(1)); SetResize(ID_APPLY_NOW, XTP_ATTR_REPOS(1)); SetResize(AFX_IDC_TAB_CONTROL, XTP_ATTR_RESIZE(1)); } SetResize(IDCANCEL, XTP_ATTR_REPOS(1)); SetResize(IDHELP, XTP_ATTR_REPOS(1)); // set page sizings CRect rcPage; GetActivePage()->GetWindowRect(rcPage); ScreenToClient(rcPage); int i; for (i = 0; i <GetPageCount(); i++) { SetResize(GetPage(i), XTP_ATTR_RESIZE(1), rcPage); } return TRUE; }
void CFavMenu::LoadFavorites(HMENU &fav_menu, char type) { max_height = GetSystemMetrics(SM_CYSCREEN) - 64; item_height = GetSystemMetrics(SM_CYMENU); MENUITEMINFO mi; mi.cbSize = sizeof(mi); mi.fMask = MIIM_DATA; mi.dwItemData = 0; int last = GetMenuItemCount(fav_menu) - 1; CString _add_to_fav("a"), _open_all("o"), _org_fav("e"); add_to_home = "h"; if (GetMenuItemInfo(fav_menu, last, TRUE, &mi) && mi.dwItemData) { last = bbs_fav.GetSize() - 1; add_to_home = bbs_fav[last--]; _org_fav = bbs_fav[last--]; _open_all = bbs_fav[last--]; _add_to_fav = bbs_fav[last]; DestroyMenu(fav_menu); } else { CMenu tmp; tmp.Attach(fav_menu); CString str; tmp.GetMenuString(last--, str, MF_BYPOSITION); add_to_home += str; tmp.GetMenuString(last--, str, MF_BYPOSITION); _org_fav += str; tmp.GetMenuString(last--, str, MF_BYPOSITION); _open_all += str; tmp.GetMenuString(last, str, MF_BYPOSITION); _add_to_fav += str; } // Favorite 內容經過修改後,menu 必須重建,而原來的 favorite menu 會被刪除, // 所以先前建立的 menu 都已經無效,必須從 CFavMenu 的 array 中移除掉。 // favmenus.RemoveAll(); // 錯誤,這樣會把其他favorite和history的CFavMenu <-> HMENU對應刪除 // 改成下列方式,因為上面已經 DestroyMenu( fav_menu ),所以可以很投機取巧的 // 利用 IsMenu 來檢查,移除 favmenu 中已經無效的 Handles int i; // 此 i 在稍後的程式還有使用 for (i = favmenus.GetSize() - 1;i >= 0;i--) //搜尋看是否為CFavMenu if (!IsMenu(reinterpret_cast<HMENU>(favmenus[i]))) favmenus.RemoveAt(i); // 刪除特定位置第i個 item 後,其後的array都會往前 shift 1, // 但是不用管他,因為是由後往前檢查,所以i後面的都已經檢查過 if ((i = _add_to_fav.Find('\t')) >= 0) add_to_fav = _add_to_fav.Left(i); else add_to_fav = _add_to_fav; if ((i = _open_all.Find('\t')) >= 0) open_all = _open_all.Left(i); else open_all = _open_all; if ((i = _org_fav.Find('\t')) >= 0) org_fav = _org_fav.Left(i); else org_fav = _org_fav; CFile file; #if defined(_COMBO_) if (file.Open(ConfigPath + (type == 's' ? BBS_FAVORITE_FILENAME : WWW_FAVORITE_FILENAME), CFile::modeRead)) #else if (file.Open(ConfigPath + BBS_FAVORITE_FILENAME, CFile::modeRead)) #endif { UINT id; #if defined(_COMBO_) CStringArray* data; if (type == 's') { data = &bbs_fav; id = ID_FIRST_BBS_FAVORITE; } else { data = &web_fav; id = ID_FIRST_WEB_FAVORITE; } #else CStringArray* data = &bbs_fav; id = ID_FIRST_BBS_FAVORITE; #endif data->RemoveAll(); CArchive ar(&file, CArchive::load); int menu_height = 0; fav_menu = DoLoadFavorites(ar, *data, id, menu_height); data->Add(_add_to_fav); AppendMenu(fav_menu, MF_OWNERDRAW, ID_ADDTOFAVORITE, LPCTSTR(id), menu_height); ++id; data->Add(_open_all); AppendMenu(fav_menu, MF_OWNERDRAW, id/*ID_FAVORITE_OPENALL*/, LPCTSTR(id), menu_height); ++id; data->Add(_org_fav); AppendMenu(fav_menu, MF_OWNERDRAW, id/*ID_FAVORITE_EDIT*/, LPCTSTR(id), menu_height); ++id; data->Add(add_to_home); AppendMenu(fav_menu, MF_OWNERDRAW, ID_ADDTOHOME, LPCTSTR(id), menu_height); } }