当前位置: 首页 > news >正文

一步一步教你做网站后台视频产品经理培训

一步一步教你做网站后台视频,产品经理培训,外包做网站公司,网站企业备案改个人备案这一节我们使用计时器,每隔一秒获取当前鼠标坐标位置的像素值,并显示在窗口,这就相当于是一个简单的取色器了。 本节必须掌握的知识点: 第47练:取色器 7.4.1 第47练:取色器 /*----------------------------…

这一节我们使用计时器,每隔一秒获取当前鼠标坐标位置的像素值,并显示在窗口,这就相当于是一个简单的取色器了。

本节必须掌握的知识点:

        第47练:取色器

7.4.1 第47练:取色器

/*------------------------------------------------------------------

047  WIN32 API 每日一练

     第47个例子WHATCLR.C:使用计时器---显示了鼠标指针当前所指的热点的RGB颜色

     FindWindowSize 函数---设置窗口宽和高

     CreateIC函数

     GetPixel函数

     SetPixel函数

     GetRValue

(c) www.bcdaren.com, 2020

----------------------------------------------------------------*/

#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") ;

    (略)

     //获取窗口宽和高

      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) ; //删除设备对象

     //窗口宽=2个边框+12个字符平均宽度

      * pcxWindow = 2 * GetSystemMetrics (SM_CXBORDER) +  12 * tm.tmAveCharWidth ;

    //窗口高(2个边框+1个标题+2个字高)

      * 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, 1000, NULL) ; //设置计时器

           return 0 ;

      case WM_TIMER:

           GetCursorPos (&pt) ; //获取鼠标位置信息

           cr = GetPixel (hdcScreen, pt.x, pt.y) ; //获取指定位置的GRB颜色

           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) ;

}

/******************************************************************************

CreateIC函数:创建指定装置的信息的上下文。

信息上下文提供了一种无需创建设备上下文(DC)即可快速获取有关设备信息的方法。

但是,GDI绘图功能不能接受信息上下文的句柄。

HDC CreateICA(

  LPCSTR  pszDriver,//指向以空字符结尾的字符串的指针,该字符串指定设备驱动程序的名称(例如,Epson)。

  LPCSTR  pszDevice,//指向以空字符结尾的字符串的指针,该字符串指定正在使用的特定输出设备的名称,如打印管理器

  LPCSTR  pszPort,//该参数将被忽略,应设置为NULL。

  const DEVMODEA *pdm    //指向DEVMODE结构的指针,该结构包含设备驱动程序的设备特定的初始化数据。

);

*******************************************************************************

GetPixel函数:检索在指定坐标的红,绿,蓝(RGB)颜色的像素值。

COLORREF GetPixel(

  HDC hdc, //设备上下文

  int x,  //要检查的像素的X坐标(以逻辑单位表示)。

  int y   //要检查的像素的y坐标(以逻辑单位表示)。

);

*******************************************************************************

SetPixel函数:设置指定坐标的指定颜色像素。

COLORREF SetPixel(

  HDC hdc, //设备上下文

  int x,  //要检查的像素的X坐标(以逻辑单位表示)。

  int y,   //要检查的像素的y坐标(以逻辑单位表示)。

  COLORREF color//用于绘制点的颜色。若要创建COLORREF颜色值,请使用RGB宏。

);

*******************************************************************************

GetRValue宏:检索用于红,绿,蓝(RGB)值的红色成分的强度值。

void GetRValue(

   rgb    //指定RGB颜色值。

);

*/

       运行结果:

图7-5 取色器

 

总结

       实例WHATCLR.C在WinMain主程序中创建一个cxWindow宽和cyWindow高的窗口。cxWindow宽和cyWindow高是由自定义函数FindWindowSize获取的。

       ●FindWindowSize函数

     //创建一个设备环境,返回句柄仅限用于获取系统信息,"DISPLAY"表示显示器设备

      hdcScreen = CreateIC (TEXT ("DISPLAY"), NULL, NULL, NULL) ;

     //获取字体信息

      GetTextMetrics (hdcScreen, &tm) ;

      DeleteDC (hdcScreen) ; //删除设备对象

     //窗口宽=2个边框+12个字符平均宽度

      * pcxWindow = 2 * GetSystemMetrics (SM_CXBORDER) + 

12 * tm.tmAveCharWidth ;

    //窗口高(2个边框+1个标题+2个字高)

      * pcyWindow = 2 * GetSystemMetrics (SM_CYBORDER) +

GetSystemMetrics (SM_CYCAPTION) + 2 * tm.tmHeight ;

       ●窗口过程

       处理WM_CREATE消息,调用CreateDC函数获取显示器设备"DISPLAY"的句柄。然后调用SetTimer创建一个间隔时间为1秒的计时器。

       处理WM_TIMER消息,调用GetCursorPos函数获取当前鼠标位置坐标,然后调用GetPixel函数获取当前鼠标位置坐标处的像素值,并调用SetPixel函数绘制一个黑色像素点标识鼠标位置。如果当前鼠标坐标点的像素值与上次获取的像素值不同,则重绘窗口。

       处理WM_PAINT消息,调用GetClientRect函数,获取当前窗口客户区矩形。然后调用DrawText函数在窗口绘制RGB颜色值。

       【注意】GetPixel函数获取的像素值需要使用GetRValue宏将其分解为RGB颜色值。

       处理WM_DESTROY消息时,删除屏幕设备环境句柄,销毁计时器后发送WM_QUIT消息结束。

http://www.hkea.cn/news/636973/

相关文章:

  • 邯郸市做网站建设网络口碑营销案例分析
  • 罗湖网站建设联系电话西安核心关键词排名
  • 如何编写网站电脑清理软件十大排名
  • 怎么给企业制作网站seo关键词排名优化哪好
  • 高仿服装网站建设西安百度关键词推广
  • 网站单页面怎么做的百度seo站长工具
  • 网站建设谢辞企业营销型网站有哪些
  • 免费网站制作申请行业关键词一览表
  • 网站建设费关键词排名提高方法
  • 搭建淘宝客网站源码最近发生的新闻事件
  • 网站模版网网站关键词排名优化价格
  • 做网站去哪里全国免费发布广告信息平台
  • 靖江做网站湖南seo服务电话
  • 工程建设科学技术奖申报网站友情链接交换标准
  • 做网站后期为什么续费链交换
  • 网站开发与设计专业西安seo顾问培训
  • 企业网站建设话术优化营商环境指什么
  • 傻瓜式网站制作微信运营技巧
  • 甘肃网络推广软件seo方案
  • 建筑公司网站首页图片网站推广引流
  • 购物网站 后台模板今日头条站长平台
  • 营销导向企业网站策划站长工具无内鬼放心开车禁止收费
  • WordPress不能支付宝交易吗如何优化
  • 南昌seo网站设计站长工具是做什么的
  • 做IP授权的一般看什么网站一级消防工程师考试
  • 项目建设备案网站爱站网站长百度查询权重
  • 铜陵专业网站制作公司软文免费发布平台
  • 鹿泉市建设局网站短视频seo关键词
  • 手机网站开发标准网络营销服务工具
  • 施工企业分包工程会计与税务处理网站推广优化是什么意思