| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1616 人关注过本帖
标题:求助高手:控制台画图问题(在线求解)
只看楼主 加入收藏
LynnA
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助高手:控制台画图问题(在线求解)
那个高手帮我解答下如和在控制台上画一个有阴影的矩形。
百度上的我用VC++6.0编译不了。!
程序代码:
#include <windows.h>
HANDLE hOut;
void ShadowWindowLine(char *str); 
void DrawBox(bool bSingle, SMALL_RECT rc); // 绘制边框
int main(void)
{
    hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 获取标准输出设备句柄
    SetConsoleOutputCP(437); // 设置代码页,这里如果设置成936(简体中文),那么程序会怎样?那样的话,将画不出边框。
    ShadowWindowLine("Display a line of words, and center the window with shadow.");
    CloseHandle(hOut); // 关闭标准输出设备句柄
    return 0;
}
void ShadowWindowLine(char *str)
{
    SMALL_RECT rc;
    CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息
    WORD att0,att1,attText;
    int i, chNum = strlen(str);
    GetConsoleScreenBufferInfo( hOut, &bInfo ); // 获取窗口缓冲区信息
    // 计算显示窗口大小和位置
    rc.Left = (bInfo.dwSize.X - chNum)/2 - 2;
    rc.Top = 8; // 原代码段中此处为bInfo.dwSize.Y/2 - 2,但是如果您的DOS屏幕有垂直滚动条的话,还需要把滚动条下拉才能看到,为了方便就把它改为10
    rc.Right = rc.Left + chNum + 4;
    rc.Bottom = rc.Top + 4;
    att0 = BACKGROUND_INTENSITY; // 阴影属性
    att1 = FOREGROUND_RED |FOREGROUND_GREEN |FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_BLUE;// 文本属性
    attText = FOREGROUND_RED |FOREGROUND_INTENSITY; // 文本属性
    // 设置阴影然后填充
    COORD posShadow = {rc.Left+1, rc.Top+1}, posText = {rc.Left, rc.Top};
    for (i=0; i<5; i++)
    {
        FillConsoleOutputAttribute(hOut, att0, chNum + 4, posShadow, NULL);
        posShadow.Y++;
    }
    for (i=0;i<5;i++)
    {
        FillConsoleOutputAttribute(hOut, att1,chNum + 4, posText, NULL);
        posText.Y++;
    }
    // 写文本和边框
    posText.X = rc.Left + 2;
    posText.Y = rc.Top + 2;
    WriteConsoleOutputCharacter(hOut, str, strlen(str), posText, NULL);
    DrawBox(true, rc);
    SetConsoleTextAttribute(hOut, bInfo.wAttributes); // 恢复原来的属性
}
void DrawBox(bool bSingle, SMALL_RECT rc) // 函数功能:画边框
{
    char chBox[6];
    COORD pos;
    if (bSingle) 
    {
        chBox[0] = (char)0xda; // 左上角点
        chBox[1] = (char)0xbf; // 右上角点
        chBox[2] = (char)0xc0; // 左下角点
        chBox[3] = (char)0xd9; // 右下角点
        chBox[4] = (char)0xc4; // 水平
        chBox[5] = (char)0xb3; // 坚直
    }
    else
    {
        chBox[0] = (char)0xc9; // 左上角点
        chBox[1] = (char)0xbb; // 右上角点
        chBox[2] = (char)0xc8; // 左下角点
        chBox[3] = (char)0xbc; // 右下角点
        chBox[4] = (char)0xcd; // 水平
        chBox[5] = (char)0xba; // 坚直
    }
    // 画边框的上 下边界
    for(pos.X = rc.Left+1;pos.X<rc.Right-1;pos.X++)
    {    
        pos.Y = rc.Top;
        // 画上边界
        WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL);
        // 画左上角
        if(pos.X == rc.Left+1)
        {
            pos.X--;
            WriteConsoleOutputCharacter(hOut, &chBox[0],1, pos, NULL);
            pos.X++;
        }
        // 画右上角
        if(pos.X == rc.Right-2)
        {
            pos.X++;
            WriteConsoleOutputCharacter(hOut, &chBox[1], 1, pos, NULL);
            pos.X--;
        }
        pos.Y = rc.Bottom;
        // 画下边界
        WriteConsoleOutputCharacter(hOut, &chBox[4], 1, pos, NULL);
        // 画左下角
        if(pos.X == rc.Left+1)
        {
            pos.X--;
            WriteConsoleOutputCharacter(hOut, &chBox[2], 1, pos, NULL);
            pos.X++;
        }
        // 画右下角
        if(pos.X==rc.Right-2)
        {
            pos.X++;
            WriteConsoleOutputCharacter(hOut, &chBox[3], 1, pos, NULL);
            pos.X--;
        }
    }
    // 画边框的左右边界
    for (pos.Y = rc.Top+1; pos.Y<=rc.Bottom-1; pos.Y++)
    {
        pos.X = rc.Left;
        // 画左边界
        WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);
        pos.X = rc.Right-1;
        // 画右边界
        WriteConsoleOutputCharacter(hOut, &chBox[5], 1, pos, NULL);
    }
}

