Member 12533122 Ответов: 2

Как я могу нарисовать rect на oninitdialog в MFC VC++?


Привет, люди.

Я рисую прямоугольник в моем приложении по нажатию кнопки.
но я хочу нарисовать его на старте приложения. поскольку я рисую на функции OninitDialog, она ничего не будет рисовать на ней.

так как же я могу нарисовать его при запуске приложения?

Что я уже пробовал:

void XYZ::OnBnClickedOk()
{
Crect тогда вертолет;
m_grpDisp.GetClientRect(&ампер;усилитель; ПДУ);
ScreenToClient(&rc);
int width = rc.Width();
int height = rc.Height();

// Получить контекст устройства
CClientDC dc(GetDlgItem(IDC_GDISP));
// Создание нового пера
CPen lDot(PS_DASH, 2, RGB(255, 255, 255));
CPen lPoint(PS_SOLID, 4, RGB(0, 0, 255));
CPen lLine(PS_SOLID, 8, RGB(255, 0, 0));

CBrush grey(RGB(240, 240, 240));
постоянного тока.То selectobject(&ампер;серый);
постоянного тока.Прямоугольник((ширина/2)-445,8,(ширина/2)+445,высота-3);
}

Member 12533122

я рисую его по щелчку кнопки . поэтому, когда я нажимаю кнопку, она рисует это на дисплее.
но я хочу нарисовать это, когда начнется приложение

2 Ответов

Рейтинг:
1

KarstenK

Другое решение-использовать PostMessage для сообщения WM_PAINT, которое запускает рисование вашего элемента управления. Лучше всего использовать Функцию invalidaterect для контроля раньше.

Совет: создавайте перья только один раз, как члены класса или как статические объекты, чтобы повысить производительность.


Member 12533122

я рисую его по щелчку кнопки . поэтому, когда я нажимаю кнопку, она рисует это на дисплее.
но я хочу нарисовать это, когда начнется приложение

Как я могу это нарисовать?

Рейтинг:
0

Richard MacCutchan

Если вы рисуете объекты вне функции, которая отвечает на сообщение WM_PAINT, то она не будет работать. Как только появится диалоговое окно, оно сотрет фон и перерисует все элементы управления в ресурсе. Вы должны добавить прямоугольник в настройки вашего ресурса.


Member 12533122

я рисую его по щелчку кнопки . поэтому, когда я нажимаю кнопку, она рисует это на дисплее.
но я хочу нарисовать это, когда начнется приложение

Как я могу это нарисовать?

Richard MacCutchan

На самом деле не совсем ясно, что вы пытаетесь сделать. Если вам нужен прямоугольник в диалоговом окне, то самый простой способ-добавить статический элемент управления с одним из стилей, описанных в разделе Средства Контроля Статического Электричества И Стили | Майкрософт Документы[^].

Member 12533122

в основном я хочу нарисовать несколько линий и прямоугольник. я хочу рисовать на экране с разными входами.

Richard MacCutchan

Да, правда, не очень полезная информация. Если это диалоговое приложение, то оно действительно не поддается такой функции без довольно большой работы. Вам нужно захватить сообщение WM_PAINT и обработать его самостоятельно, прежде чем передавать его всем другим элементам управления. Если это обычное приложение Windows, то вы просто делаете все это в обработчике OnPaint.