怎样让任意形状窗体看上去有凹凸感-江湖救急该怎么解决

怎样让任意形状窗体看上去有凹凸感-----江湖救急 - C++ Builder / Windows SDK/API
1、用windows编了个任意形状的子窗体,但子窗体没有凹凸感,想作成按钮一样,怎么做。

2、像按钮一样,按下鼠标左键,让子窗体变成按下的图样。

------解决方案--------------------
给他画边界啊。
最简单的画边界方法就是给它贴图。
------解决方案--------------------
1 这个可以加载图片,让窗体有木头花纹,等各种效果,要求你的美工要不错。

------解决方案--------------------
美工化图,比用编程解决方便.
编程方法,简单点就是边框有阴影,让眼睛产生视觉差,产生凸凹的感觉.
------解决方案--------------------
平常在窗体向上的边白色,向下的边用黑色。
按下鼠标时向上的边用黑色,向下的用白色。
------解决方案--------------------
用图片确实简单,上面的各位高手都说过了

不过偶感觉还是重画边界比较好啊!
C/C++ code



    if (m_hWnd)
    {
        CBrush Brush(RGB(66,162,202));
        CBrush* pOldBrush = pDC->SelectObject(&Brush);
        
        CBrush BrushLine(RGB(94, 248, 255));
        
        CRect rtWnd, rtTitle, rtButtons;
        GetWindowRect(&rtWnd); 

        //取得标题栏的位置
        rtTitle.left = GetSystemMetrics(SM_CXFRAME);
        rtTitle.top = GetSystemMetrics(SM_CYFRAME);
        rtTitle.right = rtWnd.right - rtWnd.left - GetSystemMetrics(SM_CXFRAME);
        rtTitle.bottom = rtTitle.top + GetSystemMetrics(SM_CYSIZE);

        CPoint point;

        //填充顶部框架
        point.x = rtWnd.Width();
        point.y =  GetSystemMetrics(SM_CYSIZE) +GetSystemMetrics(SM_CYFRAME)+20;
        pDC->PatBlt(0, 0, point.x, point.y, PATCOPY);
        pOldBrush=pDC->SelectObject(&BrushLine);
        pDC->PatBlt(0,0,point.x,2,PATCOPY);
        //pDC->PatBlt(0,0,point.y,1,PATCOPY);
        pDC->PatBlt(0,point.y,point.x,2,PATCOPY);
        CBrush *Bru=pDC->SelectObject(pOldBrush);

        //填充左侧框架
        point.x = GetSystemMetrics(SM_CXFRAME) + 1;
        point.y = rtWnd.Height();
        //pDC->PatBlt(0, 0, point.x, point.y, PATCOPY);
        pOldBrush=pDC->SelectObject(Bru);
        pDC->PatBlt(0,0,3,point.y,PATCOPY);
        pDC->SelectObject(pOldBrush);

        //填充右侧框架
        point.x = GetSystemMetrics(SM_CXFRAME) + 1;
        point.y = rtWnd.Height();
        pOldBrush=pDC->SelectObject(Bru);
        pDC->PatBlt(rtWnd.Width()-point.x+2, 0,4,point.y-5,PATCOPY);
        pDC->SelectObject(pOldBrush);

        //填充底部框架
        point.x = rtWnd.Width(); 
        point.y = GetSystemMetrics(SM_CYFRAME) + 53;
        pDC->PatBlt(0, rtWnd.Height()-point.y, point.x, point.y, PATCOPY);

        //准备画XP风格按钮
        CBitmap* pBitmap = new CBitmap;
        CBitmap* pOldBitmap;
        CDC* pDisplayMemDC=new CDC;
        pDisplayMemDC->CreateCompatibleDC(pDC);

        //重画关闭button
        rtButtons.left = rtTitle.right - 40;
        rtButtons.top = rtTitle.top;
        rtButtons.right = rtButtons.left + 40;
        rtButtons.bottom = rtButtons.top + 19;
        pBitmap->LoadBitmap(IDB_CLOSE_NORMAL);
        pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
        pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
        pDisplayMemDC->SelectObject(pOldBitmap);
        m_rtButtExit = rtButtons;
        m_rtButtExit.OffsetRect(rtWnd.TopLeft()); 
        pBitmap->DeleteObject();

        //重画最大化/恢复button
        rtButtons.right = rtButtons.left - 3;
        rtButtons.left = rtButtons.right - 23;
        if (IsZoomed())
            pBitmap->LoadBitmap(IDB_MAX);
        else
            pBitmap->LoadBitmap(IDB_MAX_NORMAL);
        pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
        pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
        pDisplayMemDC->SelectObject(pOldBitmap);
        m_rtButtMax = rtButtons;
        m_rtButtMax.OffsetRect(rtWnd.TopLeft());
        pBitmap->DeleteObject();

        //重画最小化button
        rtButtons.right = rtButtons.left - 3;
        rtButtons.left = rtButtons.right - 27;
        pBitmap->LoadBitmap(IDB_MIN_NORMAL);
        pOldBitmap=(CBitmap*)pDisplayMemDC->SelectObject(pBitmap);
        pDC->BitBlt(rtButtons.left, rtButtons.top, rtButtons.Width(), rtButtons.Height(), pDisplayMemDC, 0, 0, SRCCOPY);
        pDisplayMemDC->SelectObject(pOldBitmap);
        m_rtButtMin = rtButtons;
        m_rtButtMin.OffsetRect(rtWnd.TopLeft());
        pBitmap->DeleteObject();

        ReleaseDC(pDisplayMemDC);
        delete pDisplayMemDC;
        delete pBitmap;
    }