那日突然心血来潮。。。想写一个简单的拾色器。
最后出来的东西比较简易,因为感觉这东西也没必要做得怎么好看,实用就行了。源码和程序的下载链接:http://download.youkuaiyun.com/source/2402476
刚开始打算做一个MFC对话框程序,通过响应WM_MOUSEMOVE来完成,无果。使用过SetCapture、HOOK等方法均没尝试成功。后来只好退而求其次,使用一个时间超短的定时器来做了这个活儿。使用Win32 API方式,GCC编译。
运行效果如下图(窗口可以无焦点,可以对屏幕上任意点取色):
首先找到一个最简单的典型Win32窗口程序,然后在里面小做修改,就可以得到本程序。
1、为了保证能一直看得到取色结果,要将窗口置顶,故创建窗口时采用CreateWindowEx函数,第一个参数设为WS_EX_TOPMOST来将窗口置顶。
2、窗口的显示信息大致一定,不需要改变窗口大小,故将最大化框去掉,方法为窗口风格参数写法为WS_OVERLAPPEDWINDOW & (~WS_MAXIMIZEBOX)。
3、在WM_CREATE消息中SetTimer(hwnd, 1, 10, NULL),即刷新时间10毫秒。在WM_DESTROY中KillTimer。
4、在WM_TIMER中利用GetCursorPos取得鼠标的屏幕坐标,用屏幕DC为参数来GetPixel获取像素点,然后重绘客户区,在客户区内显示分解出来的黄绿蓝三色。
主要做的工作也就这几点了,上源代码: