CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

一个mfc的小问题,多谢

楼主lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)2002-01-29 16:31:36 在 VC/MFC / 基础类 提问

在app中子程如下  
  void   CSaverIIIApp:howScreenSaver()  
  {  
        CSaverWnd*   pWnd;  
        int   i;  
   
        if   (m_pwnd   ==   NULL){  
              return;  
        }  
   
        //EnumDisplayMonitors(NULL,   NULL,   MonitorEnumProc,   0);  
        for   (i   =   0;   i   <   m_wndcnt;   i   ++)   {  
              pWnd   =   (CSaverWnd*)m_pwnd[i];  
              pWnd->Create(MyRect[i],   this);  
        }  
        m_pMainWnd   =   m_pwnd[0];  
  }  
  CSaverWnd是我添加的类,其中Create为:  
  BOOL   CSaverWnd::Create(CRect   rect,   CWinApp   *   pApp)    
   
  我想在Dlg中调用,可是this总为null  
  该如何改?感激不尽!!!!!!!!!!!!!!!!  
  问题点数:30、回复次数:13Top

1 楼lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)回复于 2002-01-29 16:44:10 得分 0

拜托各位了。。。。Top

2 楼missingland(夜雨)回复于 2002-01-29 17:37:25 得分 6

检查一下是否include了   APP类(因为程序在APP类中申明了全局对象)Top

3 楼lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)回复于 2002-01-29 18:10:44 得分 0

已经include的了  
  编译都通过了Top

4 楼lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)回复于 2002-01-29 18:12:43 得分 0

已经include了  
  且编译都通过了,就是运行到for后面就报错了。  
  Top

5 楼River_H(小河)回复于 2002-01-29 18:29:22 得分 6

代码有问题,   你取得的是一个窗口的指针,然后将该指针强制转换为你要的装口指针,接着你又使用该指针调用创建函数,当然有问题了。因为该指针应该是已经创建过窗口的。你说呢??Top

6 楼zhakewei(天外有天)回复于 2002-01-29 18:31:44 得分 6

if   (m_pwnd   ==   NULL){  
              return;  
      }  
  else{  
      //EnumDisplayMonitors(NULL,   NULL,   MonitorEnumProc,   0);  
      for   (i   =   0;   i   <   m_wndcnt;   i   ++)   {  
              pWnd   =   (CSaverWnd*)m_pwnd[i];  
              pWnd->Create(MyRect[i],   AfxGetApp());  
      }  
      m_pMainWnd   =   m_pwnd[0];  
  }  
  Top

7 楼freetalk(老菜鸟)回复于 2002-01-29 19:01:14 得分 6

这段代码在app中,有可能你在dlg还没创建前就调用了,你把这段代码放到dlg的类代码中Top

8 楼cpunion( int argc, char** argv )回复于 2002-01-29 19:13:39 得分 6

你这里的this指向App对象,而App对象并不派生自CWnd,所以不行  
  void   CSaverIIIApp:howScreenSaver(CWnd*   pParent)  
  {  
      CSaverWnd*   pWnd;  
      int   i;  
   
      if   (m_pwnd   ==   NULL){  
              return;  
      }  
   
      //EnumDisplayMonitors(NULL,   NULL,   MonitorEnumProc,   0);  
      for   (i   =   0;   i   <   m_wndcnt;   i   ++)   {  
              pWnd   =   (CSaverWnd*)m_pwnd[i];  
              pWnd->Create(MyRect[i],   pParent);  
      }  
      m_pMainWnd   =   m_pwnd[0];  
  }  
   
  Top

9 楼cpunion( int argc, char** argv )回复于 2002-01-29 19:14:32 得分 0

然后在Dlg中调用时采用AfxGetApp()->howScreenSaver(this);就可以了Top

10 楼cpunion( int argc, char** argv )回复于 2002-01-29 19:19:03 得分 0

SORRY没看清你的问题  
  但怎么会出现这种总是呢?Top

11 楼lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)回复于 2002-01-29 19:34:37 得分 0

先谢谢各位  
  this是app的指针,我在dlg里调用的是app中的函数,this就改变了吗?  
   
  Top

12 楼lzj_freedom(我的儿子:http://blog.sina.com.cn/leo0919#album)回复于 2002-01-30 11:58:47 得分 0

谢谢大家,我已经解决了。  
  放分。Top

13 楼kissfire(kissfire)回复于 2002-01-30 22:00:50 得分 0

signTop

相关问题

  • vc MFC中有FTP类吗,怎么用,最后给个例子?多谢多谢多多谢
  • 求《深入浅出MFC》的配书光盘代码,多谢!
  • 请问!在.NET里面怎么添加Windows消息啊?好象跟MFC有点不同??那位朋友能帮帮手!!小弟多谢啦!!
  • 请问!在.NET里面怎么添加Windows消息啊?好象跟MFC有点不同??那位朋友能帮帮手!!小弟多谢啦!!
  • 多谢版主帮助。小小敬意。
  • 请教小小问题,多谢!
  • 关于adoquery的小问题,急,多谢
  • 请问那位有Quicktime5.02的序列号给小弟一个,多谢多谢
  • 图像拖动放大缩小的问题!急,在线等!多谢多谢
  • 俺刚学VC,请问哪儿有《mfc深入浅出》的下载?多谢了!

关键词

  • 指针
  • 代码
  • null
  • csaverwnd
  • pwnd
  • 调用
  • enumdisplaymonitors
  • howscreensaver
  • monitorenumproc
  • myrect

得分解答快速导航

  • 帖主:lzj_freedom
  • missingland
  • River_H
  • zhakewei
  • freetalk
  • cpunion

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo