Posted on 2010-07-06 09:10
S.l.e!ep.¢% 閱讀(1116)
評論(0) 編輯 收藏 引用 所屬分類:
VC
最后覺得項目中的控制臺不大好用,就添加了一些小功能,比如清屏;當然最簡單的方法是調用系統自帶的函數system(“cls”);,這里提
供一個方法一樣可以清屏(測試比cls要快一些):
?
?
/*
?Standard?error?macro?for?reporting?API?errors?
*/
?
?
#define
?PERR(bSuccess,?api){if(!(bSuccess))?printf("%s:Error?%d?from?%s?\?
????on?line?
%
d\n
"
,?__FILE__,?GetLastError(),?api,?__LINE__);}
?
void
?cls(?HANDLE?hConsole?)
?{
????COORD?coordScreen?
=
?{?
0
,?
0
?};????
/*
?here's?where?we'll?home?the
????????????????????????????????????????cursor?
*/
?
????BOOL?bSuccess;
????DWORD?cCharsWritten;
????CONSOLE_SCREEN_BUFFER_INFO?csbi;?
/*
?to?get?buffer?info?
*/
?
????DWORD?dwConSize;?????????????????
/*
?number?of?character?cells?in
????????????????????????????????????????the?current?buffer?
*/
?
????
/*
?get?the?number?of?character?cells?in?the?current?buffer?
*/
?
????bSuccess?
=
?GetConsoleScreenBufferInfo(?hConsole,?
&
csbi?);
????PERR(?bSuccess,?
"
GetConsoleScreenBufferInfo
"
?);
????dwConSize?
=
?csbi.dwSize.X?
*
?csbi.dwSize.Y;
????
/*
?fill?the?entire?screen?with?blanks?
*/
?
????bSuccess?
=
?FillConsoleOutputCharacter(?hConsole,?(TCHAR)?
'
?
'
,
???????dwConSize,?coordScreen,?
&
cCharsWritten?);
????PERR(?bSuccess,?
"
FillConsoleOutputCharacter
"
?);
????
/*
?get?the?current?text?attribute?
*/
?
????bSuccess?
=
?GetConsoleScreenBufferInfo(?hConsole,?
&
csbi?);
????PERR(?bSuccess,?
"
ConsoleScreenBufferInfo
"
?);
????
/*
?now?set?the?buffer's?attributes?accordingly?
*/
?
????bSuccess?
=
?FillConsoleOutputAttribute(?hConsole,?csbi.wAttributes,
???????dwConSize,?coordScreen,?
&
cCharsWritten?);
????PERR(?bSuccess,?
"
FillConsoleOutputAttribute
"
?);
????
/*
?put?the?cursor?at?(0,?0)?
*/
?
????bSuccess?
=
?SetConsoleCursorPosition(?hConsole,?coordScreen?);
????PERR(?bSuccess,?
"
SetConsoleCursorPosition
"
?);
????
return
;
?}
?