void CTriangleWaveDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CWnd* pTitle = (CWnd*)this->GetDlgItem(IDC_TITLE);
pTitle->GetWindowRect(m_TitleRect); while(1)
{
//循环绘图过程的代码
}
}假设代码如上面所示,我的界面上有“继续”、“暂停”两个按钮,我想用这两个按钮来控制绘图过程,不知如何实现。在OnPaint()函数的代码执行过程中,点击界面按钮都是无效的。
{
CPaintDC dc(this); // device context for painting
CWnd* pTitle = (CWnd*)this->GetDlgItem(IDC_TITLE);
pTitle->GetWindowRect(m_TitleRect); while(1)
{
//循环绘图过程的代码
}
}假设代码如上面所示,我的界面上有“继续”、“暂停”两个按钮,我想用这两个按钮来控制绘图过程,不知如何实现。在OnPaint()函数的代码执行过程中,点击界面按钮都是无效的。
{
CPaintDC dc(this); // device context for painting
CWnd* pTitle = (CWnd*)this->GetDlgItem(IDC_TITLE);
pTitle->GetWindowRect(m_TitleRect);while(true)
{
if(m_bStop)
{
//循环绘图过程的代码
}sleep(1);
}
}void CTriangleWaveDlg::OnStop(void)
{
m_bStop = false;
}void CTriangleWaveDlg::OnStart(void)
{
m_bStop = true;
}
OnPaint只负责显示当前静态对象,可以利用CArray<OBJ,OBJ>来传递图形对象
void CXXX::OnPaint()
{
// ....
while(!m_bStop)
{
// draw...
}
}
void CXXX::OnBtnControl()
{
m_bStop = !m_bStop;
Invalidate();
}不过我估计不用循环,可以这样:
void CXXX::OnPaint()
{
// ....
if (!m_bStop)
{
// draw...
}
}
void CXXX::OnBtnControl()
{
m_bStop = !m_bStop;
Invalidate();
}Invalidate可以考虑换成InvalidateRect.
然后在每次OnTimer结束的时候Invalidate一下窗口,在OnDraw里面用pDC->Bitblt把全局DC的东西拷贝过来就可以实现一步一步绘制图形的效果.
要不用SetTimer,在OnTimer中绘制在OnDraw和OnPaint中都不行