通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失相关的知识,希望对你有一定的参考价值。
所以我目前正在使用SetPixel函数重新着色屏幕上的一些像素。但是当我调整控制台大小或将控制台移出屏幕时,屏幕外的像素再次变黑。
我怎样才能防止它们变黑?
问候,TPRammus
编辑:这是一个例子:
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
using namespace std;
HWND consoleWindow = GetConsoleWindow(); // Get a console handle
int main()
{
HDC consoleDC = GetDC(consoleWindow); // Get a handle to device context
SetPixel(consoleDC, 20, 20, RGB(255, 255, 255));
ReleaseDC(consoleWindow, consoleDC);
cin.ignore();
return 0;
}
答案
控制台窗口不是您的窗口,您不应该直接使用它!
您可以使用FillConsoleOutputAttribute
和FillConsoleOutputCharacter
创建带有框和线的彩色“图形”,并使用屏幕缓冲区,但这是关于它。
如果您需要像素精度,那么您需要在CreateWindow中使用draw和WM_PAINT
创建自己的窗口。
另一答案
你可以做的一个解决方案是创建一个无限循环,然后在无限循环内,在这里调用设置像素。
请查看示例代码(基于您提供的内容):
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
using namespace std;
HWND consoleWindow = GetConsoleWindow(); // Get a console handle
int main()
{
HDC consoleDC = GetDC(consoleWindow); // Get a handle to device context
while(true){
SetPixel(consoleDC, 20, 20, RGB(255, 255, 255));
SetPixel(consoleDC, 20, 21, RGB(255, 255, 255));
SetPixel(consoleDC, 20, 22, RGB(255, 255, 255));
SetPixel(consoleDC, 20, 23, RGB(255, 255, 255));
SetPixel(consoleDC, 21, 20, RGB(255, 255, 255));
SetPixel(consoleDC, 21, 21, RGB(255, 255, 255));
SetPixel(consoleDC, 21, 22, RGB(255, 255, 255));
SetPixel(consoleDC, 21, 23, RGB(255, 255, 255));
SetPixel(consoleDC, 22, 20, RGB(255, 255, 255));
SetPixel(consoleDC, 22, 21, RGB(255, 255, 255));
SetPixel(consoleDC, 22, 22, RGB(255, 255, 255));
SetPixel(consoleDC, 22, 23, RGB(255, 255, 255));
SetPixel(consoleDC, 23, 20, RGB(255, 255, 255));
SetPixel(consoleDC, 23, 21, RGB(255, 255, 255));
SetPixel(consoleDC, 23, 22, RGB(255, 255, 255));
SetPixel(consoleDC, 23, 23, RGB(255, 255, 255));
}
ReleaseDC(consoleWindow, consoleDC);
cin.ignore();
return 0;
}
不是那么完美的解决方案,就像向下滚动控制台一样,像素正在复制并且看起来像一个尾随点,但它可以让您了解如何完成任务。 :)
以上是关于通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失的主要内容,如果未能解决你的问题,请参考以下文章