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

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

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

Пустой диалог без рамки, но с тенью диалога

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

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

// 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 пиксель каждый

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

0

Решение

Спасибо Гансу Пассанту за его комментарий. Решение состоит в том, чтобы использовать рисование 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);

введите описание изображения здесь

0

Другие решения