Win32 控件篇(1)
2011-03-20 22:03 Clingingboy 阅读(4360) 评论(0) 编辑 收藏 举报
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的指针
6.4 如何遍历控件
- 使用GetTopWindow方法获取第一个控件
- 使用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
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);
}
}
效果如下:
未根据父窗体改变控件大小
使用上面代码根据父窗体改变控件大小
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现