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

📄 bcmenu.cpp

📁 eCos1.31版
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    if(menusize!=(pBCMenu->m_MenuList.GetUpperBound()+1))      pBCMenu->SynchronizeMenu();    for(int i=0;i<menusize;++i){      if(pBCMenu->GetMenuText(i,menutext)){        menutext.MakeLower();        if(menutext.Find(key)>=0)return(MAKELRESULT(i,2));      }    }  }  return(0);}void BCMenu::DitherBlt (HDC hdcDest, int nXDest, int nYDest, int nWidth,                         int nHeight, HBITMAP hbm, int nXSrc, int nYSrc){  ASSERT(hdcDest && hbm);  ASSERT(nWidth > 0 && nHeight > 0);    // Create a generic DC for all BitBlts  HDC hDC = CreateCompatibleDC(hdcDest);  ASSERT(hDC);    if (hDC)  {    // Create a DC for the monochrome DIB section    HDC bwDC = CreateCompatibleDC(hDC);    ASSERT(bwDC);        if (bwDC)    {      // Create the monochrome DIB section with a black and white palette      struct {        BITMAPINFOHEADER bmiHeader;         RGBQUAD      bmiColors[2];       } RGBBWBITMAPINFO = {                {    // a BITMAPINFOHEADER          sizeof(BITMAPINFOHEADER),  // biSize             nWidth,         // biWidth;             nHeight,        // biHeight;             1,            // biPlanes;             1,            // biBitCount             BI_RGB,         // biCompression;             0,            // biSizeImage;             0,            // biXPelsPerMeter;             0,            // biYPelsPerMeter;             0,            // biClrUsed;             0            // biClrImportant;         },            {          { 0x00, 0x00, 0x00, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 }        }       };      VOID *pbitsBW;      HBITMAP hbmBW = CreateDIBSection(bwDC,        (LPBITMAPINFO)&RGBBWBITMAPINFO, DIB_RGB_COLORS, &pbitsBW, NULL, 0);      ASSERT(hbmBW);            if (hbmBW)      {        // Attach the monochrome DIB section and the bitmap to the DCs        HBITMAP olddib = (HBITMAP)SelectObject(bwDC, hbmBW);        HBITMAP hdcolddib = (HBITMAP)SelectObject(hDC, hbm);                // BitBlt the bitmap into the monochrome DIB section        BitBlt(bwDC, 0, 0, nWidth, nHeight, hDC, nXSrc, nYSrc, SRCCOPY);                // Paint the destination rectangle in gray        FillRect(hdcDest, CRect(nXDest, nYDest, nXDest + nWidth, nYDest +			   nHeight), GetSysColorBrush((IsNewShell())?COLOR_3DFACE:COLOR_MENU));		            //SK: looks better on the old shell        // BitBlt the black bits in the monochrome bitmap into COLOR_3DHILIGHT        // bits in the destination DC        // The magic ROP comes from the Charles Petzold's book        HBRUSH hb = CreateSolidBrush(GetSysColor(COLOR_3DHILIGHT));        HBRUSH oldBrush = (HBRUSH)SelectObject(hdcDest, hb);        BitBlt(hdcDest,nXDest+1,nYDest+1,nWidth,nHeight,bwDC,0,0,0xB8074A);                // BitBlt the black bits in the monochrome bitmap into COLOR_3DSHADOW        // bits in the destination DC        hb = CreateSolidBrush(GetSysColor(COLOR_3DSHADOW));        DeleteObject(SelectObject(hdcDest, hb));        BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight,bwDC,0,0,0xB8074A);        DeleteObject(SelectObject(hdcDest, oldBrush));        VERIFY(DeleteObject(SelectObject(bwDC, olddib)));        SelectObject(hDC, hdcolddib);      }            VERIFY(DeleteDC(bwDC));    }        VERIFY(DeleteDC(hDC));  }}BOOL BCMenu::AddBitmapToImageList(CImageList *bmplist,UINT nResourceID){// O.S.  if (m_bDynIcons){      bmplist->Add((HICON)nResourceID);      return TRUE;  }  BOOL bReturn=TRUE;  HBITMAP hbmp=LoadSysColorBitmap(nResourceID);  if(hbmp){    CBitmap bmp;    bmp.Attach(hbmp);    if(m_bitmapBackgroundFlag) bmplist->Add(&bmp,m_bitmapBackground);    else bmplist->Add(&bmp,GetSysColor(COLOR_3DFACE));    bmp.Detach();    DeleteObject(hbmp);		bReturn=TRUE;  }  else bReturn = FALSE;  return(bReturn);}void BCMenu::SetBitmapBackground(COLORREF color){  m_bitmapBackground=color;  m_bitmapBackgroundFlag=TRUE;}void BCMenu::UnSetBitmapBackground(void){  m_bitmapBackgroundFlag=FALSE;}// Given a toolbar, append all the options from it to this menu// Passed a ptr to the toolbar object and the toolbar ID// Author : Robert Edward Caldecottvoid BCMenu::AddFromToolBar(CToolBar* pToolBar, int nResourceID){  for (int i = 0; i < pToolBar->GetCount(); i++) {    UINT nID = pToolBar->GetItemID(i);    // See if this toolbar option    // appears as a command on this    // menu or is a separator    if (nID == 0 || GetMenuState(nID, MF_BYCOMMAND) == 0xFFFFFFFF)      continue; // Item doesn't exist    UINT nStyle;    int nImage;    // Get the toolbar button info    pToolBar->GetButtonInfo(i, nID, nStyle, nImage);    // OK, we have the command ID of the toolbar    // option, and the tollbar bitmap offset    int nLoc;    BCMenuData* pData;    BCMenu *pSubMenu = FindMenuOption(nID, nLoc);    if (pSubMenu && nLoc >= 0)pData = pSubMenu->m_MenuList[nLoc];    else {      // Create a new BCMenuData structure      pData = new BCMenuData;      m_MenuList.Add(pData);    }    // Set some default structure members    pData->menuIconNormal = nResourceID;    pData->nID = nID;    pData->nFlags =  MF_BYCOMMAND | MF_OWNERDRAW;    pData->xoffset = nImage;    if (pData->bitmap)pData->bitmap->DeleteImageList();    else pData->bitmap = new CImageList;    pData->bitmap->Create(m_iconX, m_iconY,ILC_COLORDDB|ILC_MASK, 1, 1);    if(!AddBitmapToImageList(pData->bitmap, nResourceID)){			pData->bitmap->DeleteImageList();			delete pData->bitmap;			pData->bitmap=NULL;      pData->menuIconNormal = -1;      pData->xoffset = -1;    }    // Modify our menu    ModifyMenu(nID,pData->nFlags,nID,(LPCTSTR)pData);  }}BOOL BCMenu::Draw3DCheckmark(CDC *dc, const CRect& rc,                             BOOL bSelected, HBITMAP hbmCheck){  CRect rcDest = rc;  CBrush brush;  COLORREF col=GetSysColor((bSelected||!IsNewShell())?COLOR_MENU:COLOR_3DLIGHT);//SK: Looks better on the old shell  brush.CreateSolidBrush(col);  dc->FillRect(rcDest,&brush);  brush.DeleteObject();  if (IsNewShell()) //SK: looks better on the old shell    dc->DrawEdge(&rcDest, BDR_SUNKENOUTER, BF_RECT);  if (!hbmCheck)DrawCheckMark(dc,rc.left+4,rc.top+4,GetSysColor(COLOR_MENUTEXT));  else DrawRadioDot(dc,rc.left+5,rc.top+4,GetSysColor(COLOR_MENUTEXT));  return TRUE;}void BCMenu::DitherBlt2(CDC *drawdc, int nXDest, int nYDest, int nWidth,                         int nHeight, CBitmap &bmp, int nXSrc, int nYSrc){	// create a monochrome memory DC	CDC ddc;	ddc.CreateCompatibleDC(0);  CBitmap bwbmp;	bwbmp.CreateCompatibleBitmap(&ddc, nWidth, nHeight);	CBitmap * pddcOldBmp = ddc.SelectObject(&bwbmp);  CDC dc;	dc.CreateCompatibleDC(0);  CBitmap * pdcOldBmp = dc.SelectObject(&bmp);		// build a mask	ddc.PatBlt(0, 0, nWidth, nHeight, WHITENESS);	dc.SetBkColor(GetSysColor(COLOR_BTNFACE));	ddc.BitBlt(0, 0, nWidth, nHeight, &dc, nXSrc,nYSrc, SRCCOPY);	dc.SetBkColor(GetSysColor(COLOR_BTNHILIGHT));	ddc.BitBlt(0, 0, nWidth, nHeight, &dc, nXSrc,nYSrc, SRCPAINT);	// Copy the image from the toolbar into the memory DC	// and draw it (grayed) back into the toolbar.	dc.FillSolidRect(0,0, nWidth, nHeight, GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU));        //SK: Looks better on the old shell	dc.SetBkColor(RGB(0, 0, 0));	dc.SetTextColor(RGB(255, 255, 255));	CBrush brShadow, brHilight;	brHilight.CreateSolidBrush(GetSysColor(COLOR_BTNHILIGHT));	brShadow.CreateSolidBrush(GetSysColor(COLOR_BTNSHADOW));	CBrush * pOldBrush = dc.SelectObject(&brHilight);	dc.BitBlt(0,0, nWidth, nHeight, &ddc, 0, 0, 0x00E20746L);	drawdc->BitBlt(nXDest+1,nYDest+1,nWidth, nHeight, &dc,0,0,SRCCOPY);	dc.BitBlt(1,1, nWidth, nHeight, &ddc, 0, 0, 0x00E20746L);	dc.SelectObject(&brShadow);	dc.BitBlt(0,0, nWidth, nHeight, &ddc, 0, 0, 0x00E20746L);	drawdc->BitBlt(nXDest,nYDest,nWidth, nHeight, &dc,0,0,SRCCOPY);	// reset DCs	ddc.SelectObject(pddcOldBmp);	ddc.DeleteDC();	dc.SelectObject(pOldBrush);	dc.SelectObject(pdcOldBmp);	dc.DeleteDC();	brShadow.DeleteObject();	brHilight.DeleteObject();	bwbmp.DeleteObject();}void BCMenu::SetDisableOldStyle(void){  disable_old_style=TRUE;}void BCMenu::UnSetDisableOldStyle(void){  disable_old_style=FALSE;}BOOL BCMenu::GetDisableOldStyle(void){  return(disable_old_style);}HBITMAP BCMenu::LoadSysColorBitmap(int nResourceId){  HINSTANCE hInst =     AfxFindResourceHandle(MAKEINTRESOURCE(nResourceId),RT_BITMAP);  HRSRC hRsrc =     ::FindResource(hInst,MAKEINTRESOURCE(nResourceId),RT_BITMAP);	if (hRsrc == NULL)		return NULL;	return AfxLoadSysColorBitmap(hInst, hRsrc, FALSE);}BOOL BCMenu::RemoveMenu(UINT uiId,UINT nFlags){	if(MF_BYPOSITION&nFlags){    UINT uint = GetMenuState(uiId,MF_BYPOSITION);    if(uint&MF_SEPARATOR && !(uint&MF_POPUP)){		  delete m_MenuList.GetAt(uiId);  	  m_MenuList.RemoveAt(uiId);    }    else{  		BCMenu* pSubMenu = (BCMenu*) GetSubMenu(uiId);	  	if(NULL==pSubMenu){		  	UINT uiCommandId = GetMenuItemID(uiId);			  for(int i=0;i<m_MenuList.GetSize(); i++){				  if(m_MenuList[i]->nID==uiCommandId){  					delete m_MenuList.GetAt(i);	  				m_MenuList.RemoveAt(i);		  			break;			  	}			  }		  }		  else{        int numSubMenus = m_SubMenus.GetUpperBound();        for(int m = numSubMenus; m >= 0; m--){          if(m_SubMenus[m]==pSubMenu->m_hMenu){            int numAllSubMenus = m_AllSubMenus.GetUpperBound();            for(int n = numAllSubMenus; n>= 0; n--){              if(m_AllSubMenus[n]==m_SubMenus[m])m_AllSubMenus.RemoveAt(n);            }	  				m_SubMenus.RemoveAt(m);          }        }        int num = pSubMenu->GetMenuItemCount();        for(int i=num-1;i>=0;--i)pSubMenu->RemoveMenu(i,MF_BYPOSITION);  			for(i=m_MenuList.GetUpperBound();i>=0;i--){	  			if(m_MenuList[i]->nID==(UINT)pSubMenu->m_hMenu){		  			delete m_MenuList.GetAt(i);			  		m_MenuList.RemoveAt(i);				  	break;				  }			  }			  delete pSubMenu;      }		}	}	else{		int iPosition =0;		BCMenu* pMenu = FindMenuOption(uiId,iPosition);		if(pMenu)pMenu->RemoveMenu(iPosition,MF_BYPOSITION);	}	return CMenu::RemoveMenu(uiId,nFlags);}BOOL BCMenu::DeleteMenu(UINT uiId,UINT nFlags){	if(MF_BYPOSITION&nFlags){    UINT uint = GetMenuState(uiId,MF_BYPOSITION);    if(uint&MF_SEPARATOR && !(uint&MF_POPUP)){		  delete m_MenuList.GetAt(uiId);  	  m_MenuList.RemoveAt(uiId);    }    else{  		BCMenu* pSubMenu = (BCMenu*) GetSubMenu(uiId);	  	if(NULL==pSubMenu){		  	UINT uiCommandId = GetMenuItemID(uiId);			  for(int i=0;i<m_MenuList.GetSize(); i++){				  if(m_MenuList[i]->nID==uiCommandId){					  delete m_MenuList.GetAt(i);					  m_MenuList.RemoveAt(i);					  break;				  }			  }      }  		else{        int numSubMenus = m_SubMenus.GetUpperBound();        for(int m = numSubMenus; m >= 0; m--){          if(m_SubMenus[m]==pSubMenu->m_hMenu){            int numAllSubMenus = m_AllSubMenus.GetUpperBound();            for(int n = numAllSubMenus; n>= 0; n--){              if(m_AllSubMenus[n]==m_SubMenus[m])m_AllSubMenus.RemoveAt(n);            }	  				m_SubMenus.RemoveAt(m);          }        }        int num = pSubMenu->GetMenuItemCount();        for(int i=num-1;i>=0;--i)pSubMenu->DeleteMenu(i,MF_BYPOSITION);		  	for(i=m_MenuList.GetUpperBound();i>=0;i--){			  	if(m_MenuList[i]->nID==(UINT)pSubMenu->m_hMenu){				  	delete m_MenuList.GetAt(i);					  m_MenuList.RemoveAt(i);  					break;	  			}		  	}			  delete pSubMenu;      }		}	}	else{		int iPosition =0;		BCMenu* pMenu = FindMenuOption(uiId,iPosition);		if(pMenu)pMenu->DeleteMenu(iPosition,MF_BYPOSITION);	}	return CMenu::DeleteMenu(uiId,nFlags);}BOOL BCMenu::AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,int nIconNormal){USES_CONVERSION;return AppendMenuW(nFlags,nIDNewItem,A2W(lpszNewItem),nIconNormal);}BOOL BCMenu::AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,int nIconNormal){  return AppendODMenuW(lpszNewItem,nFlags,nIDNewItem,nIconNormal);}BOOL BCMenu::AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset){USES_CONVERSION;return AppendMenuW(nFlags,nIDNewItem,A2W(lpszNewItem),il,xoffset);}BOOL BCMenu::AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset){  return AppendODMenuW(lpszNewItem,nFlags,nIDNewItem,il,xoffset);}BOOL BCMenu::AppendMenuA(UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp){USES_CONVERSION;return AppendMenuW(nFlags,nIDNewItem,A2W(lpszNewItem),bmp);}BOOL BCMenu::AppendMenuW(UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp){  if(bmp){  	CImageList temp;    temp.Create(m_iconX,m_iconY,ILC_COLORDDB|ILC_MASK,1,1);    if(m_bitmapBackgroundFlag)temp.Add(bmp,m_bitmapBackground);    else temp.Add(bmp,GetSysColor(COLOR_3DFACE));    return AppendODMenuW(lpszNewItem,nFlags,nIDNewItem,&temp,0);  }  return AppendODMenuW(lpszNewItem,nFlags,nIDNewItem,NULL,0);}BOOL BCMenu::InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,int nIconNormal){USES_CONVERSION;return InsertMenuW(nPosition,nFlags,nIDNewItem,A2W(lpszNewItem),nIconNormal);}BOOL BCMenu::InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,int nIconNormal){  return InsertODMenuW(nPosition,lpszNewItem,nFlags,nIDNewItem,nIconNormal);}BOOL BCMenu::InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CImageList *il,int xoffset){USES_CONVERSION;return InsertMenuW(nPosition,nFlags,nIDNewItem,A2W(lpszNewItem),il,xoffset);}BOOL BCMenu::InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CImageList *il,int xoffset){  return InsertODMenuW(nPosition,lpszNewItem,nFlags,nIDNewItem,il,xoffset);}BOOL BCMenu::InsertMenuA(UINT nPosition,UINT nFlags,UINT nIDNewItem,const char *lpszNewItem,CBitmap *bmp){USES_CONVERSION;return InsertMenuW(nPosition,nFlags,nIDNewItem,A2W(lpszNewItem),bmp);}BOOL BCMenu::InsertMenuW(UINT nPosition,UINT nFlags,UINT nIDNewItem,wchar_t *lpszNewItem,CBitmap *bmp){  if(bmp){  	CImageList temp;    temp.Create(m_iconX,m_iconY,ILC_COLORDDB|ILC_MASK,1,1);    if(m_bitmapBackgroundFlag)temp.Add(bmp,m_bitmapBackground);    else temp.Add(bmp,GetSysColor(COLOR_3DFACE));    return InsertODMenuW(nPosition,lpszNewItem,nFlags,nIDNewItem,&temp,0);  }  return InsertODMenuW(nPosition,lpszNewItem,nFlags,nIDNewItem,NULL,0);}//--------------------------------------------------------------------------//[21.06.99 rj]BCMenu* BCMenu::AppendODPopupMenuW(wchar_t *lpstrText){	BCMenu* pSubMenu = new BCMenu;	pSubMenu->m_unselectcheck=m_unselectcheck;	pSubMenu->m_selectcheck=m_selectcheck;	pSubMenu->checkmaps=checkmaps;	pSubMenu->checkmapsshare=TRUE;	pSubMenu->CreatePopupMenu();	AppendODMenuW(lpstrText,MF_POPUP,(UINT)pSubMenu->m_hMenu, -1);	return pSubMenu;}//--------------------------------------------------------------------------//[21.06.99 rj]BCMenu* BCMenu::AppendODPopupMenuA(LPCSTR lpstrText){	USES_CONVERSION;	return AppendODPopupMenuW(A2W(lpstrText));}BOOL BCMenu::ImageListDuplicate(CImageList *il,int xoffset,CImageList *newlist){  if (il == NULL||newlist==NULL||xoffset<0) return FALSE;  HICON hIcon = il->ExtractIcon(xoffset);  int cx, cy;  ImageList_GetIconSize(il->m_hImageList, &cx, &cy);  newlist->Create(cx,cy,ILC_COLOR32|ILC_MASK,1,1);  newlist->Add(hIcon);  ::DestroyIcon(hIcon);  return TRUE;}//*************************************************************************

⌨️ 快捷键说明

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