各位大侠,现小弟要在对话框上加控件实现报警功能,通过STATIC类实现,为什么实现不了?
请问哪位大侠有相关资料,能提供一点吗?
或通过其它类实现报警?

解决方案 »

  1.   

    就是在CSTATIC的控件上怎样实现画面闪烁,当收到一个键盘消息时,STATIC闪烁.
      

  2.   

    CStatic 中派生一个子类,并增加定时器消息。实现画面闪烁,当收到一个键盘消息时,STATIC执行重绘。
      

  3.   

    起一个线程来循环显示你的CSTATIC,我就是这么做的。
      

  4.   

    //得到IDC_STATIC的句柄
    CStatic* pWnd = (CStatic*)GetDlgItem(IDC_STATIC);//根据句柄得到dc
    CDC* pDC = pWnd->GetDC();//得到dc的客户区域,并创建画刷填充这个区域
    CRect rc;
    pWnd->GetClientRect(&rc);
    CBrush brush;
    brush.CreateSolidBrush(RGB(0,255,0));//颜色换成变量就可以拉
    pDC->FillRect(&rc,&brush);//设置dc的裁减区域为客户区域,因为STATIC并不具有真正的dc
    //而是其父窗口的dc,所以用裁减来避免画到客户区域外面去
    CRgn rgn;
    rgn.CreateRectRgn(rc.left,rc.top,rc.right,rc.bottom);
    pDC->SelectClipRgn(&rgn);//安全清理
    pDC->SelectObject(pOldPen);
    pWnd->ReleaseDC(pDC);
      

  5.   

    还是用派生类好些,与对话框接口简单。代码不用加多少。CAlertStatic::CAlertStatic()
    {
    bStart = FALSE;
    }void CAlertStatic::OnTimer(UINT nIDEvent) 
    {
    bStart=!bStart;
    Invalidate();
    CStatic::OnTimer(nIDEvent);
    }void CAlertStatic::StartAlert(BOOL bSt)
    {
    bStart = bSt;
    if(bStart)
    {
    SetTimer(1,500,NULL);
    }
    else
    {
    KillTimer(1);
    Invalidate();
    }
    }void CAlertStatic::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    if(bStart) dc.SelectStockObject(BLACK_BRUSH);
    else  
    dc.SelectStockObject(WHITE_BRUSH);
    CRect rect;
    GetClientRect(rect);
    dc.Rectangle(rect);
    }在对话框类里加按钮消息:
    void CAlertDlg::OnButton1() 
    {
    m_Alert.StartAlert(TRUE);
    }