LR_DEFAULTCOLOR);
HBITMAP hCaption3BitmapHilite =
CCaptionButton::CombineBitmaps(hCaption3Bitmap,
hMouseOverBitmap,crTransparent);
// 利用上面的定义创建标题栏上的位图,宝库位图的ID号,鼠标经过时的
file://变换位图,鼠标选择时的变换位图和提示文字。
cbExtra.New(1,hCaptionAMBitmapHilite,hCaptionAMBitmap,"guan");
cbExtra.New(2,hCaption2BitmapHilite,hCaption2Bitmap,"xi");
cbExtra.New(3,hCaption3BitmapHilite,hCaption3Bitmap,"ming");
第六步:现在我们可以先停下来看看我们的成果如何。编译我们的工程,运行,我们可以发现,我们的标题栏上增加了三个按钮,鼠标在上面移动或点击的时候,位图会发生变化。只是我们还没有添加在位图上点击是的处理函数,不要急,接下来我们就添加相应的处理函数。
第七步:当我们在标题栏上点击图标时,将有一个消息WM_CBLBUTTONCLICKED产生,参数WPARAM是指点击图标的ID号。
在mainfrm.h中定义消息映射函数afx_msg LRESULT Hit(WPARAM wParam, LPARAM lParam);
在mainfrm.cpp中定义函数实现:
ON_MESSAGE(WM_CBLBUTTONCLICKED, Hit)
LRESULT CMainFrame::Hit(WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{// begin wParam
case 1:
AfxMessageBox("第一个CAPtion");
break;
case 2:
AfxMessageBox("第二个Caption");
break;
case 3:
AfxMessageBox("第三个Caption");
break;
}
return 1;
}
这样,当我们单击图标时将弹出不同的提示对话框,这只是一个例子,至于实现什么样的功能随你的便了。
第八步:标题栏的动态改变。在程序的执行过程中如果你要改变标题栏的样子你同样可以实现,下面分别给出如何删除一个图标和更改一个图标的样子。
void CMainFrame::OnDelete()
{
cbExtra.Delete(1);
}
void CMainFrame::OnChange()
{
cbExtra.Replace(1,
1,
hCaption4BitmapHilite,
hCaption4Bitmap,
"pNewToolTipText");
}
好了,功能实现了,还算满意吧,希望对你有用。
……