类似qq等重抽屉菜单的实现。

    为了实现像qq,优化大师中菜单。在网上找了好久,终于在vckbase中找到了。主要的原理就是通过移动窗口来实现的。

    我实现的工具中用了2个按钮和两个listctrl,不过listctrl可以用其他控件来代替,这样就更加多样化了。

     首先是为这2个按钮添加事件,这两个按钮的事件响应函数分别是

afx_msg void  OnBnClicke1(NMHDR * pNMHDR,LRESULT *pResult);

afx_msg void  OnBnClicke2(NMHDR * pNMHDR,LRESULT *pResult);

还需要一个用于切换的函数。

void OnChange();

 

 

这3个函数实现代码如下:

<textarea cols="78" rows="15" name="code" class="cpp">OnBnClicke1(NMHDR * pNMHDR,LRESULT *pResult) { m_clicknum=1; if(m_TopButtonNum==1) { OnBnClickedBtnDevDetect(); return ;// TOOL1按钮已在上层, 再次点击没反应; } OnChange(); m_TopButtonNum=1; } </textarea>

 

 

<textarea cols="78" rows="15" name="code" class="c-sharp">OnBnClickedBtnDevDetect() { // TODO: 在此添加控件通知处理程序代码 m_clicknum=2; if(m_TopButtonNum==2) { return; // TOOL3按钮已在上层, 再次点击没反应; } OnChange(); m_TopButtonNum=2; }</textarea>

 

<textarea cols="78" rows="15" name="code" class="cpp">OnChange() { if(m_TopButtonNum!=1&amp;&amp;m_clicknum==1) { int nWidth; int nHeight; // 第一个按钮已经置于最上层,所以无需移动,其余全置于下面 m_Btn1t.MoveWindow(m_point0.x + 10 , m_point1.y - 20 - m_Rect1.Height(), m_Rect1.Width(), m_Rect1.Height()); // 显示该button按钮下内容 nWidth = m_Rect0.Width(); nHeight = (m_point1.y - 20 - m_Rect1.Height()) - (m_point0.y + 10 + m_Rect0.Height() + m_RectLogo.Height()) ; m_List1.MoveWindow(m_point0.x + 10, m_point0.y + 10 + m_Rect0.Height() + m_RectLogo.Height(), nWidth,nHeight); m_List1.ShowWindow(SW_SHOW); m_List2.ShowWindow(SW_HIDE); //m_pCurrentDlg-&gt;ShowWindow(true); return; } if(m_TopButtonNum!=2&amp;&amp;m_clicknum==2) { int nWidth; int nHeight; // 先将排在它上面的按钮置上不闻; m_Btn2.MoveWindow(m_point0.x + 10 , m_point0.y + 10 + m_Rect0.Height() + m_RectLogo.Height(), m_Rect1.Width(), m_Rect1.Height()); nWidth = m_Rect0.Width(); nHeight = (m_point1.y - 20) - (m_point0.y + 10 + m_Rect0.Height() + m_Rect1.Height() + m_RectLogo.Height()); m_List2.MoveWindow(m_point0.x + 10 , m_point0.y + 10 + m_Rect0.Height() + m_Rect1.Height() + m_RectLogo.Height(), nWidth,nHeight); // 显示该按钮下内容 m_List1.ShowWindow(SW_HIDE); m_List2.ShowWindow(SW_SHOW); //m_pCurrentDlg-&gt;ShowWindow(true); return; } }</textarea>

你可能感兴趣的:(类似qq等重抽屉菜单的实现。)