㈠ vc6 打开工程,代码没颜色
控制台的设置函数名很多都以 SetConsole 或 GetConsole 开头。
BOOL WINAPI SetConsoleTextAttribute(
__in HANDLE hConsoleOutput,
__in WORD wAttributes
);
第一个参数可用 GetStdHandle(STD_OUTPUT_HANDLE); 获得;
第二个参数意义如下:
Attribute Meaning
FOREGROUND_BLUE Text color contains blue.
FOREGROUND_GREEN Text color contains green.
FOREGROUND_RED Text color contains red.
FOREGROUND_INTENSITY Text color is intensified.
BACKGROUND_BLUE Background color contains blue.
BACKGROUND_GREEN Background color contains green.
BACKGROUND_RED Background color contains red.
BACKGROUND_INTENSITY Background color is intensified.
COMMON_LVB_LEADING_BYTE Leading byte.
COMMON_LVB_TRAILING_BYTE Trailing byte.
COMMON_LVB_GRID_HORIZONTAL Top horizontal.
COMMON_LVB_GRID_LVERTICAL Left vertical.
COMMON_LVB_GRID_RVERTICAL Right vertical.
COMMON_LVB_REVERSE_VIDEO Reverse foreground and background attributes.
COMMON_LVB_UNDERSCORE Underscore.
这些是一个16位数的各个二进制位,你可以用位运算将这些属性组合,如:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY | BACKGROUND_INTENSITY);
如果要不等待回车立刻读入键盘输入,在conio.h中有个getch()函数。
如果要处理上下左右等键盘输入,有个MapVirtualKey函数,可以上网查一下这个函数的具体用法。
如果要清屏,可以发送命令system("cls");,这个函数在stdlib.h中。
例如:
#include <stdio.h>
#include <conio.h> //getch()
#include <stdlib.h> //system()
#include <Windows.h> //WIN API
int main(){
//这里只有4个选项,如果选项数更改,后面相应部位也要更改
char*option[]=;
char key = 0;
int i, select = 0;
HANDLE ohandle = GetStdHandle(STD_OUTPUT_HANDLE);
while(true){
for(i=0;i<4;i++){//这里共4个选项
if(i==select)//设置焦点高亮
SetConsoleTextAttribute(ohandle,BACKGROUND_INTENSITY);
else if(i==select+1)//恢复设置
SetConsoleTextAttribute(ohandle,FOREGROUND_INTENSITY);
puts(option[i]);
}
SetConsoleTextAttribute(ohandle,FOREGROUND_INTENSITY);//恢复设置
key=getch();
if(key==0x1b) //ESC 键
return 0;
if(key==0xd) //Enter 键
break;
if(key<0){ //非ascii码键2个字节
key=getch();
switch(MapVirtualKey(key,MAPVK_VSC_TO_VK)){
case VK_UP:
select = (select+3)%4;//焦点上移,减一,滚动选择,共4个选项
break;
case VK_DOWN:
select = (select+1)%4;//焦点下移,加一
break;
}
}
system("cls");
}
system("cls");
//TODO:use select to do something here !
printf("you selected : %s\n",option[select]);
//return 0; //not necessary in new standards
}
也可以用GetKeyState等函数,它返回上一次按键的信息,这些函数属于win API(#include<windows.h>),并可以处理更多按键消息,如需要可查阅msdn。