m_picCtrl.MoveWindow(m_picCtrl.GetRect() + ptOffset);class "CStatic" 没有成员 "GetRect"
时间: 2023-07-13 11:25:41 浏览: 61
是的,你所提到的问题是正确的,因为 CStatic 类确实没有 GetRect 成员函数。GetRect 函数在 MFC 中是 CWnd 类的成员函数。如果您想获取 CStatic 控件的矩形,则需要使用 CWnd::GetClientRect 或 CWnd::GetWindowRect 成员函数。例如,您可以使用以下代码来获取 m_picCtrl 控件的矩形:
```
CRect rect;
m_picCtrl.GetClientRect(&rect);
m_picCtrl.MoveWindow(rect.left + ptOffset.x, rect.top + ptOffset.y, rect.Width(), rect.Height());
```
或者,如果您想要获取窗口相对于屏幕的矩形,则可以使用以下代码:
```
CRect rect;
m_picCtrl.GetWindowRect(&rect);
ScreenToClient(&rect);
m_picCtrl.MoveWindow(rect.left + ptOffset.x, rect.top + ptOffset.y, rect.Width(), rect.Height());
```
这些代码使用了 CWnd::GetClientRect,CWnd::GetWindowRect 和 CWnd::MoveWindow 成员函数来获取和移动 CStatic 控件的位置和大小。
相关问题
CProgressCtrl m_bar; m_bar.SetStep(-1); m_bar.SetPos(TIME); m_bar.SetRange(0, TIME);这段代码执行时出现断点错误
这段代码中的错误可能是由于以下原因之一:
1. 没有创建 CProgressCtrl 对象:在使用 CProgressCtrl 对象之前,需要使用 Create 方法创建对象。例如:m_bar.Create(WS_CHILD | WS_VISIBLE, CRect(10, 10, 200, 30), pParentWnd, IDC_PROGRESS);
2. 没有设置控件风格:在创建 CProgressCtrl 对象之后,需要设置控件的风格。例如:m_bar.SetRange(0, TIME); m_bar.SetStep(-1); m_bar.ModifyStyle(0, PBS_SMOOTH);
3. 没有设置控件位置和大小:在创建 CProgressCtrl 对象之后,需要设置控件的位置和大小。例如:m_bar.MoveWindow(10, 10, 200, 30);
4. TIME 的值不合法:将 TIME 的值设置为一个合法的整数值。例如:int TIME = 100;
请检查以上几个原因,确定代码中的错误。
CWnd *pWnd; pWnd = GetDlgItem(nID); if(pWnd != NULL) { CRect rec; pWnd->GetWindowRect(&rec); ScreenToClient(&rec); rec.left = rec.left*x/m_rect.Width(); rec.top = rec.top*y/m_rect.Height(); rec.bottom = rec.bottom*y/m_rect.Height(); rec.right = rec.right*x/m_rect.Width(); pWnd->MoveWindow(rec); }
这段代码是在使用 MFC 框架的 C++ 语言中使用的,它的作用是将指定窗口的位置和大小进行缩放和移动。其中 `ScreenToClient` 函数是将屏幕坐标系转换为客户区坐标系,`GetWindowRect` 函数获取窗口的矩形区域,`MoveWindow` 函数将窗口移动到指定位置并设置指定的大小。