• MFC中利用CDockablePane实现悬浮窗


    在这里插入图片描述
    在这里插入图片描述

    Camera.h

    #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()
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    Camera.cpp

    // 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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    MainFrm.h

        CCameraPane		  m_wndCameraPane;
    
    • 1

    MainFrm.cpp

    
    	// 创建测试对话框
    	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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    基于QuartusII9.1的ADC和DAC控制仿真设计
    QT6.6 android下fftw-3.3.10库编译及调用so库方法
    宇视网络视频录像机运动检测告警推送到手机客户端
    代码的艺术-Writing Code Like a Pianist
    Scala入门到精通(尚硅谷学习笔记)章节八——面向对象
    20220722_JavaWeb最终案例
    pytorch 手写数字识别1
    【初阶数据结构】——带头双向循环链表(C描述)
    竞赛选题 基于人工智能的图像分类算法研究与实现 - 深度学习卷积神经网络图像分类
    什么软件可以识别图片上的文字?分享三个实用的识别软件
  • 原文地址:https://blog.csdn.net/qq_35831134/article/details/125480100