MFC屏幕放大取色的实现

首先上张图。没截到鼠标。鼠标在59附近。
在这里插入图片描述
资源,添加无边框对话框窗口,新建类CsmDialog。
在这里插入图片描述
然后,上源码。

#pragma once
// CsmDialog.h
class CsmDialog : public CDialogEx
{
   
	DECLARE_DYNAMIC(CsmDialog)
public:
	CsmDialog(CWnd* pParent = NULL);   // 标准构造函数
	virtual ~CsmDialog();
// 对话框数据
	enum {
    IDD = IDD_DIALOG2 };
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
    DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnPaint();
	afx_msg void OnMouseMove(UINT nFlags, CPoint point);
	virtual BOOL OnInitDialog();
	afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
	virtual BOOL PreTranslateMessage(MSG* pMsg);
	void bittoblt();
	COLORREF RGBcolor;
	bool xy1;
	bool xy2;
	void quse();
};
// CsmDialog.cpp : 实现文件
//

#include "stdafx.h"
#include "CutScreen.h"
#include "CsmDialog.h"
#include "afxdialogex.h"
#include "CutScreenDlg.h"//该头文件必须放这里,否则报错,不知为啥。望高手回复,因为想在类中,定义变量CCutScreenDlg *pcut = (CCutScreenDlg*)this->GetParent();

// CsmDialog 对话框

IMPLEMENT_DYNAMIC(CsmDialog, CDialogEx)

CsmDialog::CsmDialog(CWnd* pParent /*=NULL*/)
	: CDialogEx(CsmDialog::IDD, pParent)
	, xy1(NULL)
	, xy2(NULL)
{
   

}

CsmDialog::~CsmDialog()
{
   
}

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


BEGIN_MESSAGE_MAP(CsmDialog, CDialogEx)
	ON_WM_PAINT()
	ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

void CsmDialog::OnPaint()
{
   
	CPaintDC dc(this); 
	bittoblt();
	// device context for painting
	//HWND hwnd = GetSafeHwnd();
	//::SetWindowLong(hwnd, GWL_EXSTYLE, ::GetWindowLongPtr(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
	//this->SetLayeredWindowAttributes(RGB(0,255,0), 100, LWA_ALPHA);
	// TODO: 在此处添加消息处理程序代码
	// 不为绘图消息调用 CDialogEx::OnPaint()
}

// CsmDialog 消息处理程序


void CsmDialog::OnMouseMove(UINT nFlags, CPoint point)
{
   
	bittoblt();// TODO:  在此添加消息处理程序代码和/或调用默认值
	CDialogEx::OnMouseMove(nFlags, point);
}

BOOL CsmDialog::OnInitDialog()
{
   
	CDialogEx::OnInitDialog();

	//SetTimer(1, 50, NULL);
	MoveWindow(20, 20, 211, 211, 1);
	bittoblt();
	SetCapture();
	xy1 = TRUE;
	xy2 = FALSE;
	// TODO:  在此添加额外的初始化
    return TRUE;  
	// return TRUE unless you set the focus to a control
	// 异常:  OCX 属性页应返回 FALSE
}

void CsmDialog::OnLButtonUp(UINT nFlags, CPoint point)
{
   
	if (xy1 == TRUE)//模拟鼠标左键按下,不然得不到线程窗口外鼠标消息。
	{
   
		mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
		xy2 = TRUE;
		xy1 = FALSE;
		goto  moren;//必须转走,不然直接执行下个判断。直接return也可以。
	}
	if (xy2 == TRUE)
	{
   
		quse();
	}

moren:
	CDialogEx::OnLButtonUp(nFlags, point);
}



BOOL CsmDialog::PreTranslateMessage(MSG* pMsg)//重载此虚函数。方向键控制鼠标微调。
{
   
	 if (pMsg->message == WM_KEYDOWN)
	{
   
		CPoint point;
		GetCursorPos(&point);
		if (pMsg->wParam == VK_DOWN)
			point.y = point.y + 1;//向下键按下
		else if (pMsg->wParam == VK_RIGHT)
			point.x = point.x + 1;//向右键按下
		else if (pMsg->wParam == VK_LEFT)
			point.x = point.x - 1;//向左键按下
		else if (pMsg->wParam == VK_UP)
			point.y = point.y - 1;
		else if (pMsg->wParam == VK_RETURN)//回车取色
		{
   
			quse();
		}
		SetCursorPos(point.x, point.y);
	}
	else //TODO:  在此添加专用代码和 / 或调用基类

	return CDialogEx::PreTranslateMessage(pMsg);
}


void CsmDialog::bittoblt<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值