设为首页 加入收藏

TOP

三、Windows编程之以定时器进行状态报告
2012-11-05 12:27:14 】 浏览:416
Tags:Windows 编程 定时器 进行 状态 报告

本章的最后一个程序是我在第五章提到过的。它是一个使用GetPixel函数的好例子。

WHATCLR (见程序8-5)显示了鼠标光标下目前图素的RGB颜色。

程序8-5 WHATCLR
        WHATCLR.C        /*--------------------------------------------------------------------------          WHATCLR.C -- Displays Color Under Cursor                                           (c) Charles Petzold, 1998        ---------------------------------------------------------------------------*/        #include <windows.h>        #define ID_TIMER    1        void 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_TIMER:                          GetCursorPos (&pt) ;                          cr = GetPixel (hdcScreen, pt.x, pt.y) ;                          SetPixel (hdcScreen, pt.x, pt.y, 0) ;                                          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) ;        }        
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇一、Windows子窗口按钮类别 下一篇三、Windows编程之定时器用于时钟

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目