1
현재이 함수는 windows.h 함수를 사용하여 텍스트 배경의 색상을 변경하는 함수를 호출하려고합니다. 나는 그것을 이전에했지만 다른 기능으로는하지 못했습니다. 함수가 색상 값을 어떻게 든 반환해야하거나 문제가있는 것입니다. 함수가 다른 함수에서 변경되면 함수가 호출되었습니다. 함께함수에서 SetConsoleTextAttribute 색상 값을 반환합니다.
코드 : 메인에서 호출
void setColour(HANDLE* hConsole, int ChangeColour, int Red, int Green, int Blue, int Colour) {
CONSOLE_SCREEN_BUFFER_INFOEX info;
info.cbSize = sizeof(info);
GetConsoleScreenBufferInfoEx(hConsole, &info);
info.ColorTable[ChangeColour] = RGB(Red, Green, Blue);
SetConsoleTextAttribute(hConsole, Colour);
}
void mainMenu(WindowProp* Dimensions, HANDLE* hConsole) {
getWindowSize(Dimensions);
clearScreen();
setColour(hConsole, 3, 120, 120, 236, 48);
printf("Set");
int DisplayRowCount, DisplayColumnCount;
for (DisplayRowCount = 0; DisplayRowCount <= Dimensions->Y-1; DisplayRowCount++) {
for (DisplayColumnCount = 0; DisplayColumnCount <= Dimensions->X-1; DisplayColumnCount++) {
printf(" ");
}
}
}
에는 mainMenu : 나는 그것을 고정되었다 있도록
mainMenu(&WindowP, hConsole);
당신은 GetConsoleScreenBufferInfoEx'에'HANDLE *'포인터를 전달하는()'와'()'SetConsoleTextAttribute을하지만 대신'HANDLE' 값을 기대합니다. 'HANDLE'은 이미 포인터 타입이므로, 주소별로 전달할 필요가 없습니다. 코드가 컴파일 할 수있는 유일한 방법은'STRICT'가 정의되지 않은 채로 컴파일하는 경우입니다. 그래서'HANDLE'은'void *'에 매핑됩니다. ('STRICT'는이 에러를 잡았을 것이고 컴파일에 실패했을 것입니다.) 'HANDLE *'매개 변수를'HANDLE'로 변경하고 포인터 대신 값으로 전달할 필요가 있습니다. –
@RemyLebeau Ok 그래서 함수가 제대로 호출되지만 색상은 여전히 변하지 않습니다. – Ahm23
글쎄, 당신은 콘솔의 색상 표를 복사 한 다음 그 사본을 변경하고 있지만,'SetConsoleScreenBufferInfoEx()'를 사용하여 콘솔에 변경 사항을 다시 지정하지는 않습니다. 그리고'SetConsoleTextAttribute()'는'WriteConsoleOutput()','WriteConsoleOutputCharacter()'와 같은 저수준 출력 함수가 아닌'WriteFile()'과 같은 상위 레벨 출력 함수에만 영향을 미칩니다. RTL의'printf()'을 사용하여 콘솔 출력에 실제로 사용되는 API 함수를 확인하십시오. 그리고 API 함수 중 하나를 검사하지 않습니다. –