亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? newmenu.cpp

?? 該文件包含有C8051單片機中實現UART波特率自檢的功能
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
/****************************************************************************
 *																			*		 
 *								GuiToolKit  								*	
 *							 (MFC extension)								*			 
 * Created by Francisco Campos G. www.beyondata.com fcampos@beyondata.com	*
 *--------------------------------------------------------------------------*		   
 *																			*
 * This program is free software;so you are free to use it any of your		*
 * applications (Freeware, Shareware, Commercial),but leave this header		*
 * intact.																	*
 *																			*
 * These files are provided "as is" without warranty of any kind.			*
 *																			*
 *			       GuiToolKit is forever FREE CODE !!!!!					*
 *																			*
 *--------------------------------------------------------------------------*
 * Bug Fixes and improvements : (Add your name)								*
 * -Francisco Campos														*				
 *																			*	
 ****************************************************************************/

//------------------------------------------------------------------------------
// File    : NewMenu.cpp 
// Version : 1.0
// Date    : Mai 2002
// Author  : Bruno Podetti
// Email   : Podetti@gmx.net
// Systems : VC6.0 and VC7.0 (Run under (Window 98/ME), Windows Nt 2000/XP)
//
// Bug Fixes and portions of code from previous version supplied by:
//
// Brent Corkum, Ben Ashley, Girish Bharadwaj, Jean-Edouard Lachand-Robert,
// Robert Edward Caldecott, Kenny Goers, Leonardo Zide, Stefan Kuhr, 
// Reiner Jung, Martin Vladic, Kim Yoo Chul, Oz Solomonovich, Tongzhe Cui, 
// Stephane Clog, Warren Stevens, Damir Valiulin
// 
// You are free to use/modify this code but leave this header intact.
// This class is public domain so you are free to use it any of your 
// applications (Freeware, Shareware, Commercial). 
// All I ask is that you let me know so that if you have a real winner I can
// brag to my buddies that some of my code is in your app. I also wouldn't 
// mind if you sent me a copy of your application since I like to play with
// new stuff.
//------------------------------------------------------------------------------




#include "stdafx.h"        // Standard windows header file
#include "..\header\NewMenu.h"       // CNewMenu class declaration
#include "..\header\GuiDrawLayer.h"
#include "..\header\MenuBar.h"
//#define _TRACE_MENU_

#ifdef _TRACE_MENU_
#include "MyTrace.h"
#endif

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
#endif

#ifndef IS_INTRESOURCE
#define IS_INTRESOURCE(hh) (HIWORD(hh)==NULL)
#endif 

#define GAP 2

#ifndef ODS_HOTLIGHT
#define ODS_HOTLIGHT        0x0040
#endif

#ifndef ODS_INACTIVE
#define ODS_INACTIVE        0x0080
#endif

#ifndef COLOR_MENUBAR
#define COLOR_MENUBAR       30
#endif

#ifndef SPI_GETDROPSHADOW
#define SPI_GETDROPSHADOW   0x1024
#endif

#ifndef SPI_GETFLATMENU
#define SPI_GETFLATMENU     0x1022
#endif
extern int		gbintHorz;			//Horz=0, Vert=1
extern CRect	rcMenu;				//CRect of button

/////////////////////////////////////////////////////////////////////////////
#include "..\header\GuiDrawLayer.h"
// Helpers for casting
__inline HMENU UIntToHMenu(const unsigned int ui )
{
  return( (HMENU)(UINT_PTR)ui );
}

__inline HMENU HWndToHmenu(const HWND hwnd )
{
  return( (HMENU)hwnd );
}

__inline UINT HWndToUInt(const HWND hWnd )
{
  return( (UINT)(UINT_PTR) hWnd);
}

__inline HWND UIntToHWnd(const UINT hWnd )
{
  return( (HWND)(UINT_PTR) hWnd);
}

__inline UINT HMenuToUInt(const HMENU hMenu )
{
  return( (UINT)(UINT_PTR) hMenu);
}

//static CMenuBar* pBar=CNewMenu::m_pBar;
CMenuButton* pb;
static void ShowLastError()
{
  DWORD error = GetLastError();
  if(error)
  {
    LPVOID lpMsgBuf=NULL;
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                  FORMAT_MESSAGE_FROM_SYSTEM | 
                  FORMAT_MESSAGE_IGNORE_INSERTS,
                  NULL,
                  error,
                  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
                  (LPTSTR) &lpMsgBuf,
                  0,
                  NULL );
    if(lpMsgBuf)
    {
      // Display the string.
      MessageBox( NULL, (LPCTSTR)lpMsgBuf, _T("Error"), MB_OK | MB_ICONINFORMATION );
      // Free the buffer.
      LocalFree( lpMsgBuf );
    }
    else
    {
      CString temp;
      temp.Format(_T("Error message 0x%lx not found"),error);
      // Display the string.
      MessageBox( NULL,temp, _T("Error"), MB_OK | MB_ICONINFORMATION );
    }
  }
}

