Programming 版 (精华区)

发信人: Mice (做梦的鼠儿), 信区: Programming
标  题: VC++4.0 的 DLL问题
发信站: 紫丁香 (Sun Oct 12 11:36:42 1997)

    我用VC++4。0作了一个DLL,为MFC的EXTENDED DLL,其
        > 主要内容为两个基于CPropertyPage的工具。作好以后,自己
        > 作测试,无论是MDI还是SDI均无问题,但是一联入自己的一个实际
        > 课题中,就出毛病。÷而此课题除了巨大以外没有别的东西。
        >    谈的具体点:
        >    我的这个工具主要是应用于控制图形系统的层次。主要解决两个问题,
        > 一个是层次的命名,一个是每层的开关控制(是否显示此层〕。这样,我用
        > 一个CPropertyPage资源(采用CCtrlList)来控制层次命名,它没有问题。
        > 另外一个我放入了GRID。OCX控制,控制内采用了ICON显示,担一运行就
        > 出问题,毛病定位在DLGDATA。CPP的276行上,是VC的SOURCE CODE,毛病
        > 到底出在何处?判各位大侠指点一二!!!!!
        >   较急!多谢!!!!!!!!!!!
        >                    一个苦恼的程序员

        //下面是你出错的函数.
        void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)
                // must be first in a group of auto radio buttons
        {
                HWND hWndCtrl = pDX->PrepareCtrl(nIDC);

        ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);//This is 267th line

        //如果你是在这一行出错的话,那么应该一直出错。为什么和你的课题连接后才出错?
        //我想不明白。只好解释一下,在什么情况下会导致该错误:
        //程序的意思是,你的资源ID号为nIDC的控制不具有WS_GROUP的属性。
        //可能你没有在你的第一个(!,指ID号最小 )Radio Button设上GROUP属性。

        //然后在一组Radio Button结束的下一个控制设上GROUP属性来终止GROUP.
        //另外,从下面的程序可以看出,最好把一组Radio Button按从小到大顺序排列,
        //在最初设计对话框时,就把一组Radio Button一口气安排好,不要再来增加,
        //不然可能会把Radio Button加到另外的GROUP去。
        //当然,如果对Windows熟悉,也可对resource.h手工改动,以保证ID的连续性。
        ASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON);

                if (pDX->m_bSaveAndValidate)
                        value = -1;     // value if none found

                // walk all children in group
                //直到下一个具有WS_GROUP属性的控制。
                int iButton = 0;
                do
                {
              if (::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
                        {
                                // control in group is a radio button
                                if (pDX->m_bSaveAndValidate)
                                {
                           if (::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
                                        {
                               ASSERT(value == -1);    // only set once
                                                value = iButton;
                                        }
                                }
                                else
                                {
                                        // select button
             ::SendMessage(hWndCtrl, BM_SETCHECK, (iButton == value), 0L);
                                }
                                iButton++;
                        }
                        else
                        {
                      TRACE0("Warning: skipping non-radio button in group.\n");
                        }
                        hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);

                } while (hWndCtrl != NULL &&
                        !(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
        }

        //如果你改了以后还出问题,那多半是你的课题程序有问题

--
我是一只好老鼠!
          />>>
         (*>
()%\%\%\%|*|33333333333333333333333333333333333>
         (*>
          \>>>

※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: 202.118.226.75]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.982毫秒