| 制作取色器的方法作者:文墨网    转贴自:本站原创    点击数:2325
 在VC6.0中新建 工程 选择Win32 application,一直下一步确定。然后再新建C++ Source file
 内容:
 #include <windows.h>
 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
 LPSTR lpCmdLine,
 int nShowCmd)
 {
 static TCHAR szAppName[]=RGB;
  WNDCLASS cwnd;cwnd.cbClsExtra=0;
 cwnd.cbWndExtra=0;
 cwnd.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 cwnd.hCursor=LoadCursor(NULL,IDC_ARROW);
 cwnd.hIcon=LoadIcon(hInstance,szAppName);
 cwnd.hInstance=hInstance;
 cwnd.lpfnWndProc=WndProc;
 cwnd.lpszClassName=szAppName;
 cwnd.lpszMenuName=NULL;
 cwnd.style=CS_HREDRAW | CS_VREDRAW;
  if(! RegisterClass(&cwnd)){
 MessageBox(NULL,Fail to Register the Window class!,szAppName,MB_IC&#111nERROR);
 return 0;
 }
  HWND hwnd;  hwnd=CreateWindow(szAppName,szAppName,WS_OVERLAPPED | WS_MINIMIZEBOX | WS_EX_TOPMOST | WS_SYSMENU,
 CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
 NULL,NULL,hInstance,NULL);
  ShowWindow(hwnd,nShowCmd);UpdateWindow(hwnd);
  MSG msg;  while(GetMessage(&msg,NULL,0,0)){
 TranslateMessage(&msg);
 DispatchMessage(&msg);
 }
 return msg.wParam;
 }
 LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
 HDC hdc;
 static RECT rect,color_rect,point_rect,rgb_rect,d_rect;
 const int height=100,width=300;
 
 static POINT mspt;
 static HWND handle;
 static COLORREF color;
 static bool flag;
 static HBRUSH hBrush;
  char szbuf[100];  switch(msg){
 case WM_CREATE:
 SetTimer(hwnd,0,100,NULL);
 MoveWindow(hwnd,(GetSystemMetrics(SM_CXSCREEN)-width)/2,(GetSystemMetrics(SM_CYSCREEN)-height)/2,width,height,true);
 return 0;
 case WM_SIZE:
 GetClientRect(hwnd,&rect);
 color_rect.left=rect.left+2,color_rect.top=rect.top=2,color_rect.bottom=rect.bottom-2,color_rect.right=color_rect.left+100;
 point_rect.left=110,point_rect.top=rect.top,point_rect.right=rect.right,point_rect.bottom=rect.bottom/2;
 rgb_rect.left=110,rgb_rect.top=point_rect.bottom,rgb_rect.right=rect.right,rgb_rect.bottom=rect.bottom;
 return 0;
 case WM_TIMER:
 hdc=GetDC(hwnd);
 GetCursorPos(&mspt);
 handle=WindowFromPoint(mspt);
 GetWindowRect(handle,&d_rect);
 color=GetPixel(GetWindowDC(handle),mspt.x-d_rect.left,mspt.y-d_rect.top);
 DrawText(hdc,szbuf,wsprintf(szbuf,X:%04d Y:%04d  ,mspt.x,mspt.y),&point_rect,DT_SINGLELINE | DT_RIGHT | DT_VCENTER);
 DrawText(hdc,szbuf,wsprintf(szbuf,R:%03d G:%03d B:%03d  ,GetR&#118alue(color),GetG&#118alue(color),GetB&#118alue(color)),&rgb_rect,DT_SINGLELINE | DT_RIGHT | DT_VCENTER);
 hBrush=CreateSolidBrush(color);
 SelectObject(hdc,hBrush);
 Rectangle(hdc,color_rect.left,color_rect.top,color_rect.right,color_rect.bottom);
 DeleteObject(hBrush);
 ReleaseDC(hwnd,hdc);
 return 0;
 case WM_DESTROY:
 KillTimer(hwnd,0);
 PostQuitMessage(0);
 return 0;
 }
 return DefWindowProc(hwnd,msg,wParam,lParam);
 }
 
 |