用SetDIBitsToDevice将一个数组数据在控件上显示出来,该如何处理

用SetDIBitsToDevice将一个数组数据在控件上显示出来
1、我在Onpaint函数下用SetDIBitsToDevice将一个数组数据显示出来,但是在其它消息函数下就不能显示出来,比如按钮消息,这是为什么呢?

2、我将数组数据全部初始化为某个值,在Onpaint函数下用SetDIBitsToDevice将一个数组数据显示出来,出来的是某一个颜色的图,我想要做的是,通过按下按键,改变初始值(我用的是每按一下,这个值自加十,使显示出来的颜色变化一下),然后调用Invalidate(),出来的结果是全是白色,这又是怎么回事???

3、其实呢,我是想做视频数据的显示,我现在不考虑压缩的问题,我想将摄像头捕获的一帧一帧的数据,用SetDIBitsToDevice显示在控件上,如果不用这种方法,还有什么更好的方法???

------解决方案--------------------
其实前面两个问题就是一个问题,只有写在OnPaint或者OnDraw函数的显示才会在重绘后显示出来,至于加10没有改变的话,可以单步看看,函数本身是可以的
其次的话,可以考虑双缓冲绘图