派生CWnd的窗口类Clovetoyou
cdc获取成功了为什么没有显示文字???
在OnPaint里显示文字就没有问题.
BOOL CLovetoYou::Create()
{
if (NULL == lpClassName)
{
lpClassName = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW, 
::LoadCursor(AfxGetResourceHandle(),MAKEINTRESOURCE(IDC_NOCURSOR))); 
}
CRect rect(0,0,::GetSystemMetrics(SM_CXSCREEN),::GetSystemMetrics(SM_CYSCREEN));
//创建独占全频窗口
CreateEx(WS_EX_TOPMOST,lpClassName,_T(""),WS_VISIBLE | WS_POPUP,
rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
GetSafeHwnd(),NULL,NULL);
//播放视频
if(!PlayAVI())
{
exit(0);
return FALSE;
}
while (m_DvePlay.IsPlaying())
{
        //视屏播放完毕
}

m_DvePlay.Stop();
m_DvePlay.Close();
//显示文字
ShowLove();
return TRUE;
}
BOOL CLovetoYou::ShowLove()
{
CDC *pDC = GetDC();
// CreateThread(NULL,0,PlayThread,(LPVOID)&pDC,0,NULL);
pDC->SetTextColor(RGB(255,0,0));
pDC->TextOut(50,50,"love");
ReleaseDC(pDC);

return TRUE;
}

解决方案 »

  1.   

    如果要一直存在,绘图一定要在OnPaint中做!!
    因为重画的时候,只会重画OnPaint中的内容
      

  2.   

    但是我不想在OnPaint中做, 我想让文字显示一会就消失,我还得做其它操作
      

  3.   

    CDC *pDC = GetDC();
    换成getpaintdc看看,还有就是注意看在你想显示文字的时候是不是有其他窗口重绘的情况发生
      

  4.   

    在OnTimer中加入Invalidate(0)来强制重刷
      

  5.   

    不管你有什么目的,都应该在WM_PAINT消息中绘图;可以通过变量控制是否显示啊。你的方法最终还是被刷新掉了。
      

  6.   

    在WM_PAINT中绘图。显示一会儿,用定时器控制,时间到,重新绘制,不写文字。
      

  7.   

    问题是你显示之后,在窗口刷新时又被刷掉了,所以看不到。如果不通过WM_PAINT消息来处理,可以等窗口刷新后再显示,创建窗口之后先ShowWindow、UpdateWindow,然后再显示。
      

  8.   

    用TextOut或者DrawText输出文字...
    有什么好用的获得文字区域的函数没?
    已经将显示文字部分移动到OnPaint里了.