// Download by http://www.codefans.net
#include "stdafx.h" // Standard windows header file
#include "officexpmenu.h" // COfficeXPMenu class declaration
#include <afxpriv.h> //SK: makes A2W and other spiffy AFX macros work
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define GAP 1
#ifndef OBM_CHECK
#define OBM_CHECK 32760 // from winuser.h
#endif
#if _MFC_VER <0x400
#error This code does not work on Versions of MFC prior to 4.0
#endif
static CPINFO CPInfo;
// how the menu's are drawn in win9x/NT/2000
UINT COfficeXPMenu::original_drawmode=TYPE_NORMAL;
BOOL COfficeXPMenu::xp_select_disabled=FALSE;
// how the menu's are drawn in winXP
UINT COfficeXPMenu::xp_drawmode=TYPE_XP;
BOOL COfficeXPMenu::original_select_disabled=TRUE;
enum Win32Type
{
Win32s,
Windoze95,
WinNT3,
WinNT4orHigher
};
Win32Type IsShellType()
{
Win32Type ShellType;
DWORD winVer;
OSVERSIONINFO *osvi;
winVer=GetVersion();
if(winVer<0x80000000)
{/*NT */
ShellType=WinNT3;
osvi= (OSVERSIONINFO *)malloc(sizeof(OSVERSIONINFO));
if (osvi!=NULL)
{
memset(osvi,0,sizeof(OSVERSIONINFO));
osvi->dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(osvi);
if (osvi->dwMajorVersion>=4L)
ShellType=WinNT4orHigher;//yup, it is NT 4 or higher!
free(osvi);
}
}
else if (LOBYTE(LOWORD(winVer))<4)
ShellType=Win32s;/*Win32s*/
else
ShellType=Windoze95;/*Windoze95*/
return ShellType;
}
static Win32Type g_Shell=IsShellType();
void COfficeXPMenuData::SetAnsiString(LPCSTR szAnsiString)
{
USES_CONVERSION;
SetWideString(A2W(szAnsiString)); //SK: see MFC Tech Note 059
}
CString COfficeXPMenuData::GetString(void)//returns the menu text in ANSI or UNICODE
//depending on the MFC-Version we are using
{
CString strText;
if (m_szMenuText)
{
#ifdef UNICODE
strText = m_szMenuText;
#else
USES_CONVERSION;
strText=W2A(m_szMenuText); //SK: see MFC Tech Note 059
#endif
}
return strText;
}
CTypedPtrArray<CPtrArray, HMENU> COfficeXPMenu::m_AllSubMenus; // Stores list of all sub-menus
COfficeXPMenu::COfficeXPMenu()
{
m_bDynIcons = FALSE; // O.S. - no dynamic icons by default
disable_old_style=FALSE;
m_iconX = 16; // Icon sizes default to 16 x 16
m_iconY = 15; // ...
m_selectcheck = -1;
m_unselectcheck = -1;
checkmaps=NULL;
checkmapsshare=FALSE;
// set the color used for the transparent background in all bitmaps
m_bitmapBackground=RGB(192,192,192); //gray
m_bitmapBackgroundFlag=FALSE;
GetCPInfo(CP_ACP,&CPInfo);
}
COfficeXPMenu::~COfficeXPMenu()
{
DestroyMenu();
}
BOOL COfficeXPMenu::IsNewShell ()
{
return (Windoze95==g_Shell || WinNT4orHigher==g_Shell);
}
COfficeXPMenuData::~COfficeXPMenuData()
{
if(bitmap)
delete(bitmap);
delete[] m_szMenuText; //Need not check for NULL because ANSI X3J16 allows "delete NULL"
}
void COfficeXPMenuData::SetWideString(const wchar_t *szWideString)
{
delete[] m_szMenuText;//Need not check for NULL because ANSI X3J16 allows "delete NULL"
if (szWideString)
{
m_szMenuText = new wchar_t[sizeof(wchar_t)*(wcslen(szWideString)+1)];
if (m_szMenuText)
wcscpy(m_szMenuText,szWideString);
}
else
m_szMenuText=NULL;//set to NULL so we need not bother about dangling non-NULL Ptrs
}
BOOL COfficeXPMenu::IsMenu(CMenu *submenu)
{
int m;
int numSubMenus = m_AllSubMenus.GetUpperBound();
for(m=0;m<=numSubMenus;++m)
{
if(submenu->m_hMenu==m_AllSubMenus[m])return(TRUE);
}
return(FALSE);
}
BOOL COfficeXPMenu::IsMenu(HMENU submenu)
{
int m;
int numSubMenus = m_AllSubMenus.GetUpperBound();
for(m=0;m<=numSubMenus;++m)
{
if(submenu==m_AllSubMenus[m])return(TRUE);
}
return(FALSE);
}
BOOL COfficeXPMenu::DestroyMenu()
{
// Destroy Sub menus:
int m,n;
int numAllSubMenus = m_AllSubMenus.GetUpperBound();
for(n = numAllSubMenus; n>= 0; n--)
{
if(m_AllSubMenus[n]==this->m_hMenu)m_AllSubMenus.RemoveAt(n);
}
int numSubMenus = m_SubMenus.GetUpperBound();
for(m = numSubMenus; m >= 0; m--)
{
numAllSubMenus = m_AllSubMenus.GetUpperBound();
for(n = numAllSubMenus; n>= 0; n--)
{
if(m_AllSubMenus[n]==m_SubMenus[m])m_AllSubMenus.RemoveAt(n);
}
delete((COfficeXPMenu *)FromHandle(m_SubMenus[m]));
}
m_SubMenus.RemoveAll();
// Destroy menu data
int numItems = m_MenuList.GetUpperBound();
for(m = 0; m <= numItems; m++)delete(m_MenuList[m]);
m_MenuList.RemoveAll();
if(checkmaps&&!checkmapsshare)
{
delete checkmaps;
checkmaps=NULL;
}
// Call base-class implementation last:
return(CMenu::DestroyMenu());
};
int COfficeXPMenu::GetMenuDrawMode(void)
{
COLORREF m_newclrBack=GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU);
COLORREF m_clrBack=GetSysColor(COLOR_MENU);
BOOL XPflag = m_newclrBack==m_clrBack ? FALSE : TRUE;
if(XPflag)
return(xp_drawmode);
return(original_drawmode);
}
void COfficeXPMenu::DrawItem (LPDRAWITEMSTRUCT lpDIS)
{
ASSERT(lpDIS != NULL);
COLORREF m_newclrBack=GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU);
COLORREF m_clrBack=GetSysColor(COLOR_MENU);
BOOL XPflag = m_newclrBack==m_clrBack ? FALSE : TRUE;
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
if(pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE)DrawItem_Win9xNT2000(lpDIS);
else
{
if(XPflag)
{
if(xp_drawmode==TYPE_XP) DrawItem_WinXP(lpDIS);
else DrawItem_Win9xNT2000(lpDIS);
}
else
{
if(original_drawmode==TYPE_XP) DrawItem_WinXP(lpDIS);
else DrawItem_Win9xNT2000(lpDIS);
}
}
}
void COfficeXPMenu::DrawItem_Win9xNT2000 (LPDRAWITEMSTRUCT lpDIS)
{
ASSERT(lpDIS != NULL);
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
CRect rect;
UINT state = (((COfficeXPMenuData*)(lpDIS->itemData))->nFlags);
CBrush m_brBackground;
m_brBackground.CreateSolidBrush(GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU));
// remove the selected bit if it's grayed out
if(lpDIS->itemState & ODS_GRAYED && !original_select_disabled)
{
if(lpDIS->itemState & ODS_SELECTED)lpDIS->itemState=lpDIS->itemState & ~ODS_SELECTED;
}
if(state & MF_SEPARATOR)
{
rect.CopyRect(&lpDIS->rcItem);
pDC->FillRect (rect,&m_brBackground);
rect.top += (rect.Height()>>1);
pDC->DrawEdge(&rect,EDGE_ETCHED,BF_TOP);
}
else
{
CRect rect2;
BOOL standardflag=FALSE,selectedflag=FALSE,disableflag=FALSE;
BOOL checkflag=FALSE;
COLORREF crText = GetSysColor(COLOR_MENUTEXT);
COLORREF m_clrBack=GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU);
CBrush m_brSelect;
CPen m_penBack;
int x0,y0,dy;
int nIconNormal=-1,xoffset=-1;
CImageList *bitmap=NULL;
CFont m_fontMenu;
LOGFONT m_lf;
// set some colors and the font
m_penBack.CreatePen (PS_SOLID,0,GetSysColor((IsNewShell())?COLOR_3DFACE:COLOR_MENU));
m_brSelect.CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
ZeroMemory ((PVOID) &m_lf,sizeof (LOGFONT));
NONCLIENTMETRICS nm;
nm.cbSize = sizeof (NONCLIENTMETRICS);
VERIFY (SystemParametersInfo(SPI_GETNONCLIENTMETRICS,nm.cbSize,&nm,0));
m_lf = nm.lfMenuFont;
m_fontMenu.CreateFontIndirect (&m_lf);
// draw the colored rectangle portion
rect.CopyRect(&lpDIS->rcItem);
rect2=rect;
// draw the up/down/focused/disabled state
UINT state = lpDIS->itemState;
CString strText;
LOGFONT lf;
lf = m_lf;
CFont dispFont;
CFont *pFont=NULL;
if(lpDIS->itemData != NULL)
{
nIconNormal = (((COfficeXPMenuData*)(lpDIS->itemData))->menuIconNormal);
xoffset = (((COfficeXPMenuData*)(lpDIS->itemData))->xoffset);
bitmap = (((COfficeXPMenuData*)(lpDIS->itemData))->bitmap);
strText = ((COfficeXPMenuData*) (lpDIS->itemData))->GetString();
if(state&ODS_CHECKED && nIconNormal<0)
{
if(state&ODS_SELECTED && m_selectcheck>0)checkflag=TRUE;
没有合适的资源?快使用搜索试试~ 我知道了~
vc音量控制程序,实现了系统音量调节
共94个文件
obj:20个
h:11个
sbr:10个
4星 · 超过85%的资源 需积分: 41 287 下载量 118 浏览量
2010-02-26
16:49:42
上传
评论 4
收藏 13.77MB RAR 举报
温馨提示
c++写的音量控制程序,其中的VolumeControl类可移植到其他程序中,用于实现声音和麦克风音量调节
资源推荐
资源详情
资源评论
收起资源包目录
音量控制.rar (94个子文件)
音量控制
PPDlg.h 1KB
TransparentImage.cpp 2KB
Resource.h 2KB
V.rc 8KB
Release
PPDlg.sbr 0B
TransparentImage.sbr 0B
V.sbr 0B
PPDlg.obj 27KB
StdAfx.obj 17KB
TransparentImage.obj 31KB
Settings.ini 58B
BuildLog.htm 8KB
VDlg.sbr 0B
VolumControl.sbr 0B
音量控制.exe 68KB
Link.sbr 0B
FaderWnd.obj 19KB
V.res 8KB
vc60.idb 65KB
vc90.idb 539KB
VDlg.obj 69KB
音量控制.exe.intermediate.manifest 851B
OfficeXPMenu.obj 184KB
Link.obj 28KB
VolumControl.obj 6KB
mt.dep 67B
V.obj 22KB
mutecontrol.obj 6KB
StdAfx.sbr 3.47MB
V.bsc 8.67MB
OfficeXPMenu.sbr 0B
V.pch 31.25MB
FaderWnd.sbr 0B
mutecontrol.sbr 0B
mutecontrol.cpp 3KB
V.suo 17KB
res
V.ico 1KB
icon2.ico 766B
2.ico 3KB
bg.bmp 834B
icon1.ico 766B
icon3.ico 894B
V.rc2 393B
toolbar1.bmp 478B
142.ico 894B
11.bmp 39KB
xptheme.bin 653B
139.ico 894B
22.bmp 39KB
138.ico 2KB
Thumbs.db 24KB
1.ico 3KB
FaderWnd.h 1KB
Settings.ini 93B
V.dsw 525B
Link.h 1KB
V.ncb 12.72MB
OfficeXPMenu.cpp 73KB
VolumControl.cpp 4KB
V.vcproj.TYCMC.chenxintao.user 1KB
V.plg 3KB
FaderWnd.cpp 2KB
V.clw 2KB
V.APS 28KB
V.dsp 5KB
V.opt 54KB
TransparentImage.h 373B
StdAfx.cpp 241B
VDlg.h 2KB
V.cpp 2KB
mutecontrol.h 436B
debug
PPDlg.obj 39KB
StdAfx.obj 16KB
TransparentImage.obj 47KB
BuildLog.htm 7KB
FaderWnd.obj 31KB
V.res 18KB
vc90.idb 507KB
VDlg.obj 83KB
OfficeXPMenu.obj 196KB
Link.obj 43KB
VolumControl.obj 27KB
V.exe.intermediate.manifest 381B
V.obj 45KB
mutecontrol.obj 20KB
StdAfx.h 1KB
VolumControl.h 694B
VDlg.cpp 13KB
Link.cpp 3KB
PPDlg.cpp 1KB
V.vcproj 8KB
V.sln 867B
OfficeXPMenu.h 10KB
V.h 1KB
共 94 条
- 1
seven407
- 粉丝: 138
- 资源: 52
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现的模糊聚类分析项目源码.zip
- 基于springboot的医院门诊管理系统源码.zip
- 基于python的垃圾分类系统源码(高分优质项目).zip
- 场景视点偏移改善激光雷达点云分割项目源码(下载即用).zip
- 纸板缺陷检测数据集VOC+YOLO格式1055张1类别.7z
- 基于CarNet实现裂缝检测python源码+文档说明+数据+图片(课程设计)
- 课程设计-基于耐火材料裂缝剥落检测python源码+课件
- 基于OpenCV的视频道路车道检测python源码+文档说明+实验演示+图片+使用方法(高分毕业设计)
- 基于OpenCV的案例:图像边缘、角点和轮廓检测,图像分割,图像增强;图片拼接;运动目标检测,颜色直方图比较,三帧帧差法,抠图
- SmartPlug-html大一笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页