本人创建了一个dialog的mfc项目,并添加了一个Cstatic控件,在onPain函数里给Cstatic上绘画,绘画过程是通过计时器来执行,在SetTimer之前我必须屏蔽掉一些控件,例如执行如下代码: if (wParam)
{
GetDlgItem(IDC_STATIC_NUM_PANEL)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_PALY)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_STATIC_NUM_PANEL)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_PALY)->EnableWindow(FALSE);
}在killTimer里再次执行以上代码,不再屏蔽控件,但在SetTimer前执行以上代码和killTimer里执行以上代码,对话框都会闪一下,請各路大侠解释其中原理,小弟不胜感激!
{
GetDlgItem(IDC_STATIC_NUM_PANEL)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_PALY)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_STATIC_NUM_PANEL)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_PALY)->EnableWindow(FALSE);
}在killTimer里再次执行以上代码,不再屏蔽控件,但在SetTimer前执行以上代码和killTimer里执行以上代码,对话框都会闪一下,請各路大侠解释其中原理,小弟不胜感激!
同时 SetTimer
在OnTimer里EnableWindow(TRUE);
同事 KillTimer
在IDC_BUTTON_PALY响应函数下,SendMessage(WM_MYSSAGE,0);
在OnTimer里SendMessage(WM_MYSSAGE,0);
同时KillTimer但这样是会闪的!
如果,onPain 的处理中只是 调用一个计时器操作,
那么能否不响应 onPain 消息,而是把 计时器 单独拿到外面执行,设置定时时间。。
另,等待高手解决。。
2.用PostMessage试试
你好,我不大明白你的意思,我把问题说明白点,我是在IDC_BUTTON_PALY响应函数下设置SetTimer,然后在计时器的执行函数里不段调用SendMessage(WM_PAIN)来更新绘画,这个过程是不会闪烁的,但在SetTimer前SendMessage(WM_MYMESSAGE,0)自己的消息就会闪一闪,然后KillTimer里再次SendMessage(WM_MYMESSAGE,1)又会闪一闪,整个过程就闪了两次.
另外,应该响应控件的WM_PAINT消息绘制控件,在窗口的WM_PAINT消息中绘制控件的做法是错的。