2014-01-27 64 views
1

我已經閱讀過我的課程,gotxy()是一個預定義的函數,但它不適用於Microsoft visual 2013.so我做了一些搜索,並得到了一段代碼,但我必須理解它。所以任何人都可以詳細解釋它。gotoxy()用戶在C++中定義的函數

void gotoxy(int x, int y) 
{ 
HANDLE hConsoleOutput; 
COORD dwCursorPosition; 

cout.flush(); 
dwCursorPosition.X = x; 
dwCursorPosition.Y = y; 
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE); 
SetConsoleCursorPosition(hConsoleOutput, dwCursorPosition); 
} 
+0

'dwCursorPosition'只是一個座標POD,需要發送到[SetConsoleCursorPosition](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686025(v = vs.85)。 ASPX)。所以,你刷新控制檯輸出緩衝區,準備好POD;將句柄返回到控制檯輸出並使用SetConsoleCursorPosition設置窗口上的位置。 – Gasim

回答

4

你的課程資料大約過去30年,我假設,並且瞄準DOS,甚至不是Windows 1.0。

無論如何,你現在擁有的功能是一個仍然可以在現代Windows系統上工作的實現,儘管它也過時了大約20年。第一行定義了HANDLE hConsoleOutput;。它無法初始化變量,應該這樣做:HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);。這個句柄稍後需要。

第二行定義了座標位置COORD dwCursorPosition;。同樣的問題,它應該已被初始化:COORD dwCursorPosition = { x,y };

cout.flush()確保調用之前的所有舊輸出寫入舊的光標位置。

接下來的三個語句正在修復未初始化的變量,如果這樣做是正確的,那麼不應該是必需的。最後,最後一次調用會告訴Windows下一步打印的位置。