MFC学习笔记

记录一些零碎知识

文本框需将Mutiline设置为true之后方可进行换行,滑块出现true选项;可通过在准备传入SetWindowTextw()的CString中加入\r\n实现换行

更改对话框ID后,要去头文件中更改 关联ID,这里IDE不会自动修改,需要手动完成,否则可能导致对话框无法添加变量。

               

 

借书对话框中需要获取来自文档类的成员变量中的数据,由于采用(if(win.DoModal()==IDOK))写法,故很难给对话框控件预设数据(触发确认按钮时才进入后面的程序),大概思路分两种,其一在对话框中利用文档类指针(可通过重载构造函数传入),其二考虑单独将所需数据通过构造函数传入,经历自己写的CString对象数组使用失败后,通过查资料得知CStringArray的存在,将其视为突破口,打算将可借图书存在这个数组类中。

出现问题:

访问冲突,将pos++改为book.GetNext(pos)解决;对于POSITION类型的变量pos,想当然认为pos++和list.GetNext(pos);效果相同,结果发现使用前者时pos会变成类似野指针的东西(在指向末尾时++)而通过GetNext()函数得到的pos会变成NULL便于判断CList结束。

error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明),由于微软将Object类的运算符设置为私有,CStringArray不支持赋值等运算,故不可传值调用,对此要么重载赋值号和拷贝构造函数,要么直接传地址进去,已采用后者。

 

附:DoModal函数调用流程

CMyDialog::DoModal()
    CMyDialog::OnInitDialog()
        CDialog::OnInitDialog()
            CWnd::UpdateData(false)
                CMyDialog::DoDataExchange;

     

发现保存文件为空:文档类中没有写序列化函数

打开时报错“意外的文件格式”:序列化函数输入和输出不匹配

 

下拉框获取序号时,ASSERT中止:

       _AFXWIN_INLINE int CComboBox::GetCurSel() const
       { ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, CB_GETCURSEL, 0, 0); }

似乎在DoModal()==IDOK之后,该控件已销毁,只有变量能保存下来,故须提前将信息储存在变量中,采用OnCbnSelchangeCombo1()函数,在选择一项时就把它对应的字符串存入一个预设的CString中

同样RadioButto也会面临这个问题,如果你选择了使用GetCheck()来判断状态。同样可通过利用成员变量记录状态来解决问题。

全部评论

相关推荐

尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务