怎样让任意形状窗体看上去有凹凸感-江湖救急该怎么解决
怎样让任意形状窗体看上去有凹凸感-----江湖救急 - C++ Builder / Windows SDK/API
1、用windows编了个任意形状的子窗体,但子窗体没有凹凸感,想作成按钮一样,怎么做。
2、像按钮一样,按下鼠标左键,让子窗体变成按下的图样。
------解决方案--------------------
给他画边界啊。
最简单的画边界方法就是给它贴图。
------解决方案--------------------
1 这个可以加载图片,让窗体有木头花纹,等各种效果,要求你的美工要不错。
------解决方案--------------------
美工化图,比用编程解决方便.
编程方法,简单点就是边框有阴影,让眼睛产生视觉差,产生凸凹的感觉.
------解决方案--------------------
平常在窗体向上的边白色,向下的边用黑色。
按下鼠标时向上的边用黑色,向下的用白色。
------解决方案--------------------
用图片确实简单,上面的各位高手都说过了
不过偶感觉还是重画边界比较好啊!
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; }