Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

357 lines
10 KiB

/*****************************************************************************
C L I P B O O K I N I T
Name: cvinit.c
Date: 21-Jan-1994
Creator: Unknown
*****************************************************************************/
#define OEMRESOURCE
#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <math.h>
#include "common.h"
#include "clipbook.h"
#include "clipbrd.h"
#include "clipdsp.h"
#include "cvinit.h"
#include "debugout.h"
static int SSplit[] = { 200, 500 };
static int SBorders[3] = { 20, 0, 0 };
HWND hwndToolbar = NULL;
HWND hwndStatus = NULL;
HBITMAP hbmStatus = NULL;
TCHAR szWindows[] = TEXT("Windows");
DWORD nIDs[] =
{
MH_BASE ,MH_POPUPBASE, 0, 0 /* This list must be NULL terminated */
};
TBBUTTON tbButtons[] = {
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0},
{0, IDM_CONNECT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{1, IDM_DISCONNECT,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0},
{2, IDM_SHARE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{3, IDM_UNSHARE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0},
{5, IDM_COPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{6, IDM_KEEP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{7, IDM_DELETE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0},
{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0},
{8, IDM_LISTVIEW, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP,0},
{9, IDM_PREVIEWS, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP,0},
{10, IDM_PAGEVIEW, TBSTATE_ENABLED, TBSTYLE_CHECKGROUP,0}
};
VOID LoadIntlStrings (void)
{
LoadString (hInst, IDS_HELV, szHelv, SMLRCBUF);
LoadString (hInst, IDS_APPNAME, szAppName, SMLRCBUF);
LoadString (hInst, IDS_LOCALCLIP, szLocalClpBk, SMLRCBUF);
LoadString (hInst, IDS_CLIPBOARD, szSysClpBrd, SMLRCBUF);
LoadString (hInst, IDS_DATAUNAVAIL, szDataUnavail, BIGRCBUF);
LoadString (hInst, IDS_READINGITEM, szReadingItem, BIGRCBUF);
LoadString (hInst, IDS_VIEWHELPFMT, szViewHelpFmt, BIGRCBUF);
LoadString (hInst, IDS_ACTIVATEFMT, szActivateFmt, BIGRCBUF);
LoadString (hInst, IDS_RENDERING, szRendering, BIGRCBUF);
LoadString (hInst, IDS_DEFFORMAT, szDefaultFormat, BIGRCBUF);
LoadString (hInst, IDS_GETTINGDATA, szGettingData, BIGRCBUF);
LoadString (hInst, IDS_ESTABLISHING, szEstablishingConn, BIGRCBUF);
LoadString (hInst, IDS_CLIPBOOKONFMT, szClipBookOnFmt, BIGRCBUF);
LoadString (hInst, IDS_PAGEFMT, szPageFmt, SMLRCBUF);
LoadString (hInst, IDS_PAGEFMTPL, szPageFmtPl, SMLRCBUF);
LoadString (hInst, IDS_PAGEOFPAGEFMT, szPageOfPageFmt, SMLRCBUF);
LoadString (hInst, IDS_DELETE, szDelete, SMLRCBUF);
LoadString (hInst, IDS_DELETECONFIRMFMT, szDeleteConfirmFmt, SMLRCBUF);
LoadString (hInst, IDS_FILEFILTER, szFileFilter, BIGRCBUF);
}
VOID SaveWindowPlacement (
PWINDOWPLACEMENT pwp )
{
WINDOWPLACEMENT wp;
int dir_num = 0;
HWND hwnd;
// save main window placement
if (hkeyRoot != NULL)
{
pwp->length = sizeof(WINDOWPLACEMENT);
lstrcat(lstrcpy(szBuf2, szWindows), szAppName);
RegSetValueEx(hkeyRoot,
szBuf2,
0L,
REG_BINARY,
(LPBYTE)pwp,
sizeof(WINDOWPLACEMENT));
// write out dir window strings in reverse order
// so that when we read them back in we get the same Z order
wp.length = sizeof (WINDOWPLACEMENT);
wp.flags = 0;
for (hwnd = GetWindow(hwndMDIClient, GW_CHILD); hwnd;
hwnd = GetWindow(hwnd, GW_HWNDNEXT))
{
// don't save MDI icon title windows or search windows,
// or any dir window which is currently recursing
if (GetWindow(hwnd, GW_OWNER) == NULL &&
GetWindowPlacement(hwnd, &wp) )
{
wp.length = sizeof(WINDOWPLACEMENT);
wp.flags = (wp.showCmd == SW_SHOWMINIMIZED)
? WPF_SETMINPOSITION : 0;
if (GETMDIINFO(hwnd))
lstrcat(lstrcpy(szBuf2, szWindows), GETMDIINFO(hwnd)->szBaseName);
RegSetValueEx(hkeyRoot,
szBuf2,
0L,
REG_BINARY,
(LPBYTE)&wp,
sizeof(wp));
}
}
}
}
BOOL ReadWindowPlacement(
LPTSTR szKey,
PWINDOWPLACEMENT pwp)
{
// AnsiToOem ( szKey, szBuf2 );
if (hkeyRoot != NULL)
{
DWORD dwBufSize = sizeof(WINDOWPLACEMENT);
lstrcat(lstrcpy(szBuf2, szWindows), szKey);
RegQueryValueEx(hkeyRoot, szBuf2, NULL, NULL, (LPBYTE)pwp, &dwBufSize);
if (pwp->length == sizeof(WINDOWPLACEMENT))
{
return TRUE;
}
else
{
PINFO(TEXT("ReadWindowPlacement: QueryValue failed\n\r"));
}
return FALSE;
}
PINFO(TEXT("ReadWindowPlacement: no entry\n\r"));
return FALSE;
}
BOOL CreateTools(
HWND hwnd)
{
HDC hdc;
TEXTMETRIC tm;
int dyBorder;
int cx,cy;
HFONT hTmpFont;
SIZE size;
if ( !(hbrBackground = CreateSolidBrush ( GetSysColor(COLOR_WINDOW) )))
return FALSE;
if ( !(hbmStatus = CreateMappedBitmap(hInst, IDSTATUS, FALSE, NULL, 0)))
return FALSE;
// create toolbar and status bar windows
// has all buttons initially...
if ( !(hwndToolbar = CreateToolbarEx (hwnd,
(fToolBar?WS_VISIBLE:0)|WS_BORDER|TBSTYLE_TOOLTIPS,
IDC_TOOLBAR,
11,
hInst,
IDBITMAP,
tbButtons,
sizeof(tbButtons)/sizeof(TBBUTTON),
0,0,0,0,sizeof(TBBUTTON))))
return FALSE;
// get rid of share buttons?
if (!fShareEnabled)
{
SendMessage (hwndToolbar, TB_DELETEBUTTON, 3, 0L);
SendMessage (hwndToolbar, TB_DELETEBUTTON, 3, 0L);
SendMessage (hwndToolbar, TB_DELETEBUTTON, 3, 0L);
}
// get rid of connect/disonnect buttons?
if (!fNetDDEActive)
{
SendMessage (hwndToolbar, TB_DELETEBUTTON, 0, 0L);
SendMessage (hwndToolbar, TB_DELETEBUTTON, 0, 0L);
SendMessage (hwndToolbar, TB_DELETEBUTTON, 0, 0L);
}
if ( fToolBar )
ShowWindow ( hwndToolbar, SW_SHOW );
// create status bar
if ( !(hwndStatus = CreateStatusWindow ((fStatus?WS_VISIBLE:0)|WS_BORDER|WS_CHILD|WS_CLIPSIBLINGS,
szNull,
hwnd,
IDSTATUS )))
return FALSE;
// now build the parameters based on the font we will be using
dyBorder = GetSystemMetrics(SM_CYBORDER);
cx = GetSystemMetrics (SM_CXVSCROLL);
cy = GetSystemMetrics (SM_CYHSCROLL);
if ( hdc= GetDC(NULL) )
{
CHARSETINFO csi;
DWORD dw = GetACP();
LOGFONT lfDef;
GetObject( GetStockObject(DEFAULT_GUI_FONT), sizeof(LOGFONT), &lfDef );
if (!TranslateCharsetInfo((DWORD*)(DWORD_PTR)dw, &csi, TCI_SRCCODEPAGE))
csi.ciCharset = ANSI_CHARSET;
hPreviewBmp = CreateBitmap ( 64, 64, 1, 1, NULL );
hBtnDC = CreateCompatibleDC ( hdc );
hPgUpBmp = LoadBitmap ( hInst, MAKEINTRESOURCE(IBM_UPARROW) );
hPgDnBmp = LoadBitmap ( hInst, MAKEINTRESOURCE(IBM_DNARROW) );
hPgUpDBmp = LoadBitmap ( hInst, MAKEINTRESOURCE(IBM_UPARROWD) );
hPgDnDBmp = LoadBitmap ( hInst, MAKEINTRESOURCE(IBM_DNARROWD) );
hFontPreview = CreateFont (lfDef.lfHeight,
0,
0,
0,
400,
0,
0,
0,
csi.ciCharset,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
VARIABLE_PITCH | FF_SWISS,
szHelv);
hOldFont = SelectObject(hdc, hFontPreview);
GetTextMetrics(hdc, &tm);
dyPrevFont = tm.tmHeight + tm.tmExternalLeading;
if (hOldFont)
SelectObject(hdc, hOldFont);
// figure out where to put the first status bar splitpoint
SendMessage ( hwndStatus, SB_GETBORDERS, 0, (LPARAM)(LPBYTE)&SBorders );
if ( hTmpFont = (HFONT)SendMessage(hwndStatus, WM_GETFONT, 0, 0L ))
{
if ( hOldFont = SelectObject ( hdc, hTmpFont ))
{
wsprintf ( szBuf, szPageOfPageFmt, 888, 888 );
GetTextExtentPoint(hdc, szBuf, lstrlen(szBuf),&size);
SSplit[0] = size.cx + 2 * GetSystemMetrics(SM_CXBORDER)
+ 2 * SBorders[0];
if ( hOldFont )
SelectObject( hdc, hOldFont );
}
}
ReleaseDC(NULL, hdc);
if ( !hTmpFont || !hPgUpBmp || !hPgDnBmp || !hPgUpDBmp ||
!hFontPreview || !hPreviewBmp || !hBtnDC )
return FALSE;
}
else
return FALSE;
//second split point is fixed for now.
SendMessage ( hwndStatus, SB_SETPARTS, 2, (LPARAM)(LPBYTE)&SSplit );
return TRUE;
}
VOID DeleteTools (
HWND hwnd)
{
DeleteDC ( hBtnDC );
DeleteObject ( hPreviewBmp );
DeleteObject ( hbmStatus );
DeleteObject ( hFontPreview );
DeleteObject ( hbrBackground );
DeleteObject ( hPgUpBmp );
DeleteObject ( hPgDnBmp );
DeleteObject ( hPgUpDBmp );
DeleteObject ( hPgDnDBmp );
DestroyWindow(hwndToolbar);
DestroyWindow(hwndStatus);
}