0

我正在尝试更改我的 MFC CPropertySheet 对象的一些颜色。我可以更改我想要的所有区域的颜色。但是,我仍然无法控制一个区域。这是我的代码得到的图像。

在此处输入图像描述

如您所见,我可以使用下面的代码在顶部和左侧边距上绘制一个细边框。

void CEasyPropertySheet::Draw_Borders(CDC* pDC)
{
    // I check how many lines of tabs the control has.
    CTabCtrl* pTab = this->GetTabControl();
    int lines = pTab->GetRowCount();

    // I get the rect I want to define the borders of the control.
    CRect rect; this->GetClientRect(rect);
    pDC->FillSolidRect(rect, GENERIC_BACKGROUND_COLOR);

    // I draw the border in 2 steps. First of all I fill one rect with the border color.
    // After that, I deflect the rect and I filled again using the background color I want.
    rect.DeflateRect(0, 19 * lines, 0, 0);  
    pDC->FillSolidRect(rect, GENERIC_BORDER_COLOR);
    rect.DeflateRect(1, 1);
    pDC->FillSolidRect(rect, PROPERTYPAGE_BACKGROUND_COLOR);
}

但是,我不能使用相同的方法来绘制其他的(底部和右侧边框)。我认为我使用的矩形比屏幕上显示的要大,但我不知道该怎么做才能得到那个矩形。

有人知道该怎么做吗?

4

1 回答 1

0

出色地。在尝试了几件事(包括没有意义的事情)之后,我终于找到了我正在寻找的答案。我所要做的就是得到一个不同的矩形。这是有效的代码:

void CEasyPropertySheet::Draw_Borders(CDC* pDC)
{
    // I check how many lines of tabs has the controls.
    CTabCtrl* pTab = this->GetTabControl();
    int lines = pTab->GetRowCount();

    // I get the rect I want to define the borders of the control.
    CRect rect;
    pTab->GetClientRect(rect);
    pDC->FillSolidRect(rect, GENERIC_BACKGROUND_COLOR);

    // I draw the border in 2 steps. First of all I fill one rect with the border color.
    // After that, I deflect the rect and I filled again using the background color I want.
    rect.DeflateRect(0, 19 * lines, 0, 0);
    pDC->FillSolidRect(rect, GENERIC_BORDER_COLOR);
    rect.DeflateRect(1, 1);
    pDC->FillSolidRect(rect, PROPERTYPAGE_BACKGROUND_COLOR);
}

我得到了整体的矩形,CPropertySheet那是错误的。我要做的是得到CTabCtrl. 结果如下:

代码结果

于 2019-11-15T13:43:06.850 回答