enum Win32Type
{
  Win32s,
  WinNT3,
  Win95,
  Win98,
  WinME,
  WinNT4,
  Win2000,
  WinXP
};

Win32Type IsShellType()
{
  Win32Type  ShellType;
  DWORD winVer;
  OSVERSIONINFO *osvi;

  winVer=GetVersion();
  if(winVer<0x80000000)
  {/*NT */
    ShellType=WinNT3;
    osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
    if (osvi!=NULL)
    {
      ZeroMemory(osvi,sizeof(OSVERSIONINFO));
      osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
      if(!GetVersionEx(osvi))
      {
        ShowLastError();
      }
      if(osvi->dwMajorVersion==4L)
      {
        ShellType=WinNT4;
      }
      else if(osvi->dwMajorVersion==5L && osvi->dwMinorVersion==0L)
      {
        ShellType=Win2000;
      }
      else if(osvi->dwMajorVersion==5L && osvi->dwMinorVersion==1L)
      {
        ShellType=WinXP;
      }
      free(osvi);
    }
  }
  else if (LOBYTE(LOWORD(winVer))<4)
  {
    ShellType=Win32s;
  }
  else
  {
    ShellType=Win95;
    osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
    if (osvi!=NULL)
    {
      memset(osvi,0,sizeof(OSVERSIONINFO));
      osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
      GetVersionEx(osvi);
      if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==10L)
      {
        ShellType=Win98;
      }
      else if(osvi->dwMajorVersion==4L&&osvi->dwMinorVersion==90L)
      {
        ShellType=WinME;
      }
      free(osvi);
    }
  }
  return ShellType;
}

BOOL IsShadowEnabled()
{
  BOOL bEnabled=FALSE;
  if(SystemParametersInfo(SPI_GETDROPSHADOW,0,&bEnabled,0))
  {
    return bEnabled;
  }
  return FALSE;
}

COLORREF DarkenColorXP(COLORREF ColA)
{
  return RGB( MulDiv(GetRValue(ColA),7,10),
              MulDiv(GetGValue(ColA),7,10),
              MulDiv(GetBValue(ColA)+55,7,10));
}

// Function splits a color into its RGB components and
// transforms the color using a scale 0..255
COLORREF DarkenColor( long lScale, COLORREF lColor)
{ 
  long R = MulDiv(GetRValue(lColor),(255-lScale),255);
  long G = MulDiv(GetGValue(lColor),(255-lScale),255);
  long B = MulDiv(GetBValue(lColor),(255-lScale),255);

  return RGB(R, G, B); 
}

COLORREF MixedColor(COLORREF ColA,COLORREF ColB)
{
  // ( 86a + 14b ) / 100
  int Red   = MulDiv(86,GetRValue(ColA),100) + MulDiv(14,GetRValue(ColB),100);
  int Green = MulDiv(86,GetGValue(ColA),100) + MulDiv(14,GetGValue(ColB),100);
  int Blue  = MulDiv(86,GetBValue(ColA),100) + MulDiv(14,GetBValue(ColB),100);

  return RGB( Red,Green,Blue);
}

COLORREF MidColor(COLORREF ColA,COLORREF ColB)
{ 
  // (7a + 3b)/10
  int Red   = MulDiv(7,GetRValue(ColA),10) + MulDiv(3,GetRValue(ColB),10);
  int Green = MulDiv(7,GetGValue(ColA),10) + MulDiv(3,GetGValue(ColB),10);
  int Blue  = MulDiv(7,GetBValue(ColA),10) + MulDiv(3,GetBValue(ColB),10);

  return RGB( Red,Green,Blue);
}

// used for function gradientfill.
//#pragma comment(lib,"Msimg32.lib")

