爱国者游戏 电影 百度:VC学习日记:对话框控件访问的七种方式

来源:百度文库 编辑:偶看新闻 时间:2024/05/05 01:08:14

学习了孙鑫老师的视频,感悟很深,总结了一下对话框控件访问的七种方式

1. 点击静态文本改变其内容
当静态文本框需要响应消息时,许将其ID号改为不同值。首先要获取现在的静态文本框控件的文本内容:GetWindowText,其过程中,GetDlgItem:用来获取一个

指定控件的指针,返回一个CWnd指针;(注意:静态文本框属性里将Notify选中,否则无法接收消息响应)
void CTestDlg::OnNumber1()
{
    CString str;
    if(GetDlgItem(IDC_NUMBER1)->GetWindowText(srt),str=="Number1:")  //整个逗号表达式前半部分的值,是后半部分的值,后半部分是个判断语句。

如果srt=1返回真
    {
        GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:");
    }
    else
    {
        GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");
    }
}
————————————————————————————————————————————
2. GetDlgItem()->Get(Set)WindowText()
将两编辑框(1,2)中输入的数字相加,在另一编辑框中显示
首先要先获取编辑框1和2的内容,然后将字符内容转换为整型(atoi),相加后再itoa回字符串,显示
{
    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    GetDlgItemText(IDC_EDIT1,ch1,10);
    GetDlgItemText(IDC_EDIT2,ch2,10);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10); //最后一个参数10是10进制,不是num3的长度

    SetDlgItemText(IDC_EDIT3,ch3);
}
————————————————————————————————————————————
3. GetDlgItemInt()/SetDlgItemInt()(可用于有/无符号数的加减)
{
    int num1,num2,num3;
    num1=GetDlgItemInt(IDC_EDIT1);
    num2=GetDlgItemInt(IDC_EDIT2);

    num3=num1+num2;
    SetDlgItemInt(IDC_EDIT3,num3);
}
————————————————————————————————————————————
4. 将控件和整型变量相关联
这种方法是最简单的方法:
将三个编辑框关联三个成员变量(Member Variables),用ClassWizard,Add Variable,n_num1,变量类型选为int(此时可设定变量范围)
然后在OnBtnAdd()中
{
    UpdateData();  //模态对话框,要调用UpdateData
    m_num3=m_num1+m_num2;
    UpdateData(FALSE);
}
————————————————————————————————————————————
5. 将控件和控件变量相关联
控件关联控件,在ClassWizard中,增加成员变量,Category选择控件(Control)
{
    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    m_edit1.GetWindowText(ch1,10);  //控件调用控件
    m_edit2.GetWindowText(ch2,10);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    m_edit3.SetWindowText(ch3);
}
————————————————————————————————————————————
6. SendMessage()
采用发送消息,在MFC编程中几乎不用,在SDK编程中经常用到
{
    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    //::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
    //::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);  //关联了m_edit1,直接用
    //GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
    m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1);  //直接利用控件变量来调用SendMessage
    m_edit2.SendMessage(WM_GETTEXT,10,(LPARAM)ch2);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);
}
————————————————————————————————————————————
7. SendDlgItemMessage()
{
    int num1,num2,num3;
    char ch1[10],ch2[10],ch3[10];

    SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
    SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);

    num1=atoi(ch1);
    num2=atoi(ch2);
    num3=num1+num2;
    itoa(num3,ch3,10);

    SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);
    SendDlgItemMessage(IDC_EDIT3,EM_SETSEL,0,-1);  //通过获取复选的开始和结束位置
    m_edit3.SetFocus();
}
此时,计算结果会被自动复选上