MFC(五)——对话框编程

来源:互联网 发布:淘宝美工与运营 编辑:程序博客网 时间:2024/06/01 07:39

模态与非模态对话框的创建

  • 模态
    CTestNew dlg1;    dlg1.DoModal();
  • 非模态
    CTestNew *pDlg1 = new CTestNew();    pDlg1->Create(IDD_DIALOG1,this);    pDlg1->ShowWindow(SW_SHOW);

对话框数据获取和显示(计算器为例)

  • 方法一
    GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);    GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);    num1 = atoi(ch1);    num2 = atoi(ch2);    num3 = num1 + num2;    itoa(num3,ch3,10);    GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
  • 方法二
    GetDlgItemText(IDC_EDIT1,ch1,10);    GetDlgItemText(IDC_EDIT2,ch2,10);    num1 = atoi(ch1);    num2 = atoi(ch2);    num3 = num1 + num2;    itoa(num3,ch3,10);    SetDlgItemText(IDC_EDIT3,ch3);
  • 方法三
    num1 = GetDlgItemInt(IDC_EDIT1);    num2 = GetDlgItemInt(IDC_EDIT2);    num3 = num1 + num2;    SetDlgItemInt(IDC_EDIT3);
  • 方法四
    UpdateData();    m_num3 = m_num1 + m_num2;    UpdateDate(FALSE);
  • 方法五
    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,10);
  • 方法六
    ::SendMessage(GetDlgItem(IDC_EDIT1)->m_hwnd,WM_GETTEXT,10,(LPARAM)ch1);

窗口的扩展和收缩

  • Z-order
    窗口的z次序表明了重叠窗口堆中窗口的位置,这个窗口堆是按一个假象的轴定位的,这个轴就是从屏幕向外伸展的Z轴。Z次序最上面的窗口覆盖所有其它的窗口,Z次序最底层的窗口被所有其它的窗口覆盖。应用程序设置窗口在Z次序中的位置是通过把它放在一个给定窗口的后面,或是放在窗口堆的顶部或底部。
    Windows系统管理三个独立的Z次序——一个用于顶层窗口、一个用于兄弟窗口,还有一个是用于最顶层窗口。最顶层窗口覆盖所有其它非最顶层窗口,而不管它是不是活动窗口或是前台窗口。应用程序通过设置WS_WX_TOPMOST风格创建最顶层窗口。
  • 兄弟窗口
    共享同一个父窗口的多个子窗口叫兄弟窗口。
  • 前台窗口和后台窗口
    在Windows系统中,每一个进程可运行多个线程,每个线程都能创建窗口。
    创建正在使用窗口的线程称为前台线程,这个窗口就称之为前台窗口。所有其它的线程都是后台线程,由后台线程所创建的窗口叫后台窗口。

代码实现

    static CRect rectLarge;    static CRect rectSmall;    if(rectLarge.IsRectNull())    {        CRect rectSeparator;        GetWindowRect(&rectLarge);        GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);        rectSmall.left = rectLarge.left;        rectSmall.top = rectLarge.top;        rectSmall.right = rectLarge.right;        rectSmall.bottom = rectSparator.bottom;    }    if("收缩<<" == str)    {        SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Weight(),            SWP_NOMOVE|SWP_NOZORDER);    }    else    {        SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Weight(),            SWP_NOMOVE|SWP_NOZORDER);    }   
  • 实现按回车焦点转移
    WNDPROC prewProc;    LRESULT CALLBACK FlamingProc( //WndProc名称可自由定义        HWND hwnd,        UINT uMsg,        WPARAM wParam,        LPARAM lParam    )    {        if(uMsg == WM_CHAR && wPARAM = 0x0d)        {            //::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));            //SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));            //SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));            return 1;        }        else        {            return prewProc(hwnd,uMsg,wParam,mParam);        }    }    BOOL CTestDlg::OnInitDialog()    {        preProc = (WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)            ->m_hWnd,GWL_WNDPROC,(LONG)FlamingProc);    }
0 0
原创粉丝点击