void DrawGradient(CDC* pDC,CRect& Rect,
                  COLORREF StartColor,COLORREF EndColor, 
                  BOOL bHorizontal)
{
  /*TRIVERTEX vert[2] ;
  GRADIENT_RECT gRect;

  vert [0].y = Rect.top;
  vert [0].x = Rect.left;

  vert [0].Red    = COLOR16(COLOR16(GetRValue(StartColor))<<8);
  vert [0].Green  = COLOR16(COLOR16(GetGValue(StartColor))<<8);
  vert [0].Blue   = COLOR16(COLOR16(GetBValue(StartColor))<<8);
  vert [0].Alpha  = 0x0000;

  vert [1].y = Rect.bottom;
  vert [1].x = Rect.right;

  vert [1].Red    = COLOR16(COLOR16(GetRValue(EndColor))<<8);
  vert [1].Green  = COLOR16(COLOR16(GetGValue(EndColor))<<8);
  vert [1].Blue   = COLOR16(COLOR16(GetBValue(EndColor))<<8);
  vert [1].Alpha  = 0x0000;

  gRect.UpperLeft  = 0;
  gRect.LowerRight = 1;

  if(bHorizontal)
    GradientFill(pDC->m_hDC,vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
  else
    GradientFill(pDC->m_hDC,vert,2,&gRect,1,GRADIENT_FILL_RECT_V);*/
}

/////////////////////////////////////////////////////////////////////////////
// CMenuTheme for drawing border and the rest

typedef void (CNewMenu::*pItemMeasureFkt) (LPMEASUREITEMSTRUCT lpMIS, BOOL bIsMenubar);
typedef void (CNewMenu::*pItemDrawFkt) (LPDRAWITEMSTRUCT lpDIS, BOOL bIsMenubar);
typedef BOOL (CNewMenu::*pEraseBkgndFkt) (HWND hWnd, HDC hDC);

typedef void (CMenuTheme::*pDrawMenuBorder)( HWND hWnd, HDC hDC, CPoint screen);

class CMenuTheme
{
public:
  CMenuTheme();

  CMenuTheme(DWORD dwThemeId, 
             pItemMeasureFkt pMeasureItem,
             pItemDrawFkt pDrawItem,
             pItemDrawFkt pDrawTitle,
             DWORD dwFlags=0);

  virtual ~CMenuTheme();
  virtual BOOL OnInitWnd(HWND hWnd);
  virtual BOOL OnUnInitWnd(HWND hWnd);

  virtual BOOL DoDrawBorder();

  virtual BOOL OnDrawBorder(HWND hWnd, HDC hDC);
  virtual BOOL OnEraseBkgnd(HWND hWnd, HDC hDC);
  virtual BOOL OnNcCalcSize(HWND hWnd, NCCALCSIZE_PARAMS* pCalc);
  virtual BOOL OnWindowPosChanging(HWND hWnd, LPWINDOWPOS pPos);

  void DrawShade( HWND hWnd, HDC hDC, CPoint screen);
  void DrawSmalBorder( HWND hWnd, HDC hDC);

public:
  DWORD m_dwThemeId;
  DWORD m_dwFlags;

  pItemMeasureFkt m_pMeasureItem;
  pItemDrawFkt m_pDrawItem;
  pItemDrawFkt m_pDrawTitle;

  CSize m_BorderTopLeft;
  CSize m_BorderBottomRight;
};

/////////////////////////////////////////////////////////////////////////////
// CMenuThemeXP for drawing border and the rest

class CMenuThemeXP :public CMenuTheme
{
public:
  CMenuThemeXP(DWORD dwThemeId, 
                pItemMeasureFkt pMeasureItem,
                pItemDrawFkt pDrawItem,
                pItemDrawFkt pDrawTitle,
                DWORD dwFlags=0);
		
  virtual BOOL OnDrawBorder(HWND hWnd, HDC hDC);
  virtual BOOL OnEraseBkgnd(HWND hWnd, HDC hDC);
  
};

/////////////////////////////////////////////////////////////////////////////
// CNewMenuHook important class for subclassing menus!

class CNewMenuHook
{
public:
	
  class CMenuHookData 
  {
  public:
    CMenuHookData(HWND hWnd,BOOL bSpecialWnd) 
      : m_dwData(bSpecialWnd),m_bDrawBorder(TRUE),m_Point(0,0)
    {
      // Safe actual menu
      m_hMenu = CNewMenuHook::m_hLastMenu;
      // Reset for the next menu
      CNewMenuHook::m_hLastMenu = NULL;

      // Save actual border setting etc.
      m_dwStyle = GetWindowLong(hWnd, GWL_STYLE) ;
      m_dwExStyle = GetWindowLong(hWnd, GWL_EXSTYLE); 
    }

    DWORD m_dwStyle;
    DWORD m_dwExStyle;

    CPoint m_Point;
    DWORD m_dwData;

    BOOL m_bDrawBorder;
    HMENU m_hMenu;
  }; 

public:
  CNewMenuHook();
  ~CNewMenuHook();

public:
  static CMenuHookData* GetMenuHookData(HWND hWnd);

