📄 custommenudlg.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 + -