2017-03-04 33 views
-1

因此,我正在使用SetPixel函數在屏幕上重新着色一些像素。但是,當我調整控制檯的大小或將控制檯移出屏幕時,屏幕外的像素再次變爲黑色。通過SetPixel設置的C++像素在調整控制檯大小或將其移出屏幕時正在消失

我該如何防止它們變黑?

問候,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; 
} 
+0

什麼庫是'SetPixel'? – byxor

+1

假設這是Win32函數,只要您收到WM_PAINT消息,就需要繪製像素。 –

+0

@BrandonIbbotson它在wingdi.h中聲明。 – TPRammus

回答

2

控制檯窗口是不是你的窗口,你不應該對他直接畫!

您被允許使用FillConsoleOutputAttributeFillConsoleOutputCharacter創建帶有框和線條的彩色「圖形」,並與屏幕緩衝區一起玩,但就是這樣。

如果你需要像素精度,那麼你需要創建自己的窗口CreateWindowdrawWM_PAINT

0

你可以做的一個解決方案是創建一個無限循環,然後在無限循環內部設置像素被調用。

請查看示例代碼(根據你給什麼):

#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; 
} 

不那麼完美的解決方案,因爲當你向下滾動控制檯,像素被複制,看上去就像一個尾隨點,但是它給了你如何完成任務的想法。 :)

相關問題