class COutputBar : public CBCGPDockingControlBar //停靠窗口创建 { public: COutputBar(); virtual ~COutputBar(); public: CBCGPTabWnd m_wndTabs; CListCtrl m_wndListRaster; CListCtrl m_wndListScaleInfo; CListCtrl m_wndListVector; public: void SetListRasterContent(IscRasterLayer *pRasterLayer); void SetListVectorContent(IscVectorLayer *pVectorLayer); void SetListScaleInfo(IscSegScale* pSegScale); protected: //{{AFX_MSG(COutputBar) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSize(UINT nType, int cx, int cy); afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // !OUTPUTBAR_H
时间: 2023-08-08 13:05:21 浏览: 150
这段代码是一个定义了输出窗口类COutputBar的头文件,它继承了CBCGPDockingControlBar类,表示可以停靠在主窗口中。该类包含了三个列表控件:m_wndListRaster,m_wndListScaleInfo和m_wndListVector,用于显示栅格图层、矢量图层和比例尺信息。同时,该类还包含了三个函数:SetListRasterContent、SetListVectorContent和SetListScaleInfo,用于设置列表控件内容。该类还重载了OnCreate、OnSize和OnPaint等消息处理函数。
相关问题
五一期间游客出行,有多种交通工具可以选择,其中,自行车行驶速度为0.2km/min;地铁行驶速度为0.5km/min,每行驶2km经过一个地铁站,并在站台停靠2min。 (1)请构造一个Vehicle基类(10分),要求包含: 数据成员: double speed;//交通工具的速度和km/min double distance;//目的地的距离 km; 成员函数: 自行设计构造函数完成初始化; double TimeSpend();//用来计算到达目的地所用时间 (2)由Vehicle类派生出Bicycle和Subway两个类,要求包含: 成员函数: Bicycle和Subway两个派生类设计构造函数完成初始化; Bicycle和Subway两个派生类用TimeSpend函数计算不同的交通工具到达目的地所用时间,并输出计算结果(一个类20分)。 (3)算例: 自行车:0.2km/min,目的地距离10km,到达目的地用时50min。 地铁:0.5km/min,目的地距离10km,到达目的地用时28min。
下面是一个符合要求的Vehicle、Bicycle和Subway的实现:
```cpp
#include <iostream>
class Vehicle {
public:
Vehicle(double speed, double distance) : speed_(speed), distance_(distance) {}
virtual double TimeSpend() = 0;
protected:
double speed_; // km/min
double distance_; // km
};
class Bicycle : public Vehicle {
public:
Bicycle(double distance) : Vehicle(0.2, distance) {}
double TimeSpend() override { return distance_ / speed_; }
};
class Subway : public Vehicle {
public:
Subway(double distance) : Vehicle(0.5, distance) {}
double TimeSpend() override { return distance_ / speed_ + 2 * (distance_ / 2) / speed_ + 2; }
};
int main() {
Bicycle bicycle(10);
std::cout << "Bicycle time spend: " << bicycle.TimeSpend() << " min" << std::endl;
Subway subway(10);
std::cout << "Subway time spend: " << subway.TimeSpend() << " min" << std::endl;
return 0;
}
```
在这个实现中,Vehicle类是一个抽象基类,它包含了交通工具的速度和目的地距离。由于TimeSpend函数的实现是不同的,因此它是一个纯虚函数,需要在派生类中进行实现。
Bicycle和Subway两个派生类分别实现了TimeSpend函数,并用不同的速度计算到达目的地所需的时间。在Subway的TimeSpend函数中,除了距离和速度之外,还考虑了在站台停靠的时间。
在main函数中,我们分别创建了一个Bicycle对象和一个Subway对象,并调用它们的TimeSpend函数来计算到达目的地所需的时间。
MFC中请写一段代码获取停靠边的大小 GetDockingEdgeSize();
在MFC(Microsoft Foundation Classes)中,没有直接的函数叫做 `GetDockingEdgeSize()` 来获取停靠边的大小。MFC提供了一些工具来创建和管理停靠窗口(dockable windows),例如使用 `CDockablePane` 类来创建可以停靠的窗格。如果需要获取与停靠相关的尺寸信息,可能需要考虑停靠窗格的边框宽度,但这通常不是直接由某个函数提供的。
如果你想要获取停靠窗格的边框宽度,可能需要从窗格的样式中解析出边框的宽度或者使用父窗口的尺寸和停靠窗格的位置来计算。下面是一个示例代码片段,展示了如何在一个 `CDockablePane` 的派生类中使用回调函数来获取停靠边的大小:
```cpp
class CMyDockablePane : public CDockablePane
{
public:
CMyDockablePane(CWnd* pParentWnd, BOOL bFloatMode = FALSE)
: CDockablePane(pParentWnd, _T("MyDockablePane"), CPoint(200, 200), CSize(300, 200), bFloatMode)
{}
// 虚函数重写,用于初始化停靠窗格
virtual void OnInitialUpdate()
{
CDockablePane::OnInitialUpdate();
// 这里可以添加自定义的初始化代码
// 例如,注册一个事件,当窗格停靠位置改变时,计算边框大小
DockingManager()->signal_DockPanePositionChanged().connect(this, &CMyDockablePane::OnDockPanePositionChanged);
}
// 事件处理函数,当停靠位置改变时调用
void OnDockPanePositionChanged(CDockablePane* pPane)
{
if (pPane == this)
{
// 这里可以获取到窗格的位置和大小信息
// 例如,可以调用 CWnd::GetWindowRect() 获取窗格相对于屏幕的坐标,然后计算边框大小
CRect rcPane;
GetWindowRect(&rcPane);
// 假设我们知道停靠边的大小,这里仅作为一个示例
int dockingEdgeSize = 20; // 假设边框大小是20像素
// ... 这里可以根据需要进行进一步的计算或者处理
}
}
};
```
请注意,这个代码示例并没有直接提供 `GetDockingEdgeSize()` 函数,因为MFC本身并没有提供这样的功能。如果需要精确获取停靠边的大小,可能需要更复杂的设计来追踪和计算这些尺寸。如果只是需要一个估算值,可以尝试获取窗格的尺寸和位置,然后计算出边框的大小。
阅读全文