小技巧:一个工具条内放多排按钮 |
| 作者:佚名 来源:CSDN 作者: hustli 更新:2006-8-25 21:05:35 错误报告 我要投稿 |
|
有的时候我们需要在一个工具条内放多排按钮,例如windows自带的画图软件,怎么实现呢?这里有一个小小的技巧,希望你能喜欢:)
首先假定我们的工具条资源号为IDR_PAINTTOOL; 我们从CToolBar类派生出一个CPaintToolbar类,添加一个受保护的成员变量: protected:UIN m_nColumns; file://排m_nColumns行 public: void SetColumns(UINT nColumns);//设置行数 UINT GetColumns() {return m_nColumns;}//获得行数 下面开始添加函数: void CPaintToolbar::SetColumns(UINT nColumns) { m_nColumns=nColums; int nCount=GetToolBarCtrl().GetButtonCount(); for(int i=0;i<nCount;i++) { UINT nStyle=GetButtonStyle(i); bool bWrap=(((i+1)%nColumns)==0); if(bWrap) nStyle|=TBBS_WRAPPED; else nStyle&=~TBBS_WRAPPED; SetButtonStyle(i,nStyle); } Invalidate(); GetParentFrame()->RecalcLayout(); } 好了,一切就这么简单。
光有上面的代码是不行的。下面我简单补充一下。1 从CToolBar中继承自己的类(比如叫CMyPalette),在该类中申明m_nColumns(文中有提到) 2 在CMyPalette的构造函数中输入以下代码CMyPalette::CMyPalette() { m_nColumns = 2;//假设按钮排成两行 m_cxLeftBorder = 5;//以下三个变量在afxwin.h中有定义,可以直接用 m_cyTopBorder = 5; m_cxRightBorder = 5; } 3 在CMainFrame中,声明 CMyPalette m_wndPaletteBar; 4 在CMainFrame ::OnCreate(LPCREATESTRUCT lpCreateStruct)键入创建代码(即建立工具条的代码,不过稍微有点不同)待续
m_cyBottomBorder = 5; }
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |