📄 getcolordlg.cpp
字号:
// getcolorDlg.cpp : implementation file
//
#include "stdafx.h"
#include "getcolor.h"
#include "getcolorDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGetcolorDlg dialog
CGetcolorDlg::CGetcolorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGetcolorDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGetcolorDlg)
m_CO16 = _T("");
m_COB = _T("");
m_COG = _T("");
m_COR = _T("");
m_POI_X = _T("");
m_POI_Y = _T("");
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGetcolorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGetcolorDlg)
DDX_Text(pDX, IDC_EDIT16, m_CO16);
DDX_Text(pDX, IDC_EDITB, m_COB);
DDX_Text(pDX, IDC_EDITG, m_COG);
DDX_Text(pDX, IDC_EDITR, m_COR);
DDX_Text(pDX, IDC_EDITX, m_POI_X);
DDX_Text(pDX, IDC_EDITY, m_POI_Y);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGetcolorDlg, CDialog)
//{{AFX_MSG_MAP(CGetcolorDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_HOTKEY,OnHotKey) //消息与相应处理函数相关联
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGetcolorDlg message handlers
BOOL CGetcolorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
OnCreate(); //初始化时注册热键
return TRUE;
}
void CGetcolorDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CGetcolorDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CGetcolorDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CGetcolorDlg::OnOK()
{
OnGetColor();
}
void CGetcolorDlg::OnCancel()
{
OnDestroy(); //退出时注销热键
CDialog::OnCancel();
}
void CGetcolorDlg::OnCreate() //向系统登记热键
{
RegisterHotKey(m_hWnd,1001,MOD_CONTROL,'2'); //向系统登记热键CTRL+2
RegisterHotKey(m_hWnd,1002,MOD_CONTROL | MOD_SHIFT,'F'); //向系统登记热键CTRL+SHIFT+F
//不能注册WINDOWS系统使用的热键,如CTRL+A等
}
void CGetcolorDlg::OnDestroy() //注销热键
{
UnregisterHotKey(m_hWnd,1001);
UnregisterHotKey(m_hWnd,1002);
}
LRESULT CGetcolorDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
{
if(wParam==1001||wParam==1002)
OnGetColor();
return 0;
}
void CGetcolorDlg::OnGetColor() //采集颜色
{
POINT lpPoint;
GetCursorPos(&lpPoint); //获取当前鼠标位置
m_POI_X.Format("%d",lpPoint.x);
m_POI_Y.Format("%d",lpPoint.y);
HDC hDC = ::GetDC(NULL); //取得屏幕句柄
COLORREF clr;
clr = ::GetPixel(hDC,lpPoint.x,lpPoint.y); //采集屏幕颜色
m_COR.Format("%d",GetRValue(clr)); //将颜色红色段数据以10进制转换为CString
m_COG.Format("%d",GetGValue(clr)); //将颜色绿色段数据以10进制转换为CString
m_COB.Format("%d",GetBValue(clr)); //将颜色蓝色段数据以10进制转换为CString
m_CO161.Format("%02x",GetRValue(clr)); //将颜色红色段数据以16进制转换为CString
m_CO162.Format("%02x",GetGValue(clr)); //将颜色绿色段数据以16进制转换为CString
m_CO163.Format("%02x",GetBValue(clr)); //将颜色蓝色段数据以16进制转换为CString
m_CO16 = m_CO163+m_CO162+m_CO161;
UpdateData(FALSE); //显示
//复制到剪贴板 此段代码是标准剪贴板应用代码,不再做说明。
if(OpenClipboard())
{
HGLOBAL clipbuffer;
char * buffer;
EmptyClipboard();
clipbuffer = GlobalAlloc(GMEM_DDESHARE, m_CO16.GetLength()+1);
buffer = (char*)GlobalLock(clipbuffer);
strcpy(buffer, LPCSTR(m_CO16));
GlobalUnlock(clipbuffer);
SetClipboardData(CF_TEXT,clipbuffer);
CloseClipboard();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -