8e 用定时器实现一个简单的取色器
来源:互联网 发布:qt5 udp socket编程 编辑:程序博客网 时间:2024/06/05 15:44
思路比较清晰 获取当前鼠标位置的像素点的信息。。
/*------------------------------------------ WHATCLR.C -- Displays Color Under Cursor (c) Charles Petzold, 1998 ------------------------------------------*/#include <windows.h>#define ID_TIMER 1void FindWindowSize (int *, int *) ;LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ static TCHAR szAppName[] = TEXT ("WhatClr") ; HWND hwnd ; int cxWindow, cyWindow ; MSG msg ; WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; if (!RegisterClass (&wndclass)) { MessageBox (NULL, TEXT ("This program requires Windows NT!"), szAppName, MB_ICONERROR) ; return 0 ; } FindWindowSize (&cxWindow, &cyWindow) ; hwnd = CreateWindow (szAppName, TEXT ("What Color"), WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER, CW_USEDEFAULT, CW_USEDEFAULT, cxWindow, cyWindow, NULL, NULL, hInstance, NULL) ; ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ;}void FindWindowSize (int * pcxWindow, int * pcyWindow){ HDC hdcScreen ; TEXTMETRIC tm ; hdcScreen = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ; GetTextMetrics (hdcScreen, &tm) ; DeleteDC (hdcScreen) ; * pcxWindow = 2 * GetSystemMetrics (SM_CXBORDER) + 12 * tm.tmAveCharWidth ; * pcyWindow = 2 * GetSystemMetrics (SM_CYBORDER) + GetSystemMetrics (SM_CYCAPTION) + 2 * tm.tmHeight ;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ static COLORREF cr, crLast ; static HDC hdcScreen ; HDC hdc ; PAINTSTRUCT ps ; POINT pt ; RECT rc ; TCHAR szBuffer [16] ; switch (message) { case WM_CREATE: hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ; SetTimer (hwnd, ID_TIMER, 100, NULL) ; return 0 ; case WM_DISPLAYCHANGE: DeleteDC (hdcScreen) ; hdcScreen = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL) ; return 0 ; case WM_TIMER: GetCursorPos (&pt) ; cr = GetPixel (hdcScreen, pt.x, pt.y) ; if (cr != crLast) { crLast = cr ; InvalidateRect (hwnd, NULL, FALSE) ; } return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rc) ; wsprintf (szBuffer, TEXT (" %02X %02X %02X "), GetRValue (cr), GetGValue (cr), GetBValue (cr)) ; DrawText (hdc, szBuffer, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: DeleteDC (hdcScreen) ; KillTimer (hwnd, ID_TIMER) ; PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ;}
0 0
- 8e 用定时器实现一个简单的取色器
- [Java定时器]用Spring Task实现一个简单的定时器.
- 一个简单定时器的实现(C++)
- 一个简单定时器的实现(C++)
- 一个简单的定时器
- 一个简单的定时器
- 简单定时器的实现
- linux内核定时器--------一个简单的timer的实现
- 多线程技术实现了一个简单的定时器类
- 一个最小堆简单定时器的实现demo
- 用线程实现简单的定时器
- 一个简单的整点定时器
- 一个最简单的定时器
- 用javascript实现的一个定时器
- 用python的tiwsted实现一个定时器
- Android简单定时器的实现
- C++实现简单的定时器
- java简单的定时器实现
- MySql安装杂记
- Android常用颜色值
- HTML5(一)学习HTML5新特性
- struts2格式化数字
- cocos2dx3.4源码阅读
- 8e 用定时器实现一个简单的取色器
- Android模糊效果总结
- beautifulsoup学习-抓取页面并解析
- uva 10820 Send a Table 欧拉函数
- 构建U盘启动的嵌入式linux
- mysql游标实例演示
- Mac 10.10.2 Xcode6 代码自动补全插件安装
- CRONTAB使用介绍
- Android fill_parent、wrap_content和match_parent的区别