VC的MFC实现“指示灯”效果
首先,这是我,一个极其业余的“程序猿”,采用的一个很山寨的方法。
起因是自己编写的一个程序因为老板的需要要在界面上添加一个“指示灯”,按下某个按钮变绿,按下另外的按钮变红,还要有个变黄的功能,灯要好看一点的不要色彩填充那种过于山寨的
所以,首先在对话框上添加一个按钮,因为在按钮上添加图片比较容易;
步骤/方法
- 01
然后修改按钮的ID为:IDC_ForShow;按钮的Disabled属性改为True 在对话框的头文件里面定义变量:CBitmapButton m_ctrlButton; 然后重写OnInitDialog() 头一句为CDialog::OnInitDialog(); 接下来按照提示进行代码添加: m_ctrlButton.SubclassDlgItem(IDC_ForShow, this); m_ctrlButton.ModifyStyle(0,BS_OWNERDRAW); m_ctrlButton.LoadBitmaps(IDB_STOP);
- 02
其中,IDB_STOP是导入的bmp图片的ID号,这个bmp图片实际上是我在PPT里面做的,它的画图功能还是挺强大的,恩。
- 03
可是还有两个问题: 1. 画出来的图片很可能与按钮的尺寸不符。解决方法:一方面保证图片的尺寸和按钮尽量相符,同时拖拽控制按钮的大小进行配合;另一方面也可以利用函数修改控件尺寸,但是我写入代码之后发现控件的尺寸改变不了,不知道哪个属性应该先修改一下才能调节 2. 按下相关按钮之后图片如何改变。解决方法:按理来说,写上m_ctrlButton.LoadBitmaps(图片ID);就可以了,可是这样做之后,发现按键了没反应。无意中将对话框最小化再还原,发现图片变了。所以实际上是没有进行刷心导致的。在后面加上m_ctrlButton.Invalidate()就可以了
- 04
重申,这就是个山寨的法子,如果有老师同学知道更简单更实用的办法不要吝啬啊,拿出来分享一下吧