承蒙各位帮忙,关于贴图片的问题已经解决,现在想问一下怎样在界面上显示时间,是要用画图的那种方式。
我做了一下,放一个静态文本,然后在onctlcolor中设为黑色,再自己开辟一个线程作为定时器,把时间TEXTOUT上去,可不知道为什么,运行一段时间后,先是无法显示黑色的底色,然后再过一会程序就会出错,麻烦各位再帮我看一下哪里有问题,或者提出更好的解决办法,谢谢!
HBRUSH CHkdsDemoDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); const COLORREF GRAYBLACK=RGB(64,64,64);
if(pWnd->m_hWnd == GetDlgItem(IDC_TIME)->m_hWnd){
pDC->SetBkColor(GRAYBLACK);
HBRUSH hBrush=::CreateSolidBrush(GRAYBLACK);
return hBrush;
}
return hbr;
}
UINT  UpdataThread(LPVOID pParam)
{
CHkdsDemoDlg * pCDD=(CHkdsDemoDlg *)pParam; while(pCDD->bUpdataEnd)
{
Sleep(1000);
logot = CTime::GetCurrentTime();
logotimeyear = logot.Format("   %Y-%m-%d");
logotimehour = logot.Format("     %H:%M:%S"); CDC* pDC;
pDC = pCDD->GetDlgItem(IDC_TIME)->GetDC();
if(pDC!=NULL)
{
pDC->SelectStockObject(NULL_BRUSH);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(192,192,192));
pDC->SelectObject(&font);
pCDD->InvalidateRect(timerect,FALSE);
pDC->TextOut(5,15,logotimeyear);
pDC->TextOut(5,40,logotimehour);
pCDD->GetDlgItem(IDC_TIME)->ReleaseDC(pDC);
}
}
return 1;
}

解决方案 »

  1.   

    一段时间会出错是因为没有释放资源
    刷成黑色
    pDC->FillRect(timerect,CBrush(RGB(0,0,0));
      

  2.   

    HBRUSH hBrush=::CreateSolidBrush(GRAYBLACK);
    刷子创建太多次了,用类变量只创建一次还有线程中设置pDC状态后最好设置回旧的状态
      

  3.   

    TO: shilong(银羽·以吻赠剑),请问什么资源没有释放?
      

  4.   

    TO:wuxfBrave(向五个三角杀啊,请多给分) ,怎么设置回旧的状态?麻烦您说的详细点,我对画图这方面很头痛的,总是搞不清楚,先谢谢了!
      

  5.   

    TO flyelf(空谷清音) :我也不想用线程的,可是用定时器做的话,根本就显示不出来,我也不知道为什么,只好用线程来做定时器了
    对了,你说直接在对话框中使用定时器来定时刷新界面是什么意思呢?是不用线程做定时器,还是怎么的?
      

  6.   

    在对话框中响应WM_TIMER的消息,定时1秒,
    SetTimer(1, 1000, NULL);
    // 把IDC_TIME映射一个变量CString m_strTime;
    CXXDlg::OnTimer(UINT nIDEvent)
    {
    logot = CTime::GetCurrentTime();
    logotimeyear = logot.Format("   %Y-%m-%d");
    logotimehour = logot.Format("     %H:%M:%S");
    m_strTime.Format("%s %s", logotimeyear, logotimehour);
    UpdateData(FALSE);CWnd::OnTimer(nIDEvent);
    }
      

  7.   

    SaveDC()保存DC状态
    RestoreDC()恢复DC状态,看看MSDN
      

  8.   

    TO wuxfBrave(向五个三角杀啊,请多给分):我想请问一下,我在线程中每次都是重新获取DC,并在操作结束后释放该DC,这样还需要恢复到原来的状态吗?不是已经释放了吗?还望您详加指点一下!谢谢!