Нарисуйте поля диалога в диалоговом окне MFC

Я хочу, чтобы диалог был без полей и все же имел тень диалога. Я наткнулся на это решение. Окно без полей, используя привязку Areo, Shadow, Minimize Animation и Shake, которая использует обходной путь, создавая диалоговое окно с Margin размером 1 px и расширяя к нему клиентскую область.

MARGINS borderless = { 1, 1, 1, 1 };
DwmExtendFrameInfoClientArea(this->GetSafeHwnd(), &borderless);

В сообщении упоминалось, что область клиента буквально расширяется, а прозрачный чертеж снова дает краям Dialog 1px.

Теперь это именно то, что произошло, когда я попытался нарисовать Solid Rectangle на весь диалог:

// getting the client area
CRect clientRect;
GetClientRect(&clientRect);

// expanding it to the new margins
clientRect.left -= 1;
clientRect.top -= 1;
clientRect.right += 2;
clientRect.bottom += 2;

// set the Device Context to draw non transparent and with a black background
pDC->SetBkMode(OPAQUE);
pDC->SetBkColor(RGB(0, 0, 0));

// finally draw a rectangle to it
CBrush brush_back_ground(RGB(0, 0, 0));
pDC->FillRect(clientRect, &brush_back_ground);

Но диалог по-прежнему рисуется с его полями:

Как можно было бы нарисовать что-то растянутое на полях? Позже я собираюсь использовать фотографии в качестве диалога "Фон", который также следует рисовать на полях.

1 ответ

Спасибо Хансу Пассанту за его комментарий. Решение состоит в том, чтобы использовать рисунок GDI+ вместо рисунка GDI

// making a Gdi+ graphics object from my CDC*
Graphics g(*pDC);

// getting the client area
CRect clientRect;
GetClientRect(&clientRect);

// making a Gdi+ rect
Rect bkRect(0,0,clientRect.Width(), clientRect.Height());

// making a pen for the Rect Drawing
Pen bkPen(Color(255,0,0,0));

// draw the rectangle over the full dialog
g.DrawRectangle(&bkPen, bkRect);

licensed under cc by-sa 3.0 with attribution.