wsfwsl 发表于 2008-2-24 15:04

请教下大家如何用C编写侧边带有滚动条的窗口

请教下大家如何用C编写侧边带有滚动条的窗口,就象Windows界面下的那些窗口.

ba_wang_mao 发表于 2008-2-25 09:02

//////////////////////////////////////////////////////////////////////////显示滚动条
//入口参数:
//Item = 当前项
//注:堆栈中保存如下信息:
//stack.MENU.VSCROLL.rect.top.x = 垂直滚动条窗口左上角X坐标(像素)
//stack.MENU.VSCROLL.rect.top.y = 垂直滚动条窗口左上角Y坐标(像素)
//stack.MENU.VSCROLL.rect.bottom.x = 垂直滚动条窗口右下角X坐标(像素)
//stack.MENU.VSCROLL.rect.bottom.y = 垂直滚动条窗口右下角Y坐标(像素)
//stack.MENU.VSCROLL.FillColor = 垂直滚动条填充颜色
//stack.MENU.BkColor =垂直滚动条背景颜色
//滚动条高度固定=32个像素
////////////////////////////////////////////////////////////////////////void POPUP_Display_Scroll(int Item)
{
        int y;
        GUI_STACK stack;

        if (TOP_STACK(&stack))//获取栈顶信息
        {
                setfillstyle(SOLID_FILL,stack.MENU.BkColor);//设置Bar的填充颜色(类似TURBO C)
                POPUP_Bar(stack.MENU.VSCROLL.rect.top.x,stack.MENU.VSCROLL.rect.top.y,stack.MENU.VSCROLL.rect.bottom.x,stack.MENU.VSCROLL.rect.bottom.y);//用滚动条背景颜色填充滚动窗口
                y = stack.MENU.VSCROLL.rect.top.y + Item*(stack.MENU.VSCROLL.rect.bottom.y - stack.MENU.VSCROLL.rect.top.y - 32)/stack.MENU.Max;//计算滚动条起始位置
                if (y+32 > stack.MENU.VSCROLL.rect.bottom.y)
                        y = stack.MENU.VSCROLL.rect.bottom.y - 32;
                setfillstyle(SOLID_FILL,stack.MENU.VSCROLL.FillColor);
                POPUP_Bar(stack.MENU.VSCROLL.rect.top.x,y,stack.MENU.VSCROLL.rect.bottom.x,y+32);
        }
}

页: [1]

编程论坛