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

📄 custommenudlg.cpp

📁 这是书上的代码
💻 CPP
字号:
#include "stdafx.h"
#include "CustomMenu.h"
#include "CustomMenuDlg.h"
#include "CoolMenu.h"

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

#define ITEM_COUNT		10 //菜单项个数
#define IDM_MENU_ITEM	32700 //菜单项起始ID

class CAboutDlg : public CDialog
{
 public:
	CAboutDlg();
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL
 protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

CCustomMenuDlg::CCustomMenuDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCustomMenuDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCustomMenuDlg)
	//}}AFX_DATA_INIT
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CCustomMenuDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCustomMenuDlg)
	DDX_Control(pDX, IDC_CHECK_ICON, m_checkIcon);
	DDX_Control(pDX, IDC_CHECK_BITMAP, m_checkBitmap);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCustomMenuDlg, CDialog)
	//{{AFX_MSG_MAP(CCustomMenuDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CHECK_BITMAP, OnCheckBitmap)
	ON_BN_CLICKED(IDC_CHECK_ICON, OnCheckIcon)
	ON_BN_CLICKED(IDC_BUTTON_TEST, OnButtonTest)
	//}}AFX_MSG_MAP
	ON_COMMAND_RANGE(IDM_MENU_ITEM,IDM_MENU_ITEM+ITEM_COUNT-1,OnMenuClick)
END_MESSAGE_MAP()

BOOL CCustomMenuDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);
	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	//初始化控件
	m_checkIcon.SetCheck(1); 
	GetDlgItem(IDC_RADIO_BIG)->EnableWindow();
    GetDlgItem(IDC_RADIO_SMALL)->EnableWindow();
	CheckRadioButton(IDC_RADIO_BIG,IDC_RADIO_SMALL,IDC_RADIO_BIG); 
	m_checkBitmap.SetCheck(1); 
    GetDlgItem(IDC_RADIO_DRAW)->EnableWindow();
    GetDlgItem(IDC_RADIO_LOAD)->EnableWindow();
	CheckRadioButton(IDC_RADIO_DRAW,IDC_RADIO_LOAD,IDC_RADIO_DRAW); 
	return TRUE;
}

void CCustomMenuDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

void CCustomMenuDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

HCURSOR CCustomMenuDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CCustomMenuDlg::OnMenuClick(UINT nID) //响应弹出菜单单击事件
{
 int id=nID-IDM_MENU_ITEM;
 ASSERT(id>=0 && id<ITEM_COUNT);
 CString str;
 str.Format("选择了菜单项%d。",id); 
 MessageBox(str,"自画式菜单",MB_OK|MB_ICONINFORMATION);
}

void CCustomMenuDlg::OnCheckBitmap() 
{
 if(m_checkBitmap.GetCheck()==1) 
 {
  GetDlgItem(IDC_RADIO_DRAW)->EnableWindow();
  GetDlgItem(IDC_RADIO_LOAD)->EnableWindow();
 }
 else 
 {
  GetDlgItem(IDC_RADIO_DRAW)->EnableWindow(FALSE);
  GetDlgItem(IDC_RADIO_LOAD)->EnableWindow(FALSE);
 }
}

void CCustomMenuDlg::OnCheckIcon() 
{
 if(m_checkIcon.GetCheck()==1) 
 {
  GetDlgItem(IDC_RADIO_BIG)->EnableWindow();
  GetDlgItem(IDC_RADIO_SMALL)->EnableWindow();
 }
 else 
 {
  GetDlgItem(IDC_RADIO_BIG)->EnableWindow(FALSE);
  GetDlgItem(IDC_RADIO_SMALL)->EnableWindow(FALSE);
 }
}

void CCustomMenuDlg::OnButtonTest() //测试按钮
{
	CCoolMenu menu;
	menu.CreatePopupMenu();//创建弹出菜单 
	//设置图标
	if(m_checkIcon.GetCheck()==1)//显示图标 
     if(GetCheckedRadioButton(IDC_RADIO_BIG,IDC_RADIO_SMALL)==IDC_RADIO_BIG) 
	  menu.SetIcon(TRUE,FALSE);//大图标32X32
	 else menu.SetIcon();//小图标16X16
	else menu.SetIcon(FALSE);//不显示图标
	//设置垂直条位图
	if(m_checkBitmap.GetCheck()==1)//显示垂直条位图
	 if(GetCheckedRadioButton(IDC_RADIO_DRAW,IDC_RADIO_LOAD)==IDC_RADIO_DRAW) 
	  menu.SetBitmap(TRUE,0);//函数绘制
	 else menu.SetBitmap(TRUE,IDB_BITMAP);//加载位图资源
	else menu.SetBitmap(FALSE);//不显示垂直条位图
	//添加菜单项
	CMenuItem pMenuItem[ITEM_COUNT];
	for(int i=0;i<ITEM_COUNT;i++) 
	{
	 if(i==ITEM_COUNT/3) pMenuItem[i].bSeperator=TRUE;//分割条 
	 else 
	 {
	  if(m_checkIcon.GetCheck()==1)
       if(GetCheckedRadioButton(IDC_RADIO_BIG,IDC_RADIO_SMALL)==IDC_RADIO_BIG) pMenuItem[i].hItemIcon=(HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON32_01+i%10),IMAGE_ICON,32,32,LR_DEFAULTCOLOR);
	   else pMenuItem[i].hItemIcon=(HICON)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON16_01+i%10),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
	  pMenuItem[i].strItemText.Format("菜单项%d",i);
	 }
	 menu.AppendMenuItem(IDM_MENU_ITEM+i,&pMenuItem[i]);
	}
	POINT mouse;
	::GetCursorPos(&mouse);//取得鼠标位置
	menu.TrackPopupMenu(TPM_LEFTALIGN,mouse.x,mouse.y,this);//弹出自画式菜单
}

⌨️ 快捷键说明

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