浮动抓图的实现

本文介绍了如何在MFC环境下创建一个基于对话框的抓图程序。通过在主窗口上添加控件,并利用资源 IDD_DIALOG1 设计界面。在截图过程中,程序暂时隐藏浮动窗口以捕获桌面图像,然后重新显示窗口。作者承认这种方法存在不足,期待专业人士提供改进意见。

首先,上张刚出炉的抓图程序截图。
在这里插入图片描述
新建基于对话框MFC窗口程序,在主窗口上摆上控件。
在这里插入图片描述
添加资源,新建IDD_DIALOG1并设置属性。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于控件资源IDD_DIALOG1,新建类CCoverDlg。

#pragma once
#include "atltypes.h"


// CCoverDlg 对话框

class CCoverDlg : public CDialogEx
{
   
   
	DECLARE_DYNAMIC(CCoverDlg)

public:
	CCoverDlg(CWnd* pParent = NULL);   // 标准构造函数
	virtual ~CCoverDlg();

// 对话框数据
	enum {
   
    IDD = IDD_DIALOG1 };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	CPoint m_pointLButtonDown;
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
    afx_msg LRESULT OnNcHitTest(CPoint point);
	int mMouseStates;
};
// CoverDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "CutScreen.h"
#include "CoverDlg.h"
#include "afxdialogex.h"


// CCoverDlg 对话框

IMPLEMENT_DYNAMIC(CCoverDlg, CDialogEx)

CCoverDlg::CCoverDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CCoverDlg::IDD, pParent)
	, m_pointLButtonDown(0)
	, mMouseStates(0)
{
   
   

}

CCoverDlg::~CCoverDlg()
{
   
   
}

void CCoverDlg::DoDataExchange(CDataExchange* pDX)
{
   
   
	CDialogEx::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(CCoverDlg, CDialogEx)
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_PAINT()
//	ON_WM_NCHITTEST()
//	ON_WM_NCLBUTTONDOWN()
    ON_WM_NCHITTEST()
//	ON_WM_SIZE()
//	ON_WM_SIZING()
END_MESSAGE_MAP()


// CCoverDlg 消息处理程序


void CCoverDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
   
   
	m_pointLButtonDown = point;//记住点击位置
	
	switch (mMouseStates)
	{
   
   
	case HTLEFT:
	case HTRIGHT:
		::SetCursor(LoadCursor(NULL, IDC_SIZEWE));
		break;
	case HTTOP:
	case HTBOTTOM:
		::SetCursor(LoadCursor(NULL, IDC_SIZENS));
		break;
	case HTTOPLEFT:
	case HTBOTTOMRIGHT:
		::SetCursor(LoadCursor(NULL, IDC_SIZENWSE));
		break;
	case HTTOPRIGHT:
	case HTBOTTOMLEFT:
		::SetCursor(LoadCursor(NULL, IDC_SIZENESW));
		break;
	default:
		::SetCursor(LoadCursor(NULL, IDC_SIZEALL));
		break;
	}



	if (mMouseStates == HTTOP)
		PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
	else if (mMouseStates == HTBOTTOM)
		PostMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
	else if (mMouseStates == HTLEFT)
		PostMessage(WM_SYSCO
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值