为什么我用VC++6.0编译不了啊、~
错误代码:
--------------------Configuration: 2 - Win32 Debug--------------------
Compiling...
2.c
c:\documents and settings\administrator\桌面\2.c(4) : error C2146: syntax error : missing ')' before identifier 'bSingle'
c:\documents and settings\administrator\桌面\2.c(4) : error C2061: syntax error : identifier 'bSingle'
c:\documents and settings\administrator\桌面\2.c(4) : error C2059: syntax error : ';'
c:\documents and settings\administrator\桌面\2.c(4) : error C2059: syntax error : ','
c:\documents and settings\administrator\桌面\2.c(4) : error C2059: syntax error : ')'
c:\documents and settings\administrator\桌面\2.c(29) : error C2275: 'COORD' : illegal use of this type as an expression
        d:\vc98\include\wincon.h(32) : see declaration of 'COORD'
c:\documents and settings\administrator\桌面\2.c(29) : error C2146: syntax error : missing ';' before identifier 'posShadow'
c:\documents and settings\administrator\桌面\2.c(29) : error C2065: 'posShadow' : undeclared identifier
c:\documents and settings\administrator\桌面\2.c(29) : error C2059: syntax error : '{'
c:\documents and settings\administrator\桌面\2.c(32) : error C2115: 'function' : incompatible types
c:\documents and settings\administrator\桌面\2.c(32) : warning C4024: 'FillConsoleOutputAttribute' : different types for formal and actual parameter 4
c:\documents and settings\administrator\桌面\2.c(33) : error C2224: left of '.Y' must have struct/union type
c:\documents and settings\administrator\桌面\2.c(37) : error C2065: 'posText' : undeclared identifier
c:\documents and settings\administrator\桌面\2.c(37) : error C2115: 'function' : incompatible types
c:\documents and settings\administrator\桌面\2.c(37) : warning C4024: 'FillConsoleOutputAttribute' : different types for formal and actual parameter 4
c:\documents and settings\administrator\桌面\2.c(38) : error C2224: left of '.Y' must have struct/union type
c:\documents and settings\administrator\桌面\2.c(41) : error C2224: left of '.X' must have struct/union type
c:\documents and settings\administrator\桌面\2.c(42) : error C2224: left of '.Y' must have struct/union type
c:\documents and settings\administrator\桌面\2.c(43) : error C2115: 'function' : incompatible types
c:\documents and settings\administrator\桌面\2.c(43) : warning C4024: 'WriteConsoleOutputCharacterA' : different types for formal and actual parameter 4
c:\documents and settings\administrator\桌面\2.c(44) : warning C4013: 'DrawBox' undefined; assuming extern returning int
c:\documents and settings\administrator\桌面\2.c(44) : error C2065: 'true' : undeclared identifier
c:\documents and settings\administrator\桌面\2.c(47) : error C2146: syntax error : missing ')' before identifier 'bSingle'
c:\documents and settings\administrator\桌面\2.c(47) : error C2061: syntax error : identifier 'bSingle'
c:\documents and settings\administrator\桌面\2.c(47) : error C2059: syntax error : ';'
c:\documents and settings\administrator\桌面\2.c(47) : error C2059: syntax error : ','
c:\documents and settings\administrator\桌面\2.c(47) : error C2059: syntax error : ')'
执行 cl.exe 时出错.

2.obj - 1 error(s), 0 warning(s)

[ 本帖最后由 LynnA 于 2010-11-3 20:44 编辑 ]
搜索更多相关主题的帖子: 控制台 求解 画图 
2010-11-03 18:06
outsider_scu
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:430
专家分:1333
注 册:2010-10-21
收藏
得分:20 
错误呢代码?

编程的道路上何其孤独!
2010-11-03 18:07
LynnA
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
收藏
得分:0 
错误已经附上。~
2010-11-03 18:13
LynnA
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
收藏
得分:0 

高手帮帮我啊。~
2010-11-03 18:35
LynnA
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2010-9-23
收藏
得分:0 
我现在在线求解。~
2010-11-03 20:45
快速回复:求助高手:控制台画图问题(在线求解)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021492 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved