关于CDC的一点问题!

sdcer777 2003-12-06 01:07:17
我在主窗口的某一个函数内创建了一个窗口,然后,设置主窗口的WM_TIMER事件的处理函数,在其中调用新建窗口的dc->TextOut(),但会出错。下面是详细代码:
void CMainFrame::OnABC()
{
m_FrmWnd=new CFrameWnd();//m_FrmWnd是CMainFrame中一个成员(CFrameWnd*)
m_FrmWnd->Create(NULL,"Screen");
m_FrmWnd->ShowWindow(SW_SHOW);

screenDc=m_FrmWnd->GetDC();//screenDc是CMainFrame中的一个成员(CDC*)

::SetTimer(this->m_hWnd,IDT_SDCER_SCREEN,S_TIME_LONG,NULL);

}
void CMainFrame::OnTimer(UINT nIDEvent)
{
screenDc->TextOut(0,0,"i love you");
CFrameWnd::OnTimer(nIDEvent);
}
可是这样写会出现内存错误(...不能read),怎么改?

...全文
106 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2003-12-07
  • 打赏
  • 举报
回复
其实我也有一个问题,为什么这个程序不报内存泄漏?如果在析构的时候删除new出来的指针还会出错
keiven 2003-12-06
  • 打赏
  • 举报
回复
同意akiy(winexec) 的想法!
canjian 2003-12-06
  • 打赏
  • 举报
回复
学习
akiy 2003-12-06
  • 打赏
  • 举报
回复
你在ontimer里面写各AfxMessageBox()就知道了
sdcer777 2003-12-06
  • 打赏
  • 举报
回复
谢谢各位,我还有一个问题,就是在处理WM_TIMER事件时,即在OnTimer()处理函数内,如果在这个函数内部我调用了另外一个函数,而且这个函数在timer设定的时间内有可能完不成!那这样的话这个程序会不会出问题?

void CMainFrame::OnTimer
{
MyFunc(..)//这个函数在SetTimer()规定的时间内可能不能执行完
}
那么,这样的情况下,我们是不是就不能把MyFunc这样的函数写在OnTimer中呢?(当然,时间不能设的太长,因为这是程序的要求)
simouse 2003-12-06
  • 打赏
  • 举报
回复
GetDC()要和ReleaseDC()成对出现
bluestone 2003-12-06
  • 打赏
  • 举报
回复
bluebohe果然厉害!
bluebohe 2003-12-06
  • 打赏
  • 举报
回复
void CMainFrame::OnButton32771()
{
// TODO: Add your command handler code here
m_FrmWnd=new CFrameWnd();//m_FrmWnd是CMainFrame中一个成员(CFrameWnd*)
m_FrmWnd->Create(NULL,"Screen");
m_FrmWnd->ShowWindow(SW_SHOW);

::SetTimer(this->m_hWnd,1,1000,NULL);

}
void CMainFrame::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(!::IsWindow(m_FrmWnd->m_hWnd))
{
KillTimer(1);
return;
}
screenDc=m_FrmWnd->GetDC();
screenDc->TextOut(0,0,"dfsakj");
m_FrmWnd->ReleaseDC(screenDc);
CFrameWnd::OnTimer(nIDEvent);
}
这样子虽然可以,但是你的程序太有问题了,不大顺总觉得
sdcer777 2003-12-06
  • 打赏
  • 举报
回复
我说错了,leozhou2002(闲云孤鹤) 这样写可以正常显示,只是在关闭这个窗口时(新建的这个),就会出现debug错误,然后又会出现内存错误。
sdcer777 2003-12-06
  • 打赏
  • 举报
回复
leozhou2002(闲云孤鹤) 这样写在debug模式下会出现debug错误,然后又会出现内存错误!!好像也不太对!
leozhou2002 2003-12-06
  • 打赏
  • 举报
回复
这样如何?

void CMainFrame::OnTimer(UINT nIDEvent)

{
CDC screenDc=m_FrmWnd->GetDC();//screenDc是CMainFrame中的一个成员(CDC*)
screenDc->TextOut(0,0,"i love you");
CFrameWnd::OnTimer(nIDEvent);
}
sdcer777 2003-12-06
  • 打赏
  • 举报
回复
上面的不太对我感觉!
screenDC是新窗口的DC,而不是主窗口的DC呀。
cmsbai 2003-12-06
  • 打赏
  • 举报
回复
void CMainFrame::OnTimer(UINT nIDEvent)

{
CDC screenDc=GetDC();
screenDc->TextOut(0,0,"i love you");
CFrameWnd::OnTimer(nIDEvent);
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