WinCreateStdWindow: Difference between revisions
(6 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
Creates a standard window. | |||
==Syntax== | |||
WinCreateStdWindow ( hwndParent, flFrameStyle, pflCreateFlags, pszClientClass, | |||
pszTitle, flClientStyle, hmodResource, ulFrameId, phwndClient ) | |||
==Usage Explanation== | |||
Use this API to create a standard type window, as a main window for an application. It can be used elsewhere, but this is less common. You would usually create the window with the WS_VISIBLE style. If FCF_SHELLPOSITION is not specified, the dimensions and location of window are all 0, and you must then use WinSetWindowPos to size and position window later. If WS_VISIBLE is not used, WinShowWindow can be used later to show the window. | Use this API to create a standard type window, as a main window for an application. It can be used elsewhere, but this is less common. You would usually create the window with the WS_VISIBLE style. If FCF_SHELLPOSITION is not specified, the dimensions and location of window are all 0, and you must then use WinSetWindowPos to size and position window later. If WS_VISIBLE is not used, WinShowWindow can be used later to show the window. | ||
You can reach the sub-windows of the newly created frame window with the following ids: FID_CLIENT, FID_HORZSCROLL, FID_MINMAX, FID_MENU, FID_SYSMENU, FID_TITLEBAR, FID_VERTSCROLL. | You can reach the sub-windows of the newly created frame window with the following ids: FID_CLIENT, FID_HORZSCROLL, FID_MINMAX, FID_MENU, FID_SYSMENU, FID_TITLEBAR, FID_VERTSCROLL. | ||
==Parameters== | |||
;HWND hwndParent (input) : Handle to parent window. If HWND_DESKTOP is specified, a main window is created. | ;HWND hwndParent (input) : Handle to parent window. If HWND_DESKTOP is specified, a main window is created. | ||
;ULONG flFrameStyle (input): Window style. Usually chosen from pre-defined PM constants, but you can also create your own styles for your own classes. FS_ style flags may only be used when the frame is created from a dialog template. Here are the pre-defined PM styles (any combination): | ;ULONG flFrameStyle (input): Window style. Usually chosen from pre-defined PM constants, but you can also create your own styles for your own classes. FS_ style flags may only be used when the frame is created from a dialog template. Here are the pre-defined PM styles (any combination): | ||
::FS_AUTOICON System redraws icon for application. | |||
::FS_BORDER Window has thin border. | |||
::FS_DLGBORDER Window has dialog border. | |||
::FS_MOUSEALIGN Position is relative to mouse position. | |||
::FS_NOBYTEALIGN Moves are not aligned to nearest byte. Slower, but nicer. | |||
::FS_NOMOVEWITHOWNER Window will not move when owner does. | |||
::FS_SCREENALIGN Coordinates are relative to top left of screen. | |||
::FS_SIZEBORDER Window has normal resizable border. | |||
::FS_SYSMODAL System modal window. Usually not a good idea. | |||
::FS_TASKLIST Window will be added to tasklist. | |||
::WS_ANIMATE Enables WPS animation, unless user has disabled this feature. | |||
::WS_CLIPCHILDREN Window cannot draw on children. | |||
::WS_CLIPSIBLINGS Window cannot draw on siblings. | |||
::WS_DISABLED Creates window disabled. This might be desirable for filling list boxes, and so on. WinEnableWindow must be used later. | |||
::WS_GROUP Start a new group for dialog box purposes. This should not be used on every window in the group, only the first one. | |||
::WS_PARENTCLIP Window created with this style cannot draw outside their parents, but they CAN draw on their parent, so care sould be used. | |||
::WS_SAVEBITS PM will save the pixels underneath this window for when this window closes and moves away. This is faster, but uses more memory. With todays fast systems, if you are not concerned about higher RAM usage, this should be on. | |||
::WS_SYNCPAINTS WM_PAINT messages will be sent, rather than posted. | |||
::WS_TABSTOP Specifies that pressing tab in a dialog box will move the focus to this window. Otherwise it will be skipped. | |||
::WS_VISIBLE Without this style, the window will be created invisible, and will have to be displayed later with WinSetWindowPos or WinShowWindow. The window also has to have size to be displayed, but may come up underneath other windows. | |||
;PULONG pflCreateFlags (input):Class name. Must already either be registered via WinRegisterClass, or be a pre-defined PM class. This could be one of the following: | |||
::FCF_ACCELTABLE Specifies that accelerator keys should be loaded from resource file. | |||
::FCF_AUTOICON PM automatically handles WM_PAINT messages while app is iconzied. | |||
::FCF_BORDER Creates window with thin border. | |||
::FCF_DLGBORDER Creates window with dialog-style fixed border. | |||
::FCF_HIDEBUTTON Adds hide button to frame. | |||
::FCF_HIDEMAX Adds hide and maximize buttons to frame | |||
::FCF_HORZSCROLL Adds horizontal scroll bar to client window. | |||
::FCF_ICON Uses an icon from resource file as app icon. | |||
::FCF_MAXBUTTON Adds maximize button to frame. | |||
::FCF_MENU Loads a menu from resource file. | |||
::FCF_MINBUTTON Adds minimize button to frame. | |||
::FCF_MINMAX Adds minimize and maximize buttons to frame. | |||
::FCF_MOUSEALIGN Application window is created relative to mouse position at the time of creation. | |||
::FCF_NOBYTEALIGN Does not force alignment window on an even byte, unlike VIO windows. | |||
::FCF_NOMOVEWITHOWNER Disables movement of window when owner moves. This is irrelevant with HWND_DESKTOP as owner. | |||
::FCF_SCREENALIGN Application window is created relative to the top left corner of screen. | |||
::FCF_SHELLPOSITION Application window is given automatic size and window position by PM upon creation. | |||
::FCF_SIZEBORDER Frame window is created with a sizable normal border. | |||
::FCF_STANDARD Creates window with a system menu, titlebar, minimize and maximize buttons, menu, sizable border, icon, accelerator keys, a default size and position, and an entry in the tasklist. In other words, this basically creates a whole, normal window. | |||
::FCF_SYSMENU Frame window is created with a system menu in top left corner. | |||
::FCF_SYSMODAL Window is created system modal, i.e. other apps cannot get the focus. Usually, this option should not be used, except for critical messages. | |||
::FCF_TASKLIST Creates an entry in the window list for application. | |||
::FCF_TITLEBAR Creates frame window with a titlebar. | |||
::FCF_VERTSCROLL Creates a vertical scroll bar in client window. | |||
;PSZ pszClientClass (input):This class must be a pre-registered class name. If you pass NULL, no client window will be created. | |||
;PSZ pszTitle (input):Window title. This title is only used if you specified FCF_TITLEBAR or FCF_STANDARD. | |||
;ULONG flClientStyle (input):These flags (see WS_ style flags above) determine the style of the client window. | |||
;HMODULE hmodResource (input):A handle to a resource module which has the required icon, menu, and accelerator table. | |||
;ULONG ulFrameId (input):A value given by programmer for identification of the window by owner. between 0x0000 and 0xFFFF. | |||
;PHWND pwhndClient (output):This returns the HWND for the newly created client window. | |||
==Returns== | |||
;HWND hwnd: Handle to the newly created window. NULLHANDLE is returned if there was an error. In this case, WinGetLastError might return: | |||
0x1001 PMERR_INVALID_HWND | |||
0x100A PMERR_RESOURCE_NOT_FOUND | |||
0x1019 PMERR_INVALID_FLAG | |||
==Define (C/C++)== | |||
#define INCL_WINWINDOWMGR | #define INCL_WINWINDOWMGR | ||
or | or | ||
Line 97: | Line 79: | ||
#include <os2.h> | #include <os2.h> | ||
==Gotchas== | |||
The id used for the menu, icon, and accelerator table must be the same, if they are loaded from templates in a resource file. | The id used for the menu, icon, and accelerator table must be the same, if they are loaded from templates in a resource file. | ||
==Example Code== | |||
#define INCL_WINMESSAGEMGR | |||
#define INCL_WINMESSAGEMGR | #include <os2.h> | ||
#include <os2.h> | |||
HAB hab; | HAB hab; | ||
HMQ hmq; | HMQ hmq; | ||
HWND hwndMain, hwndClient; | HWND hwndMain, hwndClient; | ||
ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | | ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | | ||
FCF_MINMAX | FCF_TASKLIST | FCF_ICON | FCF_ACCELTABLE | | FCF_MINMAX | FCF_TASKLIST | FCF_ICON | FCF_ACCELTABLE | | ||
FCF_MENU; | FCF_MENU; | ||
CHAR szClientClass[] = "CLIENT"; | CHAR szClientClass[] = "CLIENT"; | ||
CHAR szTitle; hab = WinInitialize(0); | CHAR szTitle; hab = WinInitialize(0); | ||
hmq = WinCreateMsgQueue(hab, 0); | hmq = WinCreateMsgQueue(hab, 0); | ||
if(!WinRegisterClass(hab, szClientClass,(PFNWP)ClientWndProc, 0, 0)) | if(!WinRegisterClass(hab, szClientClass,(PFNWP)ClientWndProc, 0, 0)) | ||
exit(1); | exit(1); | ||
WinLoadString(hab, 0, ID_APPNAME, sizeof(szTitle), szTitle); | WinLoadString(hab, 0, ID_APPNAME, sizeof(szTitle), szTitle); | ||
hwndMain = WinCreateStdWindow(HWND_DESKTOP, WS_VISIBLE, &flFrameFlags, | hwndMain = WinCreateStdWindow(HWND_DESKTOP, WS_VISIBLE, &flFrameFlags, | ||
szClientClass, szTitle, 0, 0, ID_APPNAME, &hwndClient); | szClientClass, szTitle, 0, 0, ID_APPNAME, &hwndClient); | ||
This example shows a typical initialization function for a window. The function first registers the window class, then calls WinCreateStdWindow to create a standard window and returns immediately if the function fails. Otherwise, it continues on to do other initialization processing. Note: The FCF_STANDARD constant can only be used if you have all the resources in defines. If you use this constant without an accelerator table for example, the function will fail. | |||
<PRE> | |||
#define INCL_WINFRAMEMGR /* Window Frame Functions */ | |||
#include <os2.h> | |||
#define IDM_RESOURCE 1 | |||
HAB hab; /* Anchor-block handle */ | |||
CHAR szClassName[] = "Generic"; /* window class name */ | |||
HWND hwndClient; /* handle to the client */ | |||
HWND hwndFrame; /* handle to the frame */ | |||
PFNWP GenericWndProc; | |||
BOOL GenericInit() | |||
{ | |||
ULONG flStyle; | |||
flStyle = FCF_STANDARD; | |||
if (!WinRegisterClass(hab, szClassName, GenericWndProc, 0L, 0)) | |||
return (FALSE); | |||
hwndFrame = WinCreateStdWindow(HWND_DESKTOP, | |||
0L, /* frame-window style */ | |||
&flStyle, /* window style */ | |||
szClassName, /* class name */ | |||
"Generic Application", /* window title */ | |||
0L, /* default client style */ | |||
NULLHANDLE, /* resource in executable file */ | |||
IDM_RESOURCE, /* resource id */ | |||
&hwndClient); /* receives client window handle */ | |||
if (!hwndFrame) | |||
return (FALSE); | |||
else { | |||
. | |||
. /* other initialization code */ | |||
. | |||
</PRE> | |||
==Related Functions== | ==Related Functions== | ||
[[ | *[[WinCreateWindow]] | ||
*[[WinDestroyWindow]] | |||
*[[WinEnableWindow]] | |||
*[[WinSetWindowPos]] | |||
*[[WinShowWindow]] | |||
[[Category: | [[Category:Win]] |
Latest revision as of 18:48, 10 April 2025
Creates a standard window.
Syntax
WinCreateStdWindow ( hwndParent, flFrameStyle, pflCreateFlags, pszClientClass, pszTitle, flClientStyle, hmodResource, ulFrameId, phwndClient )
Usage Explanation
Use this API to create a standard type window, as a main window for an application. It can be used elsewhere, but this is less common. You would usually create the window with the WS_VISIBLE style. If FCF_SHELLPOSITION is not specified, the dimensions and location of window are all 0, and you must then use WinSetWindowPos to size and position window later. If WS_VISIBLE is not used, WinShowWindow can be used later to show the window.
You can reach the sub-windows of the newly created frame window with the following ids: FID_CLIENT, FID_HORZSCROLL, FID_MINMAX, FID_MENU, FID_SYSMENU, FID_TITLEBAR, FID_VERTSCROLL.
Parameters
- HWND hwndParent (input)
- Handle to parent window. If HWND_DESKTOP is specified, a main window is created.
- ULONG flFrameStyle (input)
- Window style. Usually chosen from pre-defined PM constants, but you can also create your own styles for your own classes. FS_ style flags may only be used when the frame is created from a dialog template. Here are the pre-defined PM styles (any combination):
- FS_AUTOICON System redraws icon for application.
- FS_BORDER Window has thin border.
- FS_DLGBORDER Window has dialog border.
- FS_MOUSEALIGN Position is relative to mouse position.
- FS_NOBYTEALIGN Moves are not aligned to nearest byte. Slower, but nicer.
- FS_NOMOVEWITHOWNER Window will not move when owner does.
- FS_SCREENALIGN Coordinates are relative to top left of screen.
- FS_SIZEBORDER Window has normal resizable border.
- FS_SYSMODAL System modal window. Usually not a good idea.
- FS_TASKLIST Window will be added to tasklist.
- WS_ANIMATE Enables WPS animation, unless user has disabled this feature.
- WS_CLIPCHILDREN Window cannot draw on children.
- WS_CLIPSIBLINGS Window cannot draw on siblings.
- WS_DISABLED Creates window disabled. This might be desirable for filling list boxes, and so on. WinEnableWindow must be used later.
- WS_GROUP Start a new group for dialog box purposes. This should not be used on every window in the group, only the first one.
- WS_PARENTCLIP Window created with this style cannot draw outside their parents, but they CAN draw on their parent, so care sould be used.
- WS_SAVEBITS PM will save the pixels underneath this window for when this window closes and moves away. This is faster, but uses more memory. With todays fast systems, if you are not concerned about higher RAM usage, this should be on.
- WS_SYNCPAINTS WM_PAINT messages will be sent, rather than posted.
- WS_TABSTOP Specifies that pressing tab in a dialog box will move the focus to this window. Otherwise it will be skipped.
- WS_VISIBLE Without this style, the window will be created invisible, and will have to be displayed later with WinSetWindowPos or WinShowWindow. The window also has to have size to be displayed, but may come up underneath other windows.
- PULONG pflCreateFlags (input)
- Class name. Must already either be registered via WinRegisterClass, or be a pre-defined PM class. This could be one of the following:
- FCF_ACCELTABLE Specifies that accelerator keys should be loaded from resource file.
- FCF_AUTOICON PM automatically handles WM_PAINT messages while app is iconzied.
- FCF_BORDER Creates window with thin border.
- FCF_DLGBORDER Creates window with dialog-style fixed border.
- FCF_HIDEBUTTON Adds hide button to frame.
- FCF_HIDEMAX Adds hide and maximize buttons to frame
- FCF_HORZSCROLL Adds horizontal scroll bar to client window.
- FCF_ICON Uses an icon from resource file as app icon.
- FCF_MAXBUTTON Adds maximize button to frame.
- FCF_MENU Loads a menu from resource file.
- FCF_MINBUTTON Adds minimize button to frame.
- FCF_MINMAX Adds minimize and maximize buttons to frame.
- FCF_MOUSEALIGN Application window is created relative to mouse position at the time of creation.
- FCF_NOBYTEALIGN Does not force alignment window on an even byte, unlike VIO windows.
- FCF_NOMOVEWITHOWNER Disables movement of window when owner moves. This is irrelevant with HWND_DESKTOP as owner.
- FCF_SCREENALIGN Application window is created relative to the top left corner of screen.
- FCF_SHELLPOSITION Application window is given automatic size and window position by PM upon creation.
- FCF_SIZEBORDER Frame window is created with a sizable normal border.
- FCF_STANDARD Creates window with a system menu, titlebar, minimize and maximize buttons, menu, sizable border, icon, accelerator keys, a default size and position, and an entry in the tasklist. In other words, this basically creates a whole, normal window.
- FCF_SYSMENU Frame window is created with a system menu in top left corner.
- FCF_SYSMODAL Window is created system modal, i.e. other apps cannot get the focus. Usually, this option should not be used, except for critical messages.
- FCF_TASKLIST Creates an entry in the window list for application.
- FCF_TITLEBAR Creates frame window with a titlebar.
- FCF_VERTSCROLL Creates a vertical scroll bar in client window.
- PSZ pszClientClass (input)
- This class must be a pre-registered class name. If you pass NULL, no client window will be created.
- PSZ pszTitle (input)
- Window title. This title is only used if you specified FCF_TITLEBAR or FCF_STANDARD.
- ULONG flClientStyle (input)
- These flags (see WS_ style flags above) determine the style of the client window.
- HMODULE hmodResource (input)
- A handle to a resource module which has the required icon, menu, and accelerator table.
- ULONG ulFrameId (input)
- A value given by programmer for identification of the window by owner. between 0x0000 and 0xFFFF.
- PHWND pwhndClient (output)
- This returns the HWND for the newly created client window.
Returns
- HWND hwnd
- Handle to the newly created window. NULLHANDLE is returned if there was an error. In this case, WinGetLastError might return:
0x1001 PMERR_INVALID_HWND 0x100A PMERR_RESOURCE_NOT_FOUND 0x1019 PMERR_INVALID_FLAG
Define (C/C++)
#define INCL_WINWINDOWMGR
or
#define INCL_WIN
or
#define INCL_PM #include <os2.h>
Gotchas
The id used for the menu, icon, and accelerator table must be the same, if they are loaded from templates in a resource file.
Example Code
#define INCL_WINMESSAGEMGR #include <os2.h> HAB hab; HMQ hmq; HWND hwndMain, hwndClient; ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU | FCF_SIZEBORDER | FCF_MINMAX | FCF_TASKLIST | FCF_ICON | FCF_ACCELTABLE | FCF_MENU; CHAR szClientClass[] = "CLIENT"; CHAR szTitle; hab = WinInitialize(0); hmq = WinCreateMsgQueue(hab, 0); if(!WinRegisterClass(hab, szClientClass,(PFNWP)ClientWndProc, 0, 0)) exit(1); WinLoadString(hab, 0, ID_APPNAME, sizeof(szTitle), szTitle); hwndMain = WinCreateStdWindow(HWND_DESKTOP, WS_VISIBLE, &flFrameFlags, szClientClass, szTitle, 0, 0, ID_APPNAME, &hwndClient);
This example shows a typical initialization function for a window. The function first registers the window class, then calls WinCreateStdWindow to create a standard window and returns immediately if the function fails. Otherwise, it continues on to do other initialization processing. Note: The FCF_STANDARD constant can only be used if you have all the resources in defines. If you use this constant without an accelerator table for example, the function will fail.
#define INCL_WINFRAMEMGR /* Window Frame Functions */ #include <os2.h> #define IDM_RESOURCE 1 HAB hab; /* Anchor-block handle */ CHAR szClassName[] = "Generic"; /* window class name */ HWND hwndClient; /* handle to the client */ HWND hwndFrame; /* handle to the frame */ PFNWP GenericWndProc; BOOL GenericInit() { ULONG flStyle; flStyle = FCF_STANDARD; if (!WinRegisterClass(hab, szClassName, GenericWndProc, 0L, 0)) return (FALSE); hwndFrame = WinCreateStdWindow(HWND_DESKTOP, 0L, /* frame-window style */ &flStyle, /* window style */ szClassName, /* class name */ "Generic Application", /* window title */ 0L, /* default client style */ NULLHANDLE, /* resource in executable file */ IDM_RESOURCE, /* resource id */ &hwndClient); /* receives client window handle */ if (!hwndFrame) return (FALSE); else { . . /* other initialization code */ .