MFC——第二弹


1.在给确定按钮添加代码的时候遇到了问题。
CString str;
str = "姓名:" + m_Name + ", 学号:" + m_Sid + ", 成绩:" + this->m_Value;
this->m_ListCon.AddString(str);
原代码如上所示,在MFC中,CString是一种特有的字符串类型,支持如上图所示的连加赋值,但是上边的代码确实错误的,在“ ”中的赋值并不是CString的,没法直接连加赋值,需要叫上CString进行强制类型转换以后才能进行复制,修改代码如下:
CString str;
str = (CString) "姓名:" + m_Name + ", 学号:" + m_Sid + ", 成绩:" + this->m_Value;
this->m_ListCon.AddString(str);
2.在完成上边所示的内容按理说就可以在Edit Control控件中输入内容并且在List Box中显示了,但是最开始却给了我错误提示,说啥内存占用啥啥的。经过一番思考,发现了第一个问题:在添加控件的成员变量的时候,应该给他改成基于控件值传递。

改完以后,又发现了第二个问题,变量得不到Edit Control中的字符串,经过百度,查找到一种解决方案,在前面添加
UpdateDate(true);
便能够得到里边的字符串了。


3.在为列表框ListBox添加事件的时候,添加了如下代码:
m_Listid = this->m_ListCon.GetCurSel();
m_Listid是啥类型的?是int类型的,可以这么理解,没当你往 ListBox添加一条信息, m_Listid便加一,相当于给每一条信息添加了一个int型的Id,便于后边的删除等操作。

4. 为对话框”删除“按钮添加代码:
this->m_ListCon.DeleteString(this->m_Listid);   

5.

if (this->m_ListCon. GetCount () >= 0 && this->m_ListCon. GetSelCount () == 1)
    {
        CString strs;
        strs = (CString)"成绩:" + this->m_Value;
        MessageBox(strs);
    
    }
    else
        MessageBox((CString)"选有选中或者无内容", (CString)"警告", MB_ICONEXCLAMATION);


如果在 ListBox中没有信息,则 this->m_ListCon.GetCount()返回<0,如果选中在 ListBox的一条信息,则 this->m_ListCon.GetSelCount()返回1;

MMP,如果selection属性为Multiple,则判断是否为单选时 GetSelCount()==1,如果为single,则判断是否等于-1或者LB_ERR。


6.关闭窗体
MFC中关闭窗口的几种办法:
退出程序用AfxGetMainWnd()->SendMessage(WM_CLOSE);
关闭当前窗口用DestroyWindow( );
关闭模式对话框用EndDialog(0);

如果想要使窗体的右上角的×号失效,就不能调用系统自带的OK和Cancel去关闭窗体,可以自己新建一个用来关闭。
    
exit(0);
postquitmessage(0);
onok();
oncancel();
sendmessage(wm_close,0,0);
exitprocess(0);

其中以exit(0)最为迅速,在实践方面

因为窗体右上角的叉号和最开始自带的cancel键是共用一个OnClickCancel/OK(),所以如果想实现让右上角的失效,应该成功建立一个button,然后在里边添加相应的事件。

猜你喜欢

转载自blog.csdn.net/weixin_36933786/article/details/78225421