C语言实现屏幕定位

用C语言写的应用一般都需要一个人机交互界面来实现用户对应用的操作,为了用户体验,这时候我们就需要设计一个友好的人机交互界面。而C语言怎么实现这个呢,这里就用到了windows.h,通过windows.h实现将光标移动到窗口的特定位置打印出字符,从而形成一个看上去还不错的UI。
具体代码如下:

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

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); //定义了一个句柄变量handle,将其赋值为GetStdHandle((STD_OUTPUT_HANDLE)),即标准输出的句柄
void gotoxy(short x, short y) {
    COORD coord = { x,y };/*定义结构体变量coord*/
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
/*SetConsoleCursorPosition函数,如果用户定义了结构体变量pos,其中X和Y是它的成员,通过修改pos.X和pos.Y的值就可以实现光标的位置控制*/
}
int main()
{
    int x, y;
    while (1) {
        scanf_s("%d%d", &x, &y);
        gotoxy(x, y);
    }
    return 0;
}

通过上述代码就能够实现光标的任意移动问题
那么如何做出一个简单的UI呢,下面有这样一个例子。

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

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
void gotoxy(short x, short y) {
    COORD coord = { x,y };
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
/*出于美观考虑,通过下面的HideCursor函数隐藏闪烁的光标*/
void HideCursor() {
    CONSOLE_CURSOR_INFO cursor_info = { 1,0 };
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

int main()
{
    int x, y;
    while (1) {
        HideCursor();
        for (x = 0; x <= 40; x++) {
            for (y = 0; y <= 20; y++) {
                if (x == 0 || x == 40 || y == 0 || y == 20) {
                    gotoxy(x, y);
                    printf("*");
                }
                else {
                    if (x == 15 && y == 10){
                        gotoxy(x, y);
                        printf("1:New Game");
                        y += 1;
                        gotoxy(x, y);
                        printf("2:Load Game");
                        y += 1;
                        gotoxy(x,y);
                        printf("3:Playback");
                    }
                    else {
                        continue;
                    }
                }
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32350131/article/details/80381392