none
【4】书本上的例子,编译的时候出现问题,求指教 RRS feed

  • 问题

  • 通过树形控件显示数据。

    (1)创建一个基于对话框的MFC应用程序tree

    (2)打开资源视图,双击IDD_TREE_DIALOG打开对话框,添加静态文本框和树形控件,它们的ID分别为IDC_STATIC和IDC_TREE1,将树形控件的Has Button的FALSE改为TRUE

    (3)加入位图资源IDB_BITMAP1和IDB_BITMAP2,分别填充为红色和绿色

    (4)在主对话框类中添加成员变量:

    CImageList m_imageList;      //定义图像列表控件
    CTreeCtrl m_ctlTree;

    在初始化成员函数中添加如下代码:

    BOOL CtreeDlg::OnInitDialog()
    {
    //【此处省略了】其他初始化代码
    m_imageList.Create(16,16,ILC_COLOR,2,2);          //创建图像列表
    CBitmap bm;
    bm.LoadBitmapW(IDB_BITMAP1);                     //载入Bitmap资源
    m_imageList.Add(&bm,RGB(0,0,0));                 //添加到图像列表
    bm.DeleteObject();
    bm.LoadBitmapW(IDB_BITMAP2);
    m_imageList.Add(&bm,RGB(0,0,0));
    //为树形控件添加图像列表
    m_ctlTree.SetImageList(&m_imageList,TVSIL_NORMAL);
    //添加一级结点
    HTREEITEM hroot=m_ctlTree.InsertItem(_T("某某大学"),1,0,TVI_ROOT);
    //添加二级结点
    HTREEITEM h1=m_ctlTree.InsertItem(_T("计算机系"),1,0,hroot);
    HTREEITEM h2=m_ctlTree.InsertItem(_T("艺术系"),1,0,hroot);
    HTREEITEM h3=m_ctlTree.InsertItem(_T("经济管理学院"),1,0,hroot);
    //添加三级结点
    HTREEITEM h11=m_ctlTree.InsertItem(_T("计算机科学与技术"),1,0,h1);
    HTREEITEM h12=m_ctlTree.InsertItem(_T("信息管理与信息系统"),1,0,h1);
    HTREEITEM h21=m_ctlTree.InsertItem(_T("服装设计"),1,0,h2);
    HTREEITEM h22=m_ctlTree.InsertItem(_T("雪雕艺术"),1,0,h2);
    m_ctlTree.SetBkColor(RGB(200,200,255));       //设置树形控件的背景色
    m_ctlTree.SetTextColor(RGB(127,0,0));         //设置文本颜色
    m_ctlTree.Select(h11,TVGN_CARET);                //子项h11为选定项


    //【此处省略了】其他初始化代码
    }

    调试运行之后,系统弹出了一个大概意思是哪里出错了的一个对话框,程序无法正常编译。

    2015年9月27日 9:00

全部回复

  • 你好,
        根据你的描述,我想你可以看一下void Ctree1Dlg::DoDataExchange(CDataExchange* pDX)中是否有DDX_Control(pDX, IDC_TREE, m_ctlTree);这一句?如果没有的话,你要在Class Wizard中绑定变量m_ctlTree。
        如果不是上述的原因的话,因为有很多不同的原因会导致程序不能运行,能将你debug之后的输出或者弹出的出错对话框的内容贴给我吗?

    2015年9月28日 10:03
  • 
    2015年10月23日 8:17
  • “tree.exe”: 已加载“D:\My Documents\Visual Studio 2005\Projects\tree\debug\tree.exe”,已加载符号。
    “tree.exe”: 已加载“C:\Windows\System32\ntdll.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\kernel32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\KernelBase.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc80.debugmfc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_e9870308fd3b9210\mfc80ud.dll”,已加载符号。
    “tree.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.6195_none_e4a70117006762dd\msvcr80d.dll”,已加载符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\msvcrt.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\gdi32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\user32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\advapi32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\sechost.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\rpcrt4.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\sspicli.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\cryptbase.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\lpk.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\usp10.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\shlwapi.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.18837_none_41e855142bd5705d\comctl32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\oleaut32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\ole32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\imm32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\msctf.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.6195_none_03ce2c72205943d3\mfc80CHS.dll”,未使用调试信息生成二进制文件。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\uxtheme.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Program Files (x86)\ksafe\ksfmon.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\ws2_32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\nsi.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Program Files (x86)\kingsoft\kingsoft antivirus\kwsui.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\psapi.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\version.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\shell32.dll”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\wtsapi32.dll”,未加载任何符号。
    线程 'Win32 线程' (0x2410) 已退出,返回值为 0 (0x0)。
    “tree.exe”: 已加载“C:\ProgramData\Tencent\TSVulFw\TSVulFW.DAT”,未加载任何符号。
    “tree.exe”: 已加载“C:\Windows\SysWOW64\dwmapi.dll”,未加载任何符号。
    Error: no data exchange control with ID 0x0066.
    Detected memory leaks!
    Dumping objects ->
    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\strcore.cpp(141) : {129} normal block at 0x008AB9F8, 22 bytes long.
     Data: < 9 W            > AC 39 C5 57 02 00 00 00 02 00 00 00 01 00 00 00 
    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(195) : {128} normal block at 0x008AB9A8, 16 bytes long.
     Data: <                > FF FF FF FF 00 00 00 00 E8 03 00 00 00 00 00 00 
    f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\occmgr.cpp(181) : {127} normal block at 0x008AB960, 12 bytes long.
     Data: <            > FF FF FF FF 00 00 00 00 00 00 00 00 
    Object dump complete.
    程序“[11180] tree.exe: 本机”已退出,返回值为 3 (0x3)。
    2015年10月23日 8:18
  • hi,

       那void Ctree1Dlg::DoDataExchange(CDataExchange* pDX)中确定是没有DDX_Control(pDX, IDC_TREE, m_ctlTree);这一句吗?

    2015年10月23日 8:21
  • 是的,本来是没有。然后你说了之后,我自己加上去了,但是有点改动,如下:

    DDX_Control(pDX, IDD_TREE_DIALOG, m_ctlTree);

    这里是因为并没有IDC_TREE这个东西,所以我换成另一个已有的对话框。

    结果还是如上面的截图所示。

    2015年10月24日 1:22
  • chchlll在吗?
    2015年11月12日 2:30