GetColor

来源:互联网 发布:android语音助手源码 编辑:程序博客网 时间:2024/04/29 22:03

以前做网页的时候为了取色,可又一时没找到个好工具,就自己做了个。

很久以前的了,刚看到了就放上来。 

GetColor

这BLOG不知道怎么搞的,上传不了文件,没办法,只能放源程序了。

[SOURCE]

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "resource.h"

TCHAR szAppName[] = TEXT("GetColor");

LRESULT CALLBACK MainProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK HelpTextProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK LinkTextProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

WNDPROC OrgHelpTextProc;
WNDPROC OrgLinkTextProc;

HCURSOR hOrgCursor, hMoveCursor, hPickCursor, hHandCursor;

int WINAPI WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd)
{
 DialogBox (hInstance, (LPCTSTR)IDD_MAIN, NULL, (DLGPROC)MainProc);

 return (0);
}

LRESULT CALLBACK MainProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 int wmID, wmEvent;
 const int MAX_BUFFER_LEN = 7;
 TCHAR szBuffer[MAX_BUFFER_LEN];
 COLORREF crColor;
 HBRUSH hColorBrush;
 HDC hScreenDC;
 HDC hColorBoxDC;
 static POINT ptMouseInScreen;
 static HWND hColorBoxWnd, hHelpTextWnd, hLinkTextWnd;
 static BOOL bCapture;
 static POINTS ptMouseInWindow;
 static RECT rtColorBox, rtHelpText, rtLinkText;
 
 switch (uMsg)
 {
 case WM_INITDIALOG:
  SetWindowText (hDlg, szAppName);

  hColorBoxWnd = GetDlgItem (hDlg, IDC_COLOR_BOX);
  GetClientRect (hColorBoxWnd, &rtColorBox);

  hHelpTextWnd = GetDlgItem (hDlg, IDC_TEXT_HELP);

  hLinkTextWnd = GetDlgItem (hDlg, IDC_TEXT_LINK);

  hOrgCursor  = LoadCursor (NULL, IDC_ARROW);
  hMoveCursor = LoadCursor (NULL, IDC_SIZEALL);
  hPickCursor = LoadCursor (NULL, IDC_CROSS);
  hHandCursor = LoadCursor (NULL, IDC_HAND);

  OrgHelpTextProc = (WNDPROC)SetWindowLong (GetDlgItem (hDlg, IDC_TEXT_HELP), GWL_WNDPROC, (LONG)HelpTextProc);
  OrgLinkTextProc = (WNDPROC)SetWindowLong (GetDlgItem (hDlg, IDC_TEXT_LINK), GWL_WNDPROC, (LONG)LinkTextProc);

  SendMessage (hDlg, WM_MOVE, 0, 0);
  return (TRUE);
 break;

 case WM_MOVE:
  GetWindowRect (hHelpTextWnd, &rtHelpText);
  GetWindowRect (hLinkTextWnd, &rtLinkText);
 break;

 case WM_LBUTTONDBLCLK:
  PostMessage (hDlg, WM_COMMAND, IDCANCEL, 0);
 break;

 case WM_LBUTTONDOWN:
  if (PtInRect (&rtHelpText, ptMouseInScreen))
  {
   PostMessage (hHelpTextWnd, uMsg, wParam, lParam);
   break;
  }
  if (PtInRect (&rtLinkText, ptMouseInScreen))
  {
   PostMessage (hLinkTextWnd, uMsg, wParam, lParam);
   break;
  }

  PostMessage (hDlg, WM_NCLBUTTONDOWN, HTCAPTION, 0);
  ptMouseInWindow = MAKEPOINTS(lParam);

  hOrgCursor = SetCursor (hMoveCursor);
 break;

 case WM_LBUTTONUP:
  SetCursor (hOrgCursor);
 break;

 case WM_RBUTTONDOWN:
  hOrgCursor = SetCursor (hPickCursor);
  SetCapture (hDlg);
  bCapture = TRUE;
 break;

 case WM_RBUTTONUP:
  SetCursor (hOrgCursor);
  ReleaseCapture ();
  bCapture = FALSE;
 break;

 case WM_MOUSEMOVE:
  GetCursorPos (&ptMouseInScreen);

  if (bCapture)
  {
   hScreenDC = GetDC (NULL);
   hColorBoxDC = GetDC (hColorBoxWnd);

   SetDlgItemInt (hDlg, IDC_POS_X, ptMouseInScreen.x, FALSE);
   SetDlgItemInt (hDlg, IDC_POS_Y, ptMouseInScreen.y, FALSE);

   crColor = GetPixel (hScreenDC, ptMouseInScreen.x, ptMouseInScreen.y);
   _sntprintf (szBuffer, MAX_BUFFER_LEN, "%06X", crColor);
   SetDlgItemText (hDlg, IDC_COLOR_VAL, szBuffer);

   hColorBrush = CreateSolidBrush (crColor);
   SelectObject (hColorBoxDC, hColorBrush);
   FillRect (hColorBoxDC, &rtColorBox, hColorBrush);
   DeleteObject (hColorBrush);

   ReleaseDC (NULL, hScreenDC);
   ReleaseDC (hColorBoxWnd, hColorBoxDC);
  }
  else
  {
   if (PtInRect (&rtHelpText, ptMouseInScreen))
   {
    if (GetCursor() != hHandCursor)
    {
     hOrgCursor = SetCursor (hHandCursor);
    }
    PostMessage (hHelpTextWnd, uMsg, wParam, lParam);
    break;
   }
   else
   {
    if (GetCursor() != hOrgCursor)
    {
     SetCursor (hOrgCursor);
    }
   }

   if (PtInRect (&rtLinkText, ptMouseInScreen))
   {
    if (GetCursor() != hHandCursor)
    {
     hOrgCursor = SetCursor (hHandCursor);
    }
    PostMessage (hLinkTextWnd, uMsg, wParam, lParam);
    break;
   }
   else
   {
    if (GetCursor() != hOrgCursor)
    {
     SetCursor (hOrgCursor);
    }
   }

  } //End if (bCapture)
 break;

 case WM_COMMAND:
  wmID = LOWORD(wParam);
  wmEvent = HIWORD(wParam);

  switch (wmID)
  {
  case IDCANCEL:
   EndDialog (hDlg, wmID);
   return (TRUE);
  break;
  }
 break;
 }

 return (FALSE);
}

LRESULT CALLBACK HelpTextProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch (uMsg)
 {
 case WM_LBUTTONDOWN:
  MessageBox (hWnd, TEXT("只要在窗口的任意空白处:/n    按住左键拖动,可以移动窗口;/n    按右键不放,就开始取色了;/n    双击或按ESC退出。/n欢迎访问火客梦网:www.Hoker.cn。/n/n/t/t——网络学者"), szAppName, MB_OK | MB_ICONINFORMATION);
 break;
 }

 return (CallWindowProc (OrgHelpTextProc, hWnd, uMsg, wParam, lParam));
}

LRESULT CALLBACK LinkTextProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
 switch (uMsg)
 {
 case WM_LBUTTONDOWN:
  ShellExecute(NULL, TEXT("OPEN"), TEXT("http:////www.Hoker.cn"), NULL, NULL, SW_MAXIMIZE );
 break;
 }

 return (CallWindowProc (OrgLinkTextProc, hWnd, uMsg, wParam, lParam));
}

[/SOURCE]

原创粉丝点击