65.9K
CodeProject 正在变化。 阅读更多。
Home

使用图案画笔绘制控件皮肤

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.18/5 (5投票s)

2001年6月22日

viewsIcon

100914

downloadIcon

1118

你可以通过在 OnCtlColor() 方法中返回一个画笔来实现控件的皮肤。

Sample Image - brush_skin.jpg

引言

本文展示了如何使用图案画笔为你的控件提供类似的外观和感觉。

当使用画笔时,你可以指定画笔的起始点。因此,如果你的所有控件都使用相同的画笔,那么你的控件将具有相同的特征。如果你处理 OnCtlColor() 并返回一个图案画笔,那么你就可以做到这一点。这是一种非常简单的方法。

我在我的源代码中使用类似以下函数的代码

  • UnrealizeObject()UnrealizeObject 函数重置画笔的起始点或重置逻辑调色板。
  • CDC::SetBrushOrg():此方法指定 GDI 为设备上下文选择的下一个画笔分配的起始点。

主函数

HBRUSH CPatternDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{ 
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 

    CPoint pt(0,0); 

    if (this != pWnd) 
    { 
        CRect rc; 
        pWnd->GetWindowRect(&rc); 
        ScreenToClient(&rc); 
        pt.x = -(rc.left + GetSystemMetrics(SM_CXDLGFRAME) - 1) % 55; 
        pt.y = -(rc.top + GetSystemMetrics(SM_CYDLGFRAME) - 1)% 53;          
    } 

    // Set brushOrg
    // This is very important!!
    brush.UnrealizeObject(); 
    pDC->SetBrushOrg(pt); 

    // return new skin-brush!
    return (HBRUSH)brush; 
} 

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.