#include<windows.h>
#include<stdio.h>
#include <iostream>
using namespace std;
class MyPosition;
class MyScreen
{
public:
void PrintMyPosition(MyPosition* pMyPosition);
};
class MyPosition
{
public:
int x,y;
void MyPosition::DisplayMyPosition(MyScreen* pMyScreen)
{
pMyScreen->PrintMyPosition(this);
}
};
void MyScreen::PrintMyPosition(MyPosition* pMyPosition)
{
HANDLE hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwCursorPosition={0,24};
char sz[80];
//把格式化的数据写入某个字符串缓冲区
sprintf(sz,"My position is (%d,%d).",pMyPosition->x,pMyPosition->y);
DWORD cWritten;
// 在指定位置处插入指定数量的字符 句柄 字符串 字符个数 起始位置 已写个数
WriteConsoleOutputCharacter(hConsoleOutput,sz,lstrlen(sz),dwCursorPosition,&cWritten);
dwCursorPosition.X=pMyPosition->x;
dwCursorPosition.Y=pMyPosition->y;
//定位光标位置 句柄 结构体变量
SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
}
void SetColor(unsigned short ForeColor=4,unsigned short BackGroundColor=0)
//给参数默认值,使它可以接受0/1/2个参数
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //本例以输出为例
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
}
void main()
{
SetColor();
MyPosition mypos;
MyScreen mysrn;
cout<<"Enter a position (e.g. 4 10):"<<endl;
int x,y;
cin>>x>>y;
mypos.x=x;
mypos.y=y;
mypos.DisplayMyPosition(&mysrn);
}
告诉你一个事实 缓冲区也是windows的一种资源 必须通过句柄来间接Access
最新推荐文章于 2021-05-28 15:45:46 发布