  static BOOL AddTheme(CMenuTheme*);
  static CMenuTheme* RemoveTheme(DWORD dwThemeId);
  static CMenuTheme* FindTheme(DWORD dwThemeId);
	
private:
  static LRESULT CALLBACK NewMenuHook(int code, WPARAM wParam, LPARAM lParam);
  static BOOL CheckSubclassing(HWND hWnd,BOOL bSpecialWnd);
  static LRESULT CALLBACK SubClassMenu(HWND hWnd,  UINT uMsg, WPARAM wParam,  LPARAM lParam );
  static void UnsubClassMenu(HWND hWnd);
 
  static BOOL SubClassMenu2(HWND hWnd,  UINT uMsg, WPARAM wParam,  LPARAM lParam, DWORD* pResult);

public:
  static HMENU m_hLastMenu;
  static DWORD m_dwMsgPos; 
  	
private:
  static HHOOK HookOldMenuCbtFilter;
  // an map of actual opened Menu and submenu
  static CTypedPtrMap<CMapPtrToPtr,HWND,CMenuHookData*> m_MenuHookData;
  // Stores list of all defined Themes
  static CTypedPtrList<CPtrList, CMenuTheme*>* m_pRegisteredThemesList; 
};

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

IMPLEMENT_DYNAMIC(CNewMenuItemData,CObject); 

CNewMenuItemData::CNewMenuItemData()
: m_nTitleFlags(0),
  m_nFlags(0),
  m_nID(0),
  m_nSyncFlag(0),
  m_nxOffset(-1),
  m_pBitmap(NULL),
  m_nMenuIconNormal(-1),
  m_pData(NULL)
{
}

CNewMenuItemData::~CNewMenuItemData()
{
  if(m_pBitmap)
  {
    delete m_pBitmap;
    m_pBitmap = NULL;
  }
}

LPCTSTR CNewMenuItemData::GetString()
{
  return m_szMenuText;
}
 
void CNewMenuItemData::SetString(LPCTSTR szMenuText)
{
  m_szMenuText = szMenuText;
}

