想入门的新人 发表于 2022-9-19 10:22:34

屏幕拾色器的过程


新手新手,不敢班门弄斧


代码和程序在附件



在写这个程序中发现GetPixel函数获取的位置的像素似乎不正确,于是开始在网上查找,找到了原因:
/*
                可能的原因
                如果显示器分辨率(每英寸的像素数)过高,Windows会拉伸图形,即所谓DPI缩放,
                导致应用程序GetPixel取到的点跟鼠标箭头不一致。(详细描述见参考链接)

                解决方法
                在进入WinMain函数后立即调用SetProcessDPIAware函数,以告知Windows系统本程序支持DPI。
        */

其次,改变背景颜色这里背景颜色设置为获取的颜色
hBrush = CreateSolidBrush(color);
hOldBrush = SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG)hBrush);// 替换指定窗口类的结构

然后,设置DrawText的颜色, 发现 SetROP2 设置反色不能改变DrawText的颜色, 于是使用以下方式
SetTextColor(hdc, RGB(255 - GetRValue(color), 255 - GetGValue(color), 255 - GetBValue(color)));   // 将字体颜色设置为背景颜色的 反色

这里注释的不知道对不对
*cxWindow = tm.tmAveCharWidth * 20 + GetSystemMetrics(SM_CXBORDER) * 2;// 20个平均字体宽度 + 2 个窗口边框宽度
        *cyWindow = tm.tmHeight * 3 + GetSystemMetrics(SM_CYBORDER) * 2 + GetSystemMetrics(SM_CYCAPTION);// 3个字体高度 + 窗口边框 + 标题高度

比较简易 ,通过观看小甲鱼的视频教程+Windows程序设计第5版这本电子书


页: [1]
查看完整版本: 屏幕拾色器的过程