Я сейчас решаю проблему, в которой используется функция stretchblt. У меня есть две панели (или их можно назвать окном), как на следующем рисунке для более подробной информации.
Как вы видели на картинке, есть три раздела в моей заявке - первый раздел в ответ на предоставление миниатюры в соответствии с объектом, перечисленным в третьем разделе. Кроме того, вы можете изменить размер первого и третьего разделов, перетащив второй раздел, влево или вправо, там, где наведен курсор мыши.
Все выглядит нормально, есть исключение для ситуация, когда эскиз может отображаться правильно только тогда, когда размер раздела недостаточно велик. Другими словами, миниатюра не будет отображаться должным образом, когда размер раздела (окна) 3 небольшой. Вы можете получить подробности в разделе ниже.
Интересно, уведомления в миниатюре не принадлежат моему приложению. Эти уведомления для windows (или браузеров?). Мне просто нужен эскиз для моей сетки.
сетка в третьем разделе - это контроллер, предоставленный сторонней библиотекой. Миниатюра генерируется способом, указанным в следующем коде:
auto newGrid=new CScoreboard();//CScoreboard is thrid-part, The way of creating the object with dynamics storeage should be managed by smart pointers, please ingore that in this case,thanks.
newGrid->create(dwFlags,CRect(0, 0, 100, 100),pParent,
IDC_GRID);// creating the grid pParent is parent window
/ * серия операций для атрибута для сетки, это не важно, я думаю * / //....
Ниже показано, как сгенерировать эскиз:
auto sourcePos = CRect{};
newGrid->GetWindowRect(&sourcePos);
auto griddevicerect{ CRect{} };
NewGrid->GetParent()->GetParent()->ScreenToClient(&sourcePos);// To obtain the coordinate of grid in parent window.
newGrid->GetWindowRect(&griddevicerect);
pDC->StretchBlt(sourcePos.left, sourcePos.top,
(sourcePos.Width()), (sourcePos.Height()),
pGrid->GetDC(),
0, 0,
griddevicerect.Width(), griddevicerect.Height(),
SRCCOPY);
Этот код находится в функции с именем draw. Возможно, не очень понятно, что я изобразил. Извините!
Как я могу решить эту проблему?