当前位置:C++技术网 > 资讯 > 实现图片按钮并响应事件

实现图片按钮并响应事件

更新时间:2015-06-23 15:53:44浏览次数:1+次

    一些时候我们想用一个个性的图片来替换普通的按钮,实现特别的效果。但是,一般的按钮只能是在表面显示一个图片而已,并没有达到完全就是一张图片作为按钮效果。而使用图片控件,添加了事件响应却不执行事件,让人很尴尬。接着往下看,这个功能实现很简单,但是如果你一些细节不知道,你就真的无从下手了。
    对于静态文本,图片显示控件,分组控件之类的,都是静态的控件,对应的MFC控件类为CStatic。这个类型的控件,默认是不会响应事件的,主要作用就是作为显示的作用,辅助布局界面而已。所以直接进行事件响应是不可能响应事件的。
    下面我们一步步来实现这个功能。主要是将原理讲述出来。
    首先放置一个图片控件。默认是框架,因为是空的。如果运行查看,则什么也看不到。要显示Icon,我们在控件的Type属性中选择Icon,如果要显示Bitmap则选择Bitmap。其他的暂时不用管,用的最多的是这两种。然后在Image属性中选择图标资源。如果没有图标资源则下拉后是空的,那么你需要先创建资源。方法请参考在按钮上设置图片相关文章。
    控件作为子窗口,默认的标准控件是不处理自己的事件的,它的事件都是交给父窗口处理的。这也是你双击按钮的事件响应在父窗口类中执行的原因。一般的按钮是可以的,因为默认父窗口会处理。但是静态控件,正如名字“静态”一样,就是很安静,不会去打扰父窗口,也就是不通知父窗口,因此父窗口就不会接收到静态控件的通知,也就不能响应静态控件的事件了。
    静态控件的ID全部是IDC_STATIC,如果控件的ID是这个,不管是静态控件还是非静态控件,类向导都不会为你创建事件处理,因为这个代表静态控件。所以如果你要响应静态控件,首先要将其ID改掉。如果按钮ID改正IDC_STATIC,按钮就不能自动创建事件响应了。这个必须注意。很多人放置静态控件后,想进行事件响应,但又不该ID,所以就没法创建事件响应了。因为所有静态控件都是这个,想想也不应该使用这个ID,不然如何识别控件呢。所以把图片控件ID改成其他的,只要不是IDC_STATIC就可以,当然不要和同一个窗口内的其他控件ID重复,是不允许的。
    然后建立事件响应,还是和按钮一样添加,然后添加执行代码。不过仅仅这样还是不行的。
    虽然创建了事件响应,但是因为静态控件默认的风格中是不通知父窗口的,也就是即使你建立了事件响应,但是父窗口接收不到通知,自然就不会执行。要打通这个通知,我们把静态控件的Notify属性设置为True,表示这个静态控件会通知父窗口有事件发生,这样,当图片控件有事件时,图片控件就会通知父窗口,然后父窗口就执行之前建立的时间响应来响应操作。而父窗口识别控件就通过这个控件的ID。所以到现在为止,我们才真正把这个静态控件的响应给打通了。
    必须动手实验,否则你可能还是不清楚的。如果这些不清楚,你就不会对静态控件做事件响应了。
    如果还有疑问,请留言。