• Win32 控件篇(1)


    6.1 如何通过控件ID获得控件窗口指针

    使用GetDlgItem方法根据控件的ID来查询窗体指针

    void CDemoDlg::OnTest() 
    {
        //获得控件窗口指针
        CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);
    
        CString strText = _T("");
        strText.Format("pEdit=0x%X\n&m_ctrlEdit=0x%X\n", pEdit, &m_ctrlEdit);
        AfxMessageBox(strText);
    }
    

    6.2 如何通过控件窗口指针获得控件ID

    根据控件本身的GetDlgCtrlID方法查询控件ID

    void CDemoDlg::OnTest() 
    {
        //获得控件ID
        int nID = m_ctrlEdit.GetDlgCtrlID();
    
        CString strText = _T("");
        strText.Format("nID=%d\nIDC_EDIT=%d", nID, IDC_EDIT);
        AfxMessageBox(strText);
    }
    

    6.3 如何获得指定点的控件指针

    使用ChildWindowFromPoint方法

    void CDemoDlg::OnTest() 
    {
        CRect rect;
        GetClientRect(&rect);
    
        //获得中指定点控件窗口指针
        CWnd* pWnd = ChildWindowFromPoint(CPoint(rect.Width() / 2, 15), CWP_ALL);
    
        //获得Edit控件窗口指针
        CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT);
    
        if (pWnd != NULL)
        {
             CString strText = _T("");
            strText.Format("pWnd=0x%X\npEdit=0x%X\n", pWnd, pEdit);
            AfxMessageBox(strText);
        }
    }
    

    结果都是获取到TextBox的指针

    image

    6.4 如何遍历控件

    1. 使用GetTopWindow方法获取第一个控件
    2. 使用GetNextWindow方法获取下一个控件(也可以是上一个,默认是下一个)
    //获得第一个子窗口
    CWnd* pChildWnd = GetTopWindow();
    while (pChildWnd != NULL)
    {
        //获得控件ID
        int nID = pChildWnd->GetDlgCtrlID();
        CString strText = _T("");
        strText.Format(_T("%d"), nID);
        pChildWnd->SetWindowText(strText);
    
        //获得下一个子窗口
        pChildWnd = pChildWnd->GetNextWindow();
    }
    

    效果:显示每个控件的ID

    image

    6.5 如何根据父窗口的大小改变控件的大小和位置

    Windows窗体并没有自动缩放的功能,所以开发起来并不是这么简单

    void CDemoDlg::OnSize(UINT nType, int cx, int cy) 
    {
        CDialog::OnSize(nType, cx, cy);
    
        //根据父窗口的大小移动窗口
        CWnd* pWnd = GetDlgItem(IDC_LIST);
        if (pWnd != NULL)
        {
            pWnd->MoveWindow(10, 10, cx - 20, cy - 20);
        }
    }
    

    效果如下:
    未根据父窗体改变控件大小

    image

    使用上面代码根据父窗体改变控件大小

    image

  • 相关阅读:
    数据结构的基本概念
    react 组件生命周期
    设计模式
    MySQL processlist/kill
    大数据新手之路四:联合使用Flume和Kafka
    大数据新手之路三:安装Kafka
    大数据新手之路二:安装Flume
    大数据新手之路一:安装JDK
    tmux常用快捷键
    (转)Linux下设置和查看环境变量
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1989752.html
Copyright © 2020-2023  润新知