Базовые элементы Windows-приложений. Проект типа Win32 Application, страница 3

WS_BORDER  - окно с тонкой рамкой

WS_CAPTION  - у окна есть бар заголовка (включает WS_BORDER)

WS_CHILD, WS_CHILDWINDOW – дочернее окно. Нельзя использовать с WS_POPUP-стилем

WS_HSCROLL, WS_VSCROLL - горизонтальный  и вертикальный скроллинг

WS_MAXIMIZEBOX, WS_MINIMIZEBOX - создает окно с Maximize- Minimize кнопками. Должен быть определен также WS_SYSMENU - стиль

WS_OVERLAPPED – создает перекрывающееся окно. У него есть бар заголовка и рамка

WS_OVERLAPPEDWINDOW  = =  WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU|         WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX

WS_POPUP – перекрывающееся окно. Не может быть использовано с WS_CHILD

WS_POPUPWINDOW  = =  WS_BORDER | WS_POPUP | WS_SYSMENU styles.

WS_SIZEBOX, WS_THICKFRAME – окно, которое можно resize-ить

WS_SYSMENU – окно со стандартным меню Windows. Должен быть также определен WS_CAPTION.

WS_VISIBLE – изначально видимое окно

Замечание: существуют два следующих стиля окна

WS_ICONIC, WS_MINIMIZE – создает первоначально минимизированное окно

WS_MAXIMIZE – создает первоначально максимизированное окно

, но (как оказалось) их присутствие в dwStyle на начальный размер окна никак не влияют, а чтобы окно оказалось максимизированным, нужно вызывать ShowWindow() (смотри 5.2.2.) с параметром ncmd = SW_ SHOWMAXIMIZED, а чтобы окно оказалось минимизированным, нужно вызывать ShowWindow() с параметром ncmd = SW_ SHOWMINIMIZED,

x, y – для перекрывающихся и pop-up – окон это координата левого верхнего угла в координатах экрана. Для дочернего окна это координата левого верхнего угла относительно левого верхнего угла родительского окна. Если этот параметр равен CW_USEDEFAULT, Windows сама задает позицию левого верхнего угла (иногда крайне неудачно) и игнорирует y-параметр для перекрывающихся окон, а для дочерних и pop-up  окон x и y устанавливает в ноль.

nWidth, nHeight – задаются аналогично x и y - параметрам

hWndParent – в нашем случае NULL

hMenu – для перекрывающихся и pop-upокон определяет меню, которое должно использоваться окном (может быть NULL), для дочерних окон – некоторый идентификатор, с помощью которого происходит уведомление родителя о дочерних событиях

Возвращаемое значение – в случае успешного завершения – дескриптор нового окна, в случае неудачи – NULL.

Замечание: перед возвратом CreateWindow() посылает сообщение WM_CREATE оконной процедуре

..5.3 Отображение и обновление окна

Хотя функция CreateWindow  и создает окно, это не значит, что оно будет автоматически отображаться на экране. Функция ShowWindow() говорит Windows, как отобразить окно посредством параметра nCmdShow, получаемого WinMain.

BOOL ShowWindow(    HWND hWnd,

                                               int nCmdShow);

Замечание: параметр nCmdShow игнорируется при первом вызове приложением, если вызывающая данное приложение программаснабжает приложение STARTUPINFO-структурой, в противном случае при первом вызове следует передавать параметр nCmdShow, получаемый WinMain. Если хочется, чтобы окно оказалось максимизированным, нужно вызывать ShowWindow() с параметром ncmd = SW_ SHOWMAXIMIZED, а чтобы окно оказалось минимизированным, нужно вызывать ShowWindow() с параметром ncmd = SW_ SHOWMINIMIZED,

Функция UpdateWindow() обновляет клиентную область указанного окна посредствам посылки сообщения WM_PAINT прямо оконной процедуре, минуя очередь приложения.

         BOOL UpdateWindow( HWND hWnd );

..5.4 Цикл сообщения

         while( GetMessage(&Msg, NULL, 0, 0) )

                   {

                            TranslateMessage(&Msg);

                            DispatchMessage(&Msg);

                   }

Функция GetMessage

BOOL GetMessage(       LPMSG lpMsg,      //указатель на структуру MSG

HWND hWnd,       //дескриптор окна, для которого требуется выбирать                    //сообщения. Если этот параметр – NULL, то выбираются                              //сообщения  для всех окон потока, а также посланные с помощью                //PostThreadMessage(). Замечание: значения сообщений лежат в                  //определенном диапазоне значений