我有一些非常基本的代碼,它們使用 Windows API 通過直接訪問控制臺緩沖區來向控制臺顯示隨機字符和顏色。
我的問題是我想將嵌套的 for 回圈放入函式外部的單獨函式中main()。理想情況下,該函式會將結構consoleBuffer作為引數/引數,但我不知道 CHAR_INFO 結構的 sintax 是如何作業的。另一個選項是consoleBuffer在主函式之外宣告為全域,以便可以在任何地方訪問它,我們不必將其設定為引數,但這不起作用。
代碼:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 70
#define HEIGHT 35
HANDLE wHnd; //Write Handle
int main(void)
{
int x, y;
SMALL_RECT windowSize = {0, 0, WIDTH - 2, HEIGHT - 2};
// screen buffer size
COORD bufferSize = {WIDTH, HEIGHT};
// Variables for WriteConsoleOutput
COORD characterBufferSize = {WIDTH, HEIGHT};
COORD characterPosition = {0, 0};
SMALL_RECT consoleWriteArea = {0, 0, WIDTH - 1, HEIGHT - 1};
// A CHAR_INFO structure containing data about a single character
CHAR_INFO consoleBuffer[WIDTH * HEIGHT];
wHnd = GetStdHandle(STD_OUTPUT_HANDLE);
// Console title
SetConsoleTitle("CONSOLE");
//Set window
SetConsoleWindowInfo(wHnd, TRUE, &windowSize);
//Buffer size
SetConsoleScreenBufferSize(wHnd, bufferSize);
while(1){
for (y = 0; y < HEIGHT; y){
for (x = 0; x < WIDTH; x){
consoleBuffer[x WIDTH * y].Char.AsciiChar = 'a';
consoleBuffer[x WIDTH * y].Attributes = rand() % 256;
}
}
//Write characters
WriteConsoleOutputA(wHnd, consoleBuffer, characterBufferSize, characterPosition, &consoleWriteArea);
}
}
uj5u.com熱心網友回復:
CHAR_INFO本質上的問題是,如果要將其作為引數,則需要設定指向該結構的指標。該函式的示例如下:
void foo(CHAR_INFO* cB) {
int x,y;
for (y = 0; y < HEIGHT; y) {
for (x = 0; x < WIDTH; x) {
cB[x WIDTH * y].Char.AsciiChar = 'a';
cB[x WIDTH * y].Attributes = rand() % 256;
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/515594.html
標籤:C视窗温纳皮安慰
