В моем приложении MFC я создаю новое дочернее окно. Когда я перетаскиваю его в новое место, контур не рисуется во время перетаскивания, поэтому n визуальная обратная связь - PullRequest
0 голосов
/ 27 октября 2019

Это часть большого приложения MFC, которое использует архитектуру MDI. Он написан с использованием Microsoft Visual Studio 2019.

Я хочу создать окно для отображения первых нескольких строк текстового файла, чтобы пользователь мог принять решение о его анализе. Новое окно не вписывается в общую архитектуру Document / View, поэтому я сделал окно рабочего стола его родителем. Окно создано ОК, успешно располагается в верхнем левом углу экрана и отображает первые несколько строк текстового файла. Однако, когда я перетаскиваю его в новое место, его контур не перетаскивается во время перетаскивания, хотя он оказывается в заданном месте, поэтому визуальный отклик для пользователя отсутствует.

Вот код, который создает окно:

CWnd *parent = GetDesktopWindow();
int w = GetSystemMetrics(SM_CXFULLSCREEN) / 3;
int h = GetSystemMetrics(SM_CYFULLSCREEN) / 4;
CString title;
title.Format("Previewing first %d lines of file", m_nPreviewLines);
// fpw is of locally defined type CFilePreviewWnd, which is derived directly from CWnd.
fpw->Create(
    AfxRegisterWndClass(CS_NOCLOSE, 0, (HBRUSH) ::GetStockObject(WHITE_BRUSH) ), 
    title,
    WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_OVERLAPPEDWINDOW,
    CRect(0, 0, w, h), 
    parent, 
    ID_FILE_PREVIEW_WND);

Я безуспешно играл с различными комбинациями стилей WS_ и CS_. Мне кажется, что не-клиентские части окна не обновляются во время операции перетаскивания.

Я предполагаю, что здесь отсутствует что-то базовое. Любые разъяснения будут оценены.

1 Ответ

0 голосов
/ 30 октября 2019

Как я и думал, все довольно просто. Все, что было нужно, это использовать WS_POPUPWINDOW и CreatEx, а не Create. Таким образом, я могу сделать вызывающее диалоговое окно родительским. Ник;Еще раз спасибо за ваше руководство.

...