

#pragma once
#include "afxdialogex.h"
// Camera 对话框
class Camera : public CDialogEx
{
DECLARE_DYNAMIC(Camera)
public:
Camera(CWnd* pParent = nullptr); // 标准构造函数
virtual ~Camera();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_CAMERA };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedButton1();
};
class CCameraPane : public CDockablePane
{
public:
CCameraPane();
virtual ~CCameraPane();
private:
Camera m_Camera;
protected:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
// Camera.cpp: 实现文件
//
#include "pch.h"
#include "afxdialogex.h"
#include "Camera.h"
// Camera 对话框
IMPLEMENT_DYNAMIC(Camera, CDialogEx)
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_CAMERA };
#endif
Camera::Camera(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_CAMERA, pParent)
{
}
Camera::~Camera()
{
}
void Camera::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(Camera, CDialogEx)
ON_BN_CLICKED(IDC_BUTTON1, &Camera::OnBnClickedButton1)
END_MESSAGE_MAP()
// Camera 消息处理程序
void Camera::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
}
CCameraPane::CCameraPane()
{
}
CCameraPane::~CCameraPane()
{
}
void CCameraPane::OnDestroy()
{
CDockablePane::OnDestroy();
m_Camera.DestroyWindow();
}
/// <summary>
/// 子窗体悬浮
/// </summary>
/// <param name="lpCreateStruct"></param>
/// <returns></returns>
int CCameraPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDockablePane::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
if (!m_Camera.Create(IDD_CAMERA, this))
{
TRACE0("未能创建窗口/n");
return -1;
}
m_Camera.ShowWindow(SW_SHOW);
return 0;
}
/// <summary>
/// 消除窗体残影
/// </summary>
/// <param name="nType"></param>
/// <param name="cx"></param>
/// <param name="cy"></param>
void CCameraPane::OnSize(UINT nType, int cx, int cy)
{
CDockablePane::OnSize(nType, cx, cy);
if (m_Camera.GetSafeHwnd())
{
CRect rect;
GetClientRect(rect);
m_Camera.MoveWindow(rect);
}
}
BEGIN_MESSAGE_MAP(CCameraPane, CDockablePane)
ON_WM_CREATE()
ON_WM_SIZE()
END_MESSAGE_MAP()
CCameraPane m_wndCameraPane;
// 创建测试对话框
if (!m_wndCameraPane.Create(_T("测试"), this, CRect(0, 0, 200, 200), TRUE, IDD_CAMERA, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI))
{
TRACE0("未能创建窗口\n");
return FALSE; // 未能创建
}
m_wndCameraPane.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndCameraPane);