王朝网络
分享
 
 
 

标题栏上添加按钮

王朝厨房·作者佚名  2007-01-04
宽屏版  字体: |||超大  

自从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);

// 设置位图1

HBITMAP hCaptionAMBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),

MAKEINTRESOURCE(IDB_BITMAP3),

IMAGE_BITMAP,

0,

0,

LR_LOADMAP3DCOLORS|LR_DEFAULTCOLOR);

HBITMAP hCaptionAMBitmapHilite =

CCaptionButton::CombineBitmaps(hCaptionAMBitmap,

hMouseOverBitmap, crTransparent);

// 设置位图2

HBITMAP 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 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");

}

好了,功能实现了,还算满意吧,希望对你有用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有