home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
primcuts.zip
/
FrameWindowTricks
/
FrameWindowTricks.c
< prev
next >
Wrap
Text File
|
2000-06-24
|
5KB
|
224 lines
#pragma strings(readonly)
#define INCL_WINWINDOWMGR
#define INCL_WINFRAMEMGR
#define INCL_WINSYS
#ifdef DEBUG_TERM
#define INCL_DOSQUEUES
#define INCL_DOSSESMGR
#define INCL_DOSERRORS
#endif
#include <os2.h>
#ifdef DEBUG_TERM
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
static void launchDebugTerminal(void);
#endif
#include "StatusbarWindow.h"
#include "ClientWindow.h"
#include "resources.h"
/*
* Function prototypes - external functions
*/
BOOL _Optlink registerClientWindow(HAB hab);
BOOL _Optlink registerStatusbarWindow(HAB hab);
/*
* Function prototypes - local functions
*/
static HWND _Optlink createFrameWindow(HAB hab);
static HWND _Optlink createClientWindow(HAB hab, HWND hwndFrame);
int main(void)
{
int iRet = 0;
HAB hab = NULLHANDLE;
HMQ hmq = NULLHANDLE;
BOOL fSuccess = FALSE;
HWND hwndFrame = NULLHANDLE;
HWND hwndClient = NULLHANDLE;
#ifdef DEBUG_TERM
launchDebugTerminal();
puts("i DebugTerminal ok.");
#endif
/*
* Initialize PM
*/
hab = WinInitialize(0UL);
if(hab)
{
fSuccess = registerClientWindow(hab);
if(fSuccess)
{
fSuccess = registerStatusbarWindow(hab);
}
}
if(fSuccess)
{
hmq = WinCreateMsgQueue(hab, 0L);
}
if(hmq)
{
hwndFrame = createFrameWindow(hab);
}
if(hwndFrame)
{
hwndClient = createClientWindow(hab, hwndFrame);
}
if(hwndClient)
{
QMSG qmsg = { 0 };
WinShowWindow(hwndFrame, TRUE);
while(WinGetMsg(hab, &qmsg, (HWND)NULLHANDLE, 0UL, 0UL))
{
WinDispatchMsg(hab, &qmsg);
}
}
if(hab)
{
if(hmq)
{
if(hwndFrame)
{
WinDestroyWindow(hwndFrame);
}
WinDestroyMsgQueue(hmq);
}
WinTerminate(hab);
}
return iRet;
}
static HWND _Optlink createFrameWindow(HAB hab)
{
HWND hwndFrame = NULLHANDLE;
LONG lLength = 0L;
char achTitle[256] = "";
lLength = WinLoadString(hab, NULLHANDLE, IDS_APPTITLE, sizeof(achTitle), achTitle);
if(lLength != 0L)
{
FRAMECDATA fcd = { sizeof(fcd) };
HWND hwndTmp = NULLHANDLE;
fcd.flCreateFlags = FCF_SYSMENU | FCF_TITLEBAR | FCF_MINMAX | FCF_TASKLIST | FCF_SIZEBORDER | FCF_ICON | FCF_SHELLPOSITION | FCF_HORZSCROLL | FCF_VERTSCROLL;
fcd.hmodResources = NULLHANDLE;
fcd.idResources = WIN_APPFRAME;
hwndTmp = WinCreateWindow(HWND_DESKTOP, WC_FRAME, achTitle, 0UL, 0L, 0L, 0L, 0L, (HWND)NULLHANDLE, HWND_TOP, fcd.idResources, &fcd, NULL);
if(hwndTmp)
{
lLength = WinLoadString(hab, NULLHANDLE, IDS_APPTITLE, sizeof(achTitle), achTitle);
if(lLength != 0L)
{
HWND hwndStatusbar = NULLHANDLE;
lLength = WinLoadString(hab, NULLHANDLE, IDS_WELCOME_MESSAGE, sizeof(achTitle), achTitle);
hwndStatusbar = WinCreateWindow(hwndTmp, WC_STATUSBAR, achTitle, WS_VISIBLE, 0L, 0L, 0L, 0L, hwndFrame, HWND_BOTTOM, FID_STATUSBAR, NULL, NULL);
if(hwndStatusbar)
{
char font[] = "9.WarpSans";
WinSetPresParam(hwndStatusbar, PP_FONTNAMESIZE, sizeof(font), font);
hwndFrame = hwndTmp;
}
}
}
if(hwndFrame == NULLHANDLE)
{
WinDestroyWindow(hwndTmp);
}
}
return hwndFrame;
}
static HWND _Optlink createClientWindow(HAB hab, HWND hwndFrame)
{
HWND hwndClient = NULLHANDLE;
hwndClient = WinCreateWindow(hwndFrame, WC_APPCLIENTCLASS, NULL, WS_VISIBLE, 0L, 0L, 0L, 0L, hwndFrame, HWND_TOP, FID_CLIENT, NULL, NULL);
return hwndClient;
}
#ifdef DEBUG_TERM
static void launchDebugTerminal(void)
{
APIRET rc = NO_ERROR;
HFILE pipeDebugRead = 0;
HFILE pipeDebugWrite = 0;
STARTDATA sd = { 0 };
ULONG SessID = 0;
PID pid = 0;
HFILE hfNew = 1; /* stdout */
char PgmTitle[30] = "";
char PgmName[100] = "";
char szCommandLine[60] = "";
char ObjBuf[200] = "";
rc = DosCreatePipe(&pipeDebugRead, &pipeDebugWrite, 4096);
if(rc != NO_ERROR)
{
DosBeep(1000, 100);
exit(42);
}
_ultoa(pipeDebugRead, szCommandLine, 10);
memset(&sd, 0, sizeof(sd));
sd.Length = sizeof(STARTDATA);
sd.Related = SSF_RELATED_CHILD;
sd.FgBg = SSF_FGBG_BACK;
sd.TraceOpt = SSF_TRACEOPT_NONE;
memcpy((char*) PgmTitle, "Debug terminal\0", 15);
sd.PgmTitle = PgmTitle;
memcpy((char*) PgmName, "PMDebugTerminal.exe\0", 20);
sd.PgmName = PgmName;
sd.PgmInputs = szCommandLine;
sd.InheritOpt = SSF_INHERTOPT_PARENT;
sd.SessionType = SSF_TYPE_PM;
sd.PgmControl = SSF_CONTROL_VISIBLE | SSF_CONTROL_SETPOS;
sd.ObjectBuffer = ObjBuf;
sd.ObjectBuffLen = sizeof(ObjBuf);
rc = DosStartSession(&sd, &SessID, &pid);
if(rc != NO_ERROR)
{
DosBeep(1000, 100);
exit(43);
}
DosDupHandle(pipeDebugWrite, &hfNew);
}
#endif