Параметр стиля CreateWindow () игнорируется? - PullRequest
0 голосов
/ 29 июня 2011

В моем приложении для Windows я создаю новое окно с помощью функции CreateWindow ().Регистрация и создание окна:

// Set up the capture window
WNDCLASS wc = {0};

// Set which method handles messages passed to the window
wc.lpfnWndProc = WindowMessageRedirect<CStillCamera>;
// Make the instance of the window associated with the main application
wc.hInstance = GetModuleHandle(NULL);
// Set the cursor as the default arrow cursor
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
// Set the class name required for registering the window and identifying it for future
// CreateWindow() calls
wc.lpszClassName = c_wzCaptureClassName.c_str();

RegisterClass(&wc); /* Call succeeding */

HWND hWnd = CreateWindow(
    c_wzCaptureClassName.c_str() /* lpClassName */,
    c_wzCaptureWindowName.c_str() /* lpWindowName */,
    WS_OVERLAPPEDWINDOW | WS_MAXIMIZE /* dwStyle */,
    CW_USEDEFAULT /* x */,
    CW_USEDEFAULT /* y */,
    CW_USEDEFAULT /*nWidth */,
    CW_USEDEFAULT /* nHeight */,
    NULL /* hWndParent */,
    NULL /* hMenu */,
    GetModuleHandle(NULL) /* hInstance */,
    this /* lpParam */
);


if (!hWnd)
{
    return false;
}

ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);

Я продолжаю использовать окно и обновляю его потоковым видео, которое работает правильно.Однако, кажется, что все, что я передаю в качестве параметра dwStyle CreateWindow (), игнорируется.Окно не имеет заголовка, кнопок свертывания или разворачивания, как можно ожидать от перекрывающегося окна.Кроме того, окно не развернуто.Как ни странно, изменение dwStyle на

WS_OVERLAPPEDWINDOW | WS_HSCROLL /* dwStyle */

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

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Рисование строки заголовка и другие подобные вещи требуют передачи необработанных оконных сообщений на DefWindowProc. Например, строка заголовка окрашивается во время сообщения WM_NCPAINT. Если вы не передадите сообщение DefWindowProc, это просто не будет сделано.

1 голос
/ 29 июня 2011

Из комментария в Документации Microsoft :

Стили WS_MINIMIZE и WS_MAXIMIZE могут игнорироваться в зависимости от значений, указанных в STARTUPINFO.dwFlags и STARTUPINFO.wShowWindow при обработкебыл создан.

Поля минимизации и максимизации должны быть явно включены с помощью WS_MINIMIZEBOX и WS_MAXIMIZEBOX.Вы, вероятно, хотите WS_OVERLAPPEDWINDOW вместо просто WS_OVERLAPPED;это будет включать в себя поля минимизации и максимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...