首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC DrawEdge 繪製 3D 邊框失效?缺少 RECT 初始化是關鍵

     編輯:程式設計綜合問答

現象

調用 `DrawEdge` 後界面無任何變化,而 `LineTo` 正常畫線。

根因

DrawEdge 參數包含 LPRECT lpRect,**必須預先設置矩形坐標**,函數內部不會自動獲取客戶區大小。未初始化的 `RECT` 成員值隨機,導致繪製區域在可見區外或寬高為 0。

修正代碼

void CMyView::OnDraw(CDC* pDC) {
    CRect rect;
    GetClientRect(&rect);           // 獲取客戶區矩形
    rect.DeflateRect(10, 10);       // 可選:向內縮進 10 像素

    // 繪製凸起邊框
    pDC->DrawEdge(&rect, EDGE_RAISED, BF_RECT);
    
    // 或繪製任意矩形
    // CRect r(100, 300, 200, 400); // left, top, right, bottom
    // pDC->DrawEdge(&r, EDGE_SUNKEN, BF_RECT);
}

DrawEdge 參數速查

  • edge 類型:`EDGE_RAISED` (凸起)、`EDGE_SUNKEN` (凹陷)、`EDGE_ETCHED` (蝕刻)、`EDGE_BUMP` (凸塊)。
  • 邊框標志:`BF_RECT` (四邊)、`BF_TOP`/`BF_BOTTOM`/`BF_LEFT`/`BF_RIGHT` (單邊)、`BF_DIAGONAL` (對角線)。
  • 組合示例:`DrawEdge(&rect, EDGE_SUNKEN, BF_TOP | BF_LEFT)` 繪製左上陰影,配合右下高光構成 3D 效果。

對比 LineTo

`LineTo` 只需起點/終點座標,邏輯簡單;`DrawEdge` 封裝了系統風格邊框繪製,**前提是提供合法矩形**。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved