以前做网页的时候为了取色,可又一时没找到个好工具,就自己做了个。
很久以前的了,刚看到了就放上来。
这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]