//////////////////////////////////////////////////
//类名:BCMenu
//功能:具有XP风格的图标菜单
//下载:http://www.codefans.net
//说明:网络下载
//日期:2002.12.12
//////////////////////////////////////////////////
#include "stdafx.h" // Standard windows header file
#include "BCMenu.h" // BCMenu 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 BCMenu::original_drawmode=BCMENU_DRAWMODE_ORIGINAL;
BOOL BCMenu::xp_select_disabled=FALSE;
// how the menu's are drawn in winXP
UINT BCMenu::xp_drawmode=BCMENU_DRAWMODE_XP;
BOOL BCMenu::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 BCMenuData::SetAnsiString(LPCSTR szAnsiString)
{
USES_CONVERSION;
SetWideString(A2W(szAnsiString)); //SK: see MFC Tech Note 059
}
CString BCMenuData::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> BCMenu::m_AllSubMenus; // Stores list of all sub-menus
/*
===============================================================================
BCMenu::BCMenu()
BCMenu::~BCMenu()
-----------------
Constructor and Destructor.
===============================================================================
*/
BCMenu::BCMenu()
{
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);
}
BCMenu::~BCMenu()
{
DestroyMenu();
}
BOOL BCMenu::IsNewShell ()
{
return (Windoze95==g_Shell || WinNT4orHigher==g_Shell);
}
BCMenuData::~BCMenuData()
{
if(bitmap)
delete(bitmap);
delete[] m_szMenuText; //Need not check for NULL because ANSI X3J16 allows "delete NULL"
}
void BCMenuData::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 BCMenu::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 BCMenu::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 BCMenu::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((BCMenu *)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 BCMenu::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 BCMenu::DrawItem(LPDRAWITEMSTRUCT)
---------------------------------------
Called by the framework when a particular item needs to be drawn. We
overide this to draw the menu item in a custom-fashion, including icons
and the 3D rectangle bar.
==========================================================================
*/
void BCMenu::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==BCMENU_DRAWMODE_XP) DrawItem_WinXP(lpDIS);
else DrawItem_Win9xNT2000(lpDIS);
}
else{
if(original_drawmode==BCMENU_DRAWMODE_XP) DrawItem_WinXP(lpDIS);
else DrawItem_Win9xNT2000(lpDIS);
}
}
}
void BCMenu::DrawItem_Win9xNT2000 (LPDRAWITEMSTRUCT lpDIS)
{
ASSERT(lpDIS != NULL);
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
CRect rect;
UINT state = (((BCMenuData*)(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 recta
没有合适的资源?快使用搜索试试~ 我知道了~
VC 6.0简单屏幕画笔源代码.rar
共34个文件
bmp:8个
h:8个
cpp:7个
需积分: 34 9 下载量 77 浏览量
2019-07-10
11:34:16
上传
评论
收藏 81KB RAR 举报
温馨提示
VC 6.0简单屏幕画笔源代码 ,可以让用户直接在屏幕的任意地方写字,仿画图的功能,不过这个不是在指定的画图窗口中才能画出图形,而是打开后,在屏幕的任意地方都可以。而且还可以设置画笔的颜色,有四种颜色可选,还可设置画笔粗细等功能。以下请看画笔的设置部分代码: void CMyWnd::OnRed()//选中绿色 { ColorX=255; ColorY=0; ColorZ=0; } void CMyWnd::OnYellow()//选中黄色 { ColorX=255; ColorY=255; ColorZ=0; } void CMyWnd::OnGreen() //选中绿色 { ColorX=0; ColorY=255; ColorZ=0; } void CMyWnd::OnBlue() //选中蓝色 { ColorX=0; ColorY=0; ColorZ=255; } void CMyWnd::OnAdd() //增加画笔大小 { ADxy =1; } void CMyWnd::OnDec() //增加画笔大小 { if (ADxy!=1) ADxy-=1; } void CMyWnd::OnAbout() //增加画笔大小 { //AfxMessageBox("你好"); //显示关于对话框 CLjxDlg dlg; int xxx=dlg.DoModal(); }
资源推荐
资源详情
资源评论
收起资源包目录
ljxscreen.rar (34个子文件)
srcfans.com
ljxscreen
ljxscreen.cpp 2KB
BtnST.h 8KB
BCMenu.cpp 72KB
ljxscreen.h 1KB
ljxscreenDlg.h 1KB
ljxscreen.clw 1KB
ljxscreen.rc 6KB
ljxscreen.dsp 5KB
RES
GREEN.BMP 822B
LOGO.ICO 766B
DEC.BMP 822B
Run.ico 2KB
ABOUT.BMP 822B
FOL75.ICO 1KB
ljxscreen.ico 1KB
RED.BMP 822B
ljxscreen.rc2 401B
Thumbs.db 38KB
YELLOW.BMP 822B
OK.ICO 2KB
ADD.BMP 822B
BLUE.BMP 822B
EXIT.BMP 822B
ljxscreen.dsw 541B
LjxDlg.h 1KB
Resource.h 2KB
StdAfx.cpp 211B
BtnST.cpp 51KB
BCMenu.h 14KB
MyWnd.cpp 4KB
MyWnd.h 1KB
StdAfx.h 999B
LjxDlg.cpp 1KB
ljxscreenDlg.cpp 4KB
共 34 条
- 1
资源评论
weixin_39840515
- 粉丝: 446
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功