用vc做了一个简单的抽屉菜单,界面非常简单,只是实现了功能而已。
界面包括3个按钮,一个对话框。
下面讲解设计过程:
1)在对话框类中加入如下变量
int m_left; // 按钮的左边坐标
int m_right; // 按钮的右边坐标
int m_buttonHeight;// 按钮的高度
int m_buttonWidth; // 按钮的宽度
int m_dlgHeight; // 子对话框的高度,而宽度与按钮应该相同
CButton m_button[3]; // 3个按钮,下面会动态创建
2)对如下变量进行初始化,初始化的数据根据自己的尺寸设置
m_left = 0; // 按钮的左边坐标
m_right = 150; // 按钮的右边坐标
m_buttonHeight = 20;// 按钮的高度
m_buttonWidth = 225; // 按钮的宽度
m_dlgHeight = 330; // 子对话框的高度,而宽度与按钮应该相同
在OnInitDialog()函数中加入如下代码:
show(0);
3)show()函数的设计
for(int i=0;i<=index;i++)
{
m_button[i].MoveWindow( m_left, m_buttonHeight*i,m_buttonWidth,
m_buttonHeight );
}
for( i=index+1;i<3;i++)
{
m_button[i].MoveWindow( m_left,m_buttonHeight*i+m_dlgHeight,m_buttonWidth,m_buttonHeight );
}
4)添加按钮的消息映射
.h :
// Generated message map functions
//{{AFX_MSG(CMyDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
//}}AFX_MSG
afx_msg void OnClick(UINT nID);
.cpp:
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDC_BUTTON+0,IDC_BUTTON+2,OnClick)
END_MESSAGE_MAP()
6)消息响应
void CTuopanDlg::OnClick(UINT nID)
{
int index=nID-IDC_BUTTON;
Show(index);
}