繼上個程式之後,我們已知道所有的步驟都要先取得 Handle,要 "畫" 出字串的時候就用 WriteConsole,但有時並不想從最左上角開始畫,這時我們必須介紹一個指令 SetConsoleCursorPosition

BOOL WINAPI SetConsoleCursorPosition(
  __in          HANDLE hConsoleOutput,
  __in          COORD dwCursorPosition
);

這指令主要就是把游標移到指定的位置上,到時再輸出的時候也能直接從該位置輸出。裡面有用到一個結構是 COORD,原型如下

typedef struct _COORD {
  SHORT
X;
  SHORT
Y;
} COORD,
*PCOORD;

事實上它為了方便紀錄整個 Console Window 座標所設的 struct ,並不難。當使用者將 COORD 之 object 填寫完後再塞到 SetConsoleCursorPosition 後,便可指定目前游標位置,從那開始輸出。

原始碼

/*
        console to window - how to set the cursor in the window
             - by Edison.X.
*/

#include <windows.h>
#include <stdio.h>

#define BUFFER_LEN 256
int main()
{
        const char buffer[BUFFER_LEN] = "Hello, World!!";
        HANDLE hin;
        DWORD WriteWord;
        COORD pos;

        hin = GetStdHandle(STD_OUTPUT_HANDLE);
        pos.X = 5, pos.Y = 5; // 將位置設在 (5,5) 之地方。
        SetConsoleCursorPosition(hin, pos);
        if(!WriteConsole(hin, buffer, sizeof(buffer), &WriteWord, NULL)){
                // fail.
                printf("WriteConsole Error!!");
        }
        getchar();
        return 0;
}

 

執行結果

WinConsole -002.png 

edisonx 發表在 痞客邦 PIXNET 留言(0) 人氣()