#if defined(_DEBUG) || defined(_AFXDLL)
// Diagnostic Support
void CNewMenuItemData::AssertValid() const

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品免费国产一区二区三区四区| 中文欧美字幕免费| 午夜电影网亚洲视频| 一本久道久久综合中文字幕| 亚洲男同性视频| 91久久精品日日躁夜夜躁欧美| 一区二区三区欧美久久| 777午夜精品免费视频| 日本免费新一区视频| 久久久久久久久97黄色工厂| 不卡一区中文字幕| 一区二区三区日韩欧美| 欧美电影在哪看比较好| 国产在线观看免费一区| 国产精品麻豆久久久| 欧美影视一区二区三区| 免费不卡在线观看| 中文字幕乱码日本亚洲一区二区 | 麻豆成人av在线| 26uuuu精品一区二区| av一本久道久久综合久久鬼色| 亚洲美女一区二区三区| 欧美一区二区三区免费观看视频 | 色88888久久久久久影院按摩| 亚洲与欧洲av电影| 精品噜噜噜噜久久久久久久久试看| 国产精品88888| 一区二区成人在线| 久久人人爽人人爽| 欧美猛男超大videosgay| 国产原创一区二区三区| 亚洲精品五月天| 精品免费一区二区三区| 欧美综合一区二区| 粉嫩13p一区二区三区| 亚洲男人电影天堂| 久久久影视传媒| 欧美精品777| 91免费视频大全| 国产曰批免费观看久久久| 亚洲1区2区3区4区| 亚洲国产精品国自产拍av| 欧美肥大bbwbbw高潮| 99久久国产免费看| 国产一区二区三区精品欧美日韩一区二区三区| 综合激情网...| 欧美国产一区在线| 欧美一区二视频| 在线免费一区三区| 国产成人午夜99999| 男女性色大片免费观看一区二区 | 欧美国产欧美亚州国产日韩mv天天看完整| 色狠狠色噜噜噜综合网| 福利一区二区在线| 久久精品国产免费| 日韩激情一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 国产三级精品视频| www国产亚洲精品久久麻豆| 91麻豆精品91久久久久同性| 日本电影欧美片| kk眼镜猥琐国模调教系列一区二区| 另类小说一区二区三区| 日韩精品1区2区3区| 亚洲aaa精品| 亚洲成人精品一区| 亚洲一区二区偷拍精品| 亚洲精品视频免费观看| 亚洲视频小说图片| 欧美激情一区不卡| 国产精品久久久久天堂| 日本一区二区三区免费乱视频| 日韩精品一区二区三区蜜臀| 777亚洲妇女| 91麻豆精品国产综合久久久久久 | 精品一区二区三区久久| 蜜桃一区二区三区四区| 日本va欧美va欧美va精品| 肉肉av福利一精品导航| 午夜不卡av在线| 蜜臀av性久久久久蜜臀aⅴ四虎| 日本不卡在线视频| 青青草原综合久久大伊人精品优势| 午夜成人免费视频| 青青草国产精品97视觉盛宴| 久久精品国产亚洲一区二区三区| 奇米精品一区二区三区在线观看| 麻豆精品精品国产自在97香蕉| 蜜桃视频第一区免费观看| 美日韩一级片在线观看| 黑人巨大精品欧美黑白配亚洲| 国内精品第一页| 欧美日韩亚洲另类| 91精品国产一区二区三区蜜臀| 日韩精品中文字幕一区| 久久五月婷婷丁香社区| 国产三级精品三级| 亚洲日本va午夜在线影院| 一区二区免费在线播放| 日本欧美一区二区三区乱码| 国产一区二区三区免费看| 成人精品视频一区| 在线看国产一区二区| 91精品免费在线观看| 久久久亚洲高清| 最新国产の精品合集bt伙计| 亚洲一区二区三区视频在线 | 欧美日韩综合不卡| 欧美一区二区三区在线观看视频| ww亚洲ww在线观看国产| 亚洲视频一区在线| 久久精品国产在热久久| 成人a区在线观看| 精品视频免费在线| 精品国产髙清在线看国产毛片| 欧美激情综合五月色丁香小说| 亚洲国产乱码最新视频| 国产精品一色哟哟哟| 91国内精品野花午夜精品| 精品国产伦一区二区三区免费| 国产精品久久久99| 美国毛片一区二区三区| 波多野洁衣一区| 日韩精品中文字幕在线不卡尤物| 国产精品久久久久7777按摩| 日本不卡123| 91社区在线播放| 欧美大片日本大片免费观看| 亚洲另类色综合网站| 精品一区二区三区日韩| 欧美午夜精品电影| 欧美激情一区在线| 久久成人免费日本黄色| 欧美午夜精品久久久久久超碰| 久久久精品人体av艺术| 日韩国产欧美在线观看| 99精品视频在线播放观看| 精品国产一区二区三区忘忧草| 国产精品久久久久永久免费观看 | 亚洲男人的天堂网| 国产精品综合久久| 91精品国产麻豆国产自产在线 | 久久久久99精品一区| 轻轻草成人在线| 欧美日韩精品一区二区三区四区| 国产欧美精品一区二区色综合朱莉| 日本最新不卡在线| 在线精品视频免费播放| 中文字幕日本不卡| 国产精品中文字幕一区二区三区| 欧美日韩成人一区二区| 亚洲伦理在线免费看| 99国产精品99久久久久久| 国产日韩欧美精品综合| 狠狠色综合播放一区二区| 欧美一级夜夜爽| 五月天欧美精品| 欧美日韩国产123区| 亚洲自拍偷拍麻豆| 91黄色小视频| 亚洲女同ⅹxx女同tv| 色综合久久88色综合天天免费| 国产精品女主播av| 成人国产精品免费观看视频| 久久久.com| 国产91综合一区在线观看| 日本一区二区三区国色天香| 成人午夜私人影院| 国产精品乱码人人做人人爱 | 成人免费看片app下载| 国产丝袜在线精品| 国产不卡在线视频| 国产精品色在线观看| av电影在线观看完整版一区二区| 国产清纯白嫩初高生在线观看91 | 91一区二区三区在线观看| 国产精品理论在线观看| www.av亚洲| 亚洲韩国一区二区三区| 欧美日韩精品一区视频| 免费人成在线不卡| 久久综合九色综合欧美亚洲| 国产精品18久久久| 综合电影一区二区三区 | 亚洲欧洲精品一区二区精品久久久 | 一区二区三区色| 欧美性大战久久久久久久蜜臀| 亚洲国产一区二区a毛片| 5858s免费视频成人| 久久精品理论片| 欧美激情一区二区三区四区| 色综合天天做天天爱| 亚洲第一二三四区| 精品久久一区二区三区| 成人午夜私人影院| 亚洲国产精品久久一线不卡| 日韩午夜激情电影| 成人深夜福利app| 亚洲成人在线网站| 久久久91精品国产一区二区精品 |