2014-10-03 1 views
0

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

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

Blank Dialog without a Border but with a Dialog Shadow

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

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

// 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); 

Но диалог по-прежнему обращается с его полями: Blank Dialog with a Border of 1px each

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

+2

Вы не можете использовать функции 24bpp GDI унаследованных рисовать в области стекла, выход будет оставаться прозрачным. Вам нужно 32bpp рендеринг, альфа-канал должен быть включен, GDI + может это сделать. –

ответ

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); 

enter image description here