它对“单次”测量(通过“测量样本”按钮)非常有效。测量完成,所有收集的数据显示在界面上 a) 以图形形式,b) 数字形式和 c) 以“颜色”形式,如您在右侧的黄色大方块中所见(模拟) .
我开发的下一步是在屏幕上显示一系列 RGB 颜色,进行测量并将它们保存到文件中。为了做到这一点,我只需将测量设备连接到屏幕上,然后依次连接我需要的所有 RGB 颜色,每次都进行测量。
所以我添加了一个“测量屏幕”按钮。哪个使用此代码:
inProgress = true;
RECT RectRGB = { 561, 83, 968, 439 };
int Red[] = {255, 128, 64, 0};
for (int i = 0; i < 3; i++) {
Red1 = Red[i];
Green1 = 0;
Blue1 = 0;
InvalidateRect(hWnd, &RectRGB, true);
}
inProgress = false;
我“期望”代码工作的方式是,每个 Invalidate 调用都会向 WM_PAINT 事件发送一条消息,并以这种方式处理:
RECT rectSRGB = { 561, 83, 968, 439 }; // x1, y1, x2, y2
if (inProgress) {
HBRUSH FillRGB = CreateSolidBrush(RGB(Red1, Green1, Blue1));
FillRect(hdc, &rectSRGB, FillRGB);
DeleteObject(FillRGB);
}
else {
HBRUSH FillRGB = CreateSolidBrush(RGB(sRGB.Red, sRGB.Green, sRGB.Blue));
FillRect(hdc, &rectSRGB, FillRGB);
DeleteObject(FillRGB);
}
IOW,只要未引发“inProgress”标志,WM_PAINT 事件就会“正常”处理消息。只有当消息来自“MEASURE_SCREEN”函数时,矩形才会填充指定的 RGB 颜色(在全局范围内指定)。
好吧,这行不通?该函数遍历颜色 OK 并每次调用“Invalidate”,它会达到我的“InProgress”逻辑,但“新”颜色永远不会显示在屏幕上,直到控制退出该函数。
我一直在寻找如何做到这一点已经有一段时间了,我想我可能会寻求你的友好和耐心的帮助。