首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于去掉CAboutDlg 的疑问 [已结贴,结贴人:Fireway2008]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Fireway2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-20 11:36:00 楼主
    各位,小弟最近利用创建了一个基于对话框的程序,因为不需要创建时候生成的CAboutDlg,所以进行了手动删除,最后编译通过,可是调试结果出错!
      在主App处,
    BOOL CMyApp::InitInstance()
    {
    AfxEnableControlContainer();
    #ifdef _AFXDLL
    Enable3dControls(); // Call this when using MFC in a shared DLL
    #else
    Enable3dControlsStatic(); // Call this when linking to MFC statically
    #endif

    CMPlayerDlg dlg;// dlg =0x00000000 内存分配失败
    int n = sizeof(dlg);
    m_pMainWnd = &dlg;
            ……
    }
      winocc.cpp 279行出错,在删除的时候,我对以下几个部分进行了修改:

    1.在我的对话框程序CMyDlg里边,把和CAboutDlg相关的类定义和函数统统删掉,并且删掉CMyDlg 的OnSysComm 函数 ;

    2.在资源CMyDlg.rc里边删除IDD_ABOUT,并打开classWizard 进行完全删除 ;

    3.Resource.h里边 ,以下红色2行注释掉
    //{{NO_DEPENDENCIES}}
    // Microsoft Developer Studio generated include file.
    // Used by My.rc
    //
    //#define IDM_ABOUTBOX                    0x0010
    //#define IDS_ABOUTBOX                    101
    ……
    之后打开CMyDlg.rc,提示载入资源失败,按EditCode进入CMyDlg.rc*(注意这里有个* ,和CMyDlg.rc 直接察看资源控件不一样!)编码,把出错提示的代码注释掉,之后顺利打开CMyDlg.rc,但是现在无法再次进入CMyDlg.rc*

    4.主对话框的初始化里边,红色部分被删去
    BOOL CMyDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();

    // Add "About..." menu item to system menu.

    // IDM_ABOUTBOX must be in the system command range.
    /* ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    / ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
    CString strAboutMenu;
    strAboutMenu.LoadString(IDS_ABOUTBOX);
    if (!strAboutMenu.IsEmpty())
    {
    pSysMenu->AppendMenu(MF_SEPARATOR);
    pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    }
    }
    */
    // Set the icon for this dialog.  The framework does this automatically
    //  when the application's main window is not a dialog
    SetIcon(m_hIcon, TRUE); // Set big icon
    SetIcon(m_hIcon, FALSE); // Set small icon
    ……
    }
    除以上部分和编译时按提示错误进行修改,其余均为原始代码 。

    不知哪里出现错误,还请各位高手进行指点!
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      2

      13

    发表于:2008-08-20 11:46:171楼 得分:20
    可能是rc文件出问题了,最好不要手动修改rc文件,直接在资源视图中删除对话框资源即可。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Fireway2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 11:52:442楼 得分:0
      糟糕,那我如何可以进入那个CMyDlg.rc*
    还请指点!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      2

      13

    发表于:2008-08-20 12:12:053楼 得分:5
    rc文件可以直接用文本编辑器编辑。你是想恢复rc文件原本的内容吗?这个可能不容易,还是重新创建一个项目比较简单。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Cricketol
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 12:32:344楼 得分:5
    用记事本打开.rc就可以编辑了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Mackz
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      6

      7

    发表于:2008-08-20 13:02:235楼 得分:5
    后面有个*表示文件被修改过,保存之后应该就没有了。你把工程全部重新编译一下试试。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yxq123
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 14:33:106楼 得分:5
    楼主,你开始创建工程的时候,可以选择不需要about的!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Fireway2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:05:547楼 得分:0
    就是这个位置, 我还没删除,只是做了注释,现在取消注释
    // String Table
    //
    STRINGTABLE DISCARDABLE
    BEGIN
        IDS_ABOUTBOX            "&About MPlayer..."
    END

    #endif    // English (U.S.) resources

    结果还是不行,错误依然存在,难道真的没办法,只能新建工程了?
    5楼的做法我早就试过了,不行的
    6楼能否说明确点, 在建立对话框的哪个步骤可以去掉About?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • schlafenhamster
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:14:418楼 得分:5
    Appwizard 的 "Step 2 of 4 steps" 第一个就是要不要"about".
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Fireway2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:17:459楼 得分:0
    另外,我在弹出的错误警告选中了 “忽略”,
    又弹出另外一个警告 afxwin2.inl 98 行出错!
    我再次 “忽略”,程序居然可以运行了,这种情况作何解释呢?


    BOOL CMyApp::InitInstance()
    {
    AfxEnableControlContainer();

    #ifdef _AFXDLL
    Enable3dControls(); // Call this when using MFC in a shared DLL
    #else
    Enable3dControlsStatic(); // Call this when linking to MFC statically
    #endif

    CMPlayerDlg dlg;// dlg = 0xcccccccc
    m_pMainWnd = &dlg;//dlg = 0x00000000

                  …… //迷惑不解怎么突然变没了?
    }
    而且,在调试状态下的程序强制 中断Debug后不能正常关闭释放资源。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • maomaoxiong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:44:5310楼 得分:5
    这种错误修改没有什么头绪,重新创建一个工程吧
    在AppWizard中的第2部,不复选About Box就可以了,应该是step2中最上面的那一项
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lkjfeijfidosjf
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:03:3211楼 得分:0
    该回复于2008-08-21 12:22:50被版主删除
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 5

      2

      13

    发表于:2008-08-20 16:15:0612楼 得分:0
    问题出在rc文件只是一种可能,也可能出在其它地方,目前从你描述的情况还看不出问题。如果想查清楚问题可以跟踪构造函数、WM_CREATE消息和OnInitDialong来分析。
    CMPlayerDlg dlg;// dlg = 0xcccccccc
    m_pMainWnd = &dlg;//dlg = 0x00000000
    dlg是类对象,你在后面写的值是什么?其实这两行代码是不会有问题的(除非编译器有问题),可以不用管它。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Fireway2008
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:27:3513楼 得分:0
    以上调试跟踪的时候发现的, 原先创建 CMPlayerDlg dlg;的时候,显示dlg 分配得到的值是 0xcccccccc , 之后按F10运行至下一行m_pMainWnd = &dlg; 发现dlg的值突然变成了0x00000000 ,接下来 dlg.DoModal() 出错
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved