Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16502950
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:23:54

下载本文示例代码
  自从Windows操作系统出现以后,在应用程序中进行人机交互的思想和手段便发生了根本性的改变,计算机的界面变得友好精彩。一个程序的好坏很大程度上决定于人机交互的方便程度。当前,大多数程序的标题栏都千篇一律,如何让自己的程序与众不同是每个程序员的梦想,但改变标题栏的内容的确有相当的难度。该篇文章向你介绍如何在标题栏上添加图标按钮,而且当鼠标经过和点击该图标时,鼠标将有不同的反应。请按照下面的步骤实现。  第一步:打开VC编程环境,生成一个新的基于单文档的工程temp,所有的选项都取默认值,下面,我们就在此工程的标题栏上生成三个按钮图标。  第二步:下载资源文件,共有三个文件:CaptionButton.cpp、CaptionButton.h和Thunk.h。将这三个文件添加到工程中(添加方法不必细说了吧)。  第三步:在Mainfrm.h中定义变量CCaptionButton cbExtra;,当然要包含头文件#include "CaptionButton.h"。  第四步:为工程加载位图资源,ID号分别为IDB_BITMAP1、IDB_BITMAP2、IDB_BITMAP3、IDB_BITMAP6、IDB_BITMAP7。这些位图将显示在标题栏上,至于用什么样的位图就看你的喜好了。  第五步:在Mainfrm.cpp的OnCreate函数中添加如下的代码: //初识化,m_hWnd是我们要处理的窗口句柄cbExtra.Init(m_hWnd);// // 设置标题栏上的原来的按钮(最大化、最小化和关闭)保留的数目cbExtra.SetNumOfDefaultCaptions(3);// 设置位图的透明颜色COLORREF crTransparent = RGB(255,0,255);cbExtra.SetTransparentColor(crTransparent);// 鼠标选中一个位图后该位图的样子cbExtra.SetSelectionBitmap((HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP7),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR)); // 鼠标移动到一个位图后,该位图的变化HBITMAP hMouseOverBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP2),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);// 设置位图1HBITMAP hCaptionAMBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP3),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);HBITMAP hCaptionAMBitmapHilite =    CCaptionButton::CombineBitmaps(hCaptionAMBitmap,   hMouseOverBitmap, crTransparent);// 设置位图2HBITMAP hCaption2Bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP6),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);HBITMAP hCaption2BitmapHilite =    CCaptionButton::CombineBitmaps(hCaption2Bitmap,   hMouseOverBitmap,crTransparent);// 设置位图三HBITMAP hCaption3Bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP1),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|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 wParamcase 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"); }  好了,功能实现了,还算满意吧,希望对你有用。   自从Windows操作系统出现以后,在应用程序中进行人机交互的思想和手段便发生了根本性的改变,计算机的界面变得友好精彩。一个程序的好坏很大程度上决定于人机交互的方便程度。当前,大多数程序的标题栏都千篇一律,如何让自己的程序与众不同是每个程序员的梦想,但改变标题栏的内容的确有相当的难度。该篇文章向你介绍如何在标题栏上添加图标按钮,而且当鼠标经过和点击该图标时,鼠标将有不同的反应。请按照下面的步骤实现。  第一步:打开VC编程环境,生成一个新的基于单文档的工程temp,所有的选项都取默认值,下面,我们就在此工程的标题栏上生成三个按钮图标。  第二步:下载资源文件,共有三个文件:CaptionButton.cpp、CaptionButton.h和Thunk.h。将这三个文件添加到工程中(添加方法不必细说了吧)。  第三步:在Mainfrm.h中定义变量CCaptionButton cbExtra;,当然要包含头文件#include "CaptionButton.h"。  第四步:为工程加载位图资源,ID号分别为IDB_BITMAP1、IDB_BITMAP2、IDB_BITMAP3、IDB_BITMAP6、IDB_BITMAP7。这些位图将显示在标题栏上,至于用什么样的位图就看你的喜好了。  第五步:在Mainfrm.cpp的OnCreate函数中添加如下的代码: //初识化,m_hWnd是我们要处理的窗口句柄cbExtra.Init(m_hWnd);// // 设置标题栏上的原来的按钮(最大化、最小化和关闭)保留的数目cbExtra.SetNumOfDefaultCaptions(3);// 设置位图的透明颜色COLORREF crTransparent = RGB(255,0,255);cbExtra.SetTransparentColor(crTransparent);// 鼠标选中一个位图后该位图的样子cbExtra.SetSelectionBitmap((HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP7),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR)); // 鼠标移动到一个位图后,该位图的变化HBITMAP hMouseOverBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP2),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);// 设置位图1HBITMAP hCaptionAMBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP3),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);HBITMAP hCaptionAMBitmapHilite =    CCaptionButton::CombineBitmaps(hCaptionAMBitmap,   hMouseOverBitmap, crTransparent);// 设置位图2HBITMAP hCaption2Bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP6),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);HBITMAP hCaption2BitmapHilite =    CCaptionButton::CombineBitmaps(hCaption2Bitmap,   hMouseOverBitmap,crTransparent);// 设置位图三HBITMAP hCaption3Bitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),   MAKEINTRESOURCE(IDB_BITMAP1),   IMAGE_BITMAP,   0,   0,   LR_LOADMAP3DCOLORS|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 wParamcase 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"); }  好了,功能实现了,还算满意吧,希望对你有用。 下载本文示例代码


标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮标题栏上添加按钮
阅读(252) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~