| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1556 人关注过本帖
标题:VC打不开模式对话框
只看楼主 加入收藏
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:12 
VC打不开模式对话框
为了实现对程序的配置,我应用几个对话框来对参数进行设置。
应用环境:对话框程序,菜单中打开参数设置对话框
问题现象:最近修改一了些代码,再增加了一个对话框,菜单调用时打开不了对话框(即对话框弹不出来,但是没有错误提示)。调试时查看函数栈时发现程序一直在执行RunModalLoop。另外,在前面一个版本中,参数设置对话框是能打开,最近增加了一些界面方面的代码,还增加了一个参数设置对话框。

请问这是什么问题?该怎么解决?
网上看到一篇文章,说可能是因为没有对资源句柄进行切换造成的。他说一般就是DLL程序有这个问题,还提供了DLL程序的解决方案。哪位再进一步解释一下?
搜索更多相关主题的帖子: 对话框 模式 
2009-09-02 09:02
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:2 
贴代码
2009-09-02 11:00
cnhzjwq
Rank: 1
等 级:新手上路
帖 子:2
专家分:3
注 册:2009-9-2
收藏
得分:3 
你把代码贴出来,看看再说啊
2009-09-02 11:08
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
与主对话框关联的菜单的响应函数:
void CInvalidSnapDlg::OnMenuitemcmp()
{
    // TODO: Add your command handler code here
    CDlgCompress dlgRate;

    dlgRate.SetRate(((CLaneSys*)this->GetDlgItem(ID_INIT + 1))->nCompressRate);

    int nResponse = dlgRate.DoModal();
    if (nResponse == IDOK)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with OK
        ((CLaneSys*)this->GetDlgItem(ID_INIT + 1))->nCompressRate = dlgRate.m_nRate;
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: Place code here to handle when the dialog is
        //  dismissed with Cancel
    }
}
子对话框的公有成员:
// CDlgCompress message handlers
void CDlgCompress::SetRate(int nRate)
{
    m_nRate = nRate;
}

实践、学习、再实践、再学习......
2009-09-02 14:02
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:15 
上面代码没问题啊,执行到RunModalLoop肯定对话框打开了,在消息循环了,整个程序看看,是不是位置搞得看不见了。
2009-09-02 15:26
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
恩,xufen340分析得很对.
我刚才做了一下测试,在另外的工程中对话框打开时就执行到RunModalLoop.因此可以说明对话框是打开了的,只是显示不出来.于是我想到我之前为了让窗口保持显示打开的图片增加了一个窗口刷新函数,OnPaint函数.我把这个函数去掉后,对话框就显示出来了.
但是新的问题又来了,如何让窗口保持显示打开的图片?切换界面后不刷新掉?
我在窗口控件的OnPaint事件里的代码为
    if (sLastPicture != "")
    {
        CDC* pDC = this->GetDC();

        CRect rc;
        GetClientRect(&rc);

        CDC MemDC;                                  //内存DC,为解决叠加后的闪烁问题
        MemDC.CreateCompatibleDC(pDC);              //使内存DC与PDC兼容DC

        CBitmap bm;
        bm.CreateCompatibleBitmap(pDC,Width * 2,Height);     //创建兼容位图
        MemDC.SelectObject(&bm);

        //将图像复制到内存DC
        SetStretchBltMode(MemDC.GetSafeHdc(),COLORONCOLOR);
        StretchDIBits(MemDC.GetSafeHdc(),
            0,                        
            0,
            Width * 2,                    //显示窗口宽度
            Height,                    //显示窗口高度
            0,
            0,
            Width * 2,                    //图像宽度
            Height,                    //图像高度
            m_pSaveBuffer,            //图像缓冲区
            m_pBmpInfo,                //BMP图像描述信息
            DIB_RGB_COLORS,
            SRCCOPY
            );

        pDC->SetStretchBltMode(COLORONCOLOR);
        pDC->StretchBlt(0,0,rc.Width(),rc.Height(),&MemDC,0,0,Width * 2,Height,SRCCOPY);
        TRACE("NUM\n");

        MemDC.DeleteDC();
        this->ReleaseDC(pDC);
    }
   

实践、学习、再实践、再学习......
2009-09-02 15:46
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
解决问题了!!!先谢过各位了!
上个贴解释了标题问题产生的原因.又提出了一个刷新窗口导致对话框显示不出的问题.后面发现罪魁祸首就是CDC,我在OnPaint里应用了CDC,导致打开对话框时主线程处在刷新窗口,无暇顾及其他.后面还是应用CPaintDC,就OK了.CPaintDC封闭了BeginPaint和EndPaint实现了刷新窗口的异步处理.

实践、学习、再实践、再学习......
2009-09-02 16:10
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
试着顶到热门贴上去.

实践、学习、再实践、再学习......
2009-09-02 16:27
swc
Rank: 3Rank: 3
等 级:论坛游民
威 望:6
帖 子:394
专家分:83
注 册:2006-4-7
收藏
得分:0 
不错不错
很有满足感!
感觉还是编程论坛好.
在CSDN的提问一下子就沉下去了.而且也没有什么热心人.

实践、学习、再实践、再学习......
2009-09-02 16:29
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:0 
PAINTSTRUCT ps;
   CDC* pDC = BeginPaint(&ps);

   .............................
   EndPaint(&ps);
2009-09-02 19:18
快速回复:VC打不开模式对话框
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.086472 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved