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()来判断状态。同样可通过利用成员变量记录状态来解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Absoler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值