Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

508 lines
12 KiB

/****************************** Module Header ******************************\
* Module Name: winbez.c
*
* Copyright (c) 1991, Microsoft Corporation
*
* Window Bezier Demo
*
* History:
* 05-20-91 PaulB Created.
\***************************************************************************/
#include "headtest.h"
//#include "headapp.h"
#include "headdlg.h"
#include "headins.h"
//#include "headget.h"
#include "headdel.h"
#include "headlay.h"
void HandleTheCommand(HWND hWnd, UINT message, UINT wParam, LONG lParam);
const char g_szStubAppClass[] = "StubAppClass";
HINSTANCE g_hinst = NULL;
char const g_szTabControlClass[] = WC_TABCONTROL;
char const g_szHeadControlClass[] = WC_HEADER;
#define WID_TABS 1
HWND hwndTab = NULL;
BOOL MsgTrackOn = FALSE;
HBITMAP hBitMap1 = NULL;
HBITMAP hBitMap2 = NULL;
HINSTANCE hShellLib;
char szDbgMsg[MAX_PSZTEXT];
/*
* Forward declarations.
*/
BOOL InitializeApp(void);
LONG CALLBACK App_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LONG CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void InitGlobals(void);
//--------------------------------------------------------------------------
UINT wDebugMask = 0x00ff;
void __cdecl MyDebugMsg(UINT mask, LPCSTR pszMsg, ...)
{
char ach[256];
// if (wDebugMask & mask)
// {
wvsprintf(ach, pszMsg, ((LPCSTR FAR*)&pszMsg + 1));
OutputDebugString(ach);
OutputDebugString("\r\n");
// }
}
/***************************************************************************\
* winmain
*
*
* History:
* 07-07-93 SatoNa Created.
\***************************************************************************/
extern int WINAPI StrNCmp(LPSTR, LPSTR, int);
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
MSG msg;
int ret=0;
// GetModuleHandle(NULL);
g_hinst = hInstance;
MyDebugMsg(DM_TRACE, "WinMain: App started (%x)", g_hinst);
StrNCmp("hello", "bar",3);
#ifndef WIN32
if (!Shell_Initialize())
return 1;
#endif
if (InitializeApp())
{
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
ret=1;
}
#ifndef WIN32
Shell_Terminate();
#endif
return 0;
// return (msg.wParam);
}
/***************************************************************************\
* InitializeApp
*
* History:
* 07-07-93 SatoNa Created.
\***************************************************************************/
BOOL InitializeApp(void)
{
WNDCLASS wc;
HWND hwndMain;
wc.style = CS_OWNDC | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW;
wc.lpfnWndProc = App_WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = g_hinst;
wc.hIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_ICON1));;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)COLOR_APPWORKSPACE;
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wc.lpszClassName = g_szStubAppClass;
InitGlobals();
hBitMap1 = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_BITMAP1));
hBitMap2 = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_BITMAP2));
if (!RegisterClass(&wc))
{
MyDebugMsg(DM_TRACE, "%s: Can't register class (%x)",
wc.lpszClassName, g_hinst);
return FALSE;
}
hwndMain = CreateWindowEx(0L, g_szStubAppClass, "Header Control" WC_SUFFIX32,
WS_OVERLAPPED | WS_CAPTION | WS_BORDER | WS_THICKFRAME |
WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_CLIPCHILDREN |
WS_VISIBLE | WS_SYSMENU,
80, 70, 400, 300,
NULL, NULL, g_hinst, NULL);
if (hwndMain == NULL)
return FALSE;
ShowWindow(hwndMain, SW_SHOWNORMAL) ;
UpdateWindow(hwndMain);
SetFocus(hwndMain); /* set initial focus */
return TRUE;
}
void App_OnPaint(HWND hwnd)
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hwnd, &ps);
EndPaint(hwnd, &ps);
}
void App_OnCreate(HWND hwnd, LPCREATESTRUCT lpc)
{
RECT rcClient;
/****** TC_ITEM ti = {
TCIF_ALL, // mask
0, // state
0, // stateMask
NULL, // pszText,
0, // cchTextMax
0, // iImage
0 // lParam
}; *******/
HD_ITEM hi = {
HDI_WIDTH|HDI_TEXT| HDI_FORMAT|HDI_LPARAM|HDI_BITMAP,
100,
NULL,
NULL,
128,
HDF_CENTER|HDF_BITMAP,
0
};
HBITMAP hbmp;
int ret;
int aZigzag[] = { 0xFF, 0xF7, 0xEB, 0xDD, 0xBE, 0x7F, 0xFF, 0xFF };
HIMAGELIST himl = ImageList_Create(48,48,
ILC_COLOR|ILC_COLOR16, 2,1);
hbmp = CreateBitmap(8, 8, 1, 1, aZigzag);
// DeleteObject(hbmp);
#ifdef WIN32
// hShellLib = LoadLibrary("COMCTRL32.DLL");
if ((UINT)hShellLib > 32)
MyDebugMsg(DM_TRACE, "Load Library is successful");
else
MyDebugMsg(DM_TRACE, "Could not load lib ");
#endif
GetClientRect(hwnd, &rcClient);
hwndTab=CreateWindowEx(0L, g_szHeadControlClass, NULL, //"Header Control Test " WC_SUFFIX32,
WS_CHILD | HDS_HORZ | HDS_BUTTONS | HDS_DIVIDERTRACK |WS_VISIBLE,
0, 0, 100, 100,
hwnd, (HMENU) 0, g_hinst, NULL);
if (!hwndTab) {
sprintf(szTemp, "Couldnt create HeaderWindow %s", g_szHeadControlClass);
MessageBox(hwnd, szTemp, "CreateWindowEx", MB_OK | MB_ICONSTOP);
return (FALSE);
}
// ShowWindow(hwnd, SW_SHOWNORMAL) ;
// UpdateWindow(hWnd);
hi.hbm = hbmp;
hi.pszText="One";
Header_InsertItem(hwndTab, 1, &hi);
hi.hbm = NULL; //hBitMap1;
hi.iImage = ImageList_Add(himl,hBitMap1,NULL);
hi.mask &= ~(HDI_TEXT);
hi.pszText="Two";
Header_InsertItem(hwndTab, 2, &hi);
hi.hbm = NULL; //hBitMap2;
hi.iImage = ImageList_Add(himl,hBitMap2,NULL);
hi.pszText = "Three";
hi.mask |= HDI_TEXT;
Header_InsertItem(hwndTab, 3, &hi);
ret = Header_GetItemCount(hwndTab);
sii.hwnd = hwndTab;
wsprintf(szTemp, "Item count: %d", ret);
// MessageBox(hwnd, szTemp, "Header_GetItemCount", MB_OK);
}
void App_OnSize(HWND hwnd, UINT cx, UINT cy)
{
/* HWND hwndTab=GetDlgItem(hwnd, WID_TABS); */
char buf[100];
HGLOBAL hglb;
HD_LAYOUT FAR *playout;
HD_ITEM hi = {
HDI_WIDTH|HDI_TEXT| HDI_FORMAT|HDI_LPARAM|HDI_BITMAP,
10,
NULL,
NULL,
128,
HDF_CENTER,
0
};
if (hwndTab)
{
SetWindowPos(hwndTab, NULL, 0, 0, cx, cy, SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
/***
hi.mask = HDI_WIDTH;
hi.cxy = cx/3;
hi.hbm = NULL;
Header_SetItem(hwndTab, 1, &hi);
Header_SetItem(hwndTab, 2, &hi);
Header_SetItem(hwndTab, 3, &hi);
sprintf(buf, "There are %d items", Header_GetItemCount(hwndTab));
MessageBox(hwndTab, buf,
"ITEM COUNT", MB_OK);
hglb = GlobalAlloc(GPTR, sizeof(HD_LAYOUT));
playout = GlobalLock(hglb);
// Header_Layout(hwndTab, playout);
// sprintf(buf, "x = %d\t y = %d\n cx = %d\t cy = %d",
// playout->pwpos->x, playout->pwpos->y, playout->pwpos->cx, playout->pwpos->cy);
MessageBox(hwndTab, buf, "ITEM INFO", MB_OK);
GlobalUnlock(hglb);
GlobalFree(hglb);
**/
}
}
static void
App_OnPress(HWND hwnd, HD_NOTIFY FAR *NotifyStruct, int HDNMsg)
{
char MsgBuf[100];
sprintf(MsgBuf, "Button %d involved in notification: ", NotifyStruct->iItem);
switch (NotifyStruct->hdr.code) {
case HDN_ITEMCHANGING:
case HDN_ITEMCHANGED:
strcat(MsgBuf, "HDN_ITEMCHANGING");
break;
case HDN_ITEMCLICK:
strcat(MsgBuf, "HDN_ITEMCLICK");
sprintf(szTemp, " MButton = %d ", NotifyStruct->iButton);
strcat(MsgBuf, szTemp);
break;
case HDN_ITEMDBLCLICK:
strcat(MsgBuf, "HDN_ITEMDBLCLICK");
sprintf(szTemp, " MButton = %d ", NotifyStruct->iButton);
strcat(MsgBuf, szTemp);
break;
case HDN_DIVIDERDBLCLICK:
strcat(MsgBuf, "HDN_DIVIDERDBLCLICK");
sprintf(szTemp, " MButton = %d ", NotifyStruct->iButton);
strcat(MsgBuf, szTemp);
break;
case HDN_BEGINTRACK:
strcat(MsgBuf, "HDN_BEGINTRACK");
break;
case HDN_ENDTRACK:
strcat(MsgBuf, "HDN_ENDTRACK");
break;
}
MyDebugMsg(DM_TRACE, "%s", (LPCSTR) MsgBuf);
// MessageBox(hwnd, MsgBuf, "Info", MB_OK);
return;
}
//--------------------------------------------------------------------------
// App_WndProc
//
// History:
// 07-07-93 Satona Created
//--------------------------------------------------------------------------
LONG CALLBACK App_WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
App_OnCreate(hwnd, (LPCREATESTRUCT)lParam);
break; // should return 0.
case WM_COMMAND:
HandleTheCommand(hwnd, message, wParam, lParam);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_PAINT:
App_OnPaint(hwnd);
break;
case WM_NOTIFY:
if (MsgTrackOn)
App_OnPress(hwnd, (HD_NOTIFY FAR *)lParam, wParam);
break;
case WM_SIZE:
App_OnSize(hwnd, LOWORD(lParam), HIWORD(lParam));
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0L;
}
void InitGlobals(void)
{
/* not really too much to do here. Create a hex wsprintf() filter since
the app starts off in Hex mode. */
lstrcpy(szShortFilter, "%x") ;
lstrcpy(szLongFilter, "%lx") ;
hInst = g_hinst;
}
void HandleTheCommand(HWND hWnd, UINT message, UINT wParam, LONG lParam)
{
switch (LOWORD(wParam))
{
case IDM_GETITEMCOUNT: //For any of the dialog creation
DoGetItemCountDialog(hWnd) ; //commands, call the appropriate
break ; //function. The function will
//create the dialog...
case IDM_INSERTITEM:
DoInsertItemDialog(hWnd, wParam);
break;
case IDM_GETITEM:
DoInsertItemDialog(hWnd, wParam);
break;
case IDM_SETITEM:
DoInsertItemDialog(hWnd, wParam);
break;
case IDM_DELETEITEM:
DoDeleteItemDialog(hWnd);
break;
case IDM_LAYOUT:
DoLayoutDialog(hWnd);
break;
case IDM_EXIT:
PostQuitMessage(0) ;
break ;
case IDM_TRACKON:
MsgTrackOn = TRUE;
break;
case IDM_TRACKOFF:
MsgTrackOn = FALSE;
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
break ;
}
return ;
}
LONG MyAtol(LPSTR szString, BOOL bHex,/*was LPBOOL*/ BOOL bSuccess)
{
LPSTR p ;
LONG l ;
LONG lMultiplier ;
BOOL bDigit ;
if (bHex)
lMultiplier = 16 ;
else
lMultiplier = 10 ;
p = szString ;
l = 0 ;
while (*p) //while chars
{
bDigit = FALSE ; //set to false for each char that we look at
if (*p >= (char) '0' && *p <= (char) '9') //is it an ascii char ?
{
bDigit = TRUE ;
l+=(*p - (char) '0') ;
}
if (bHex)
{
if (*p >= (char) 'A' && *p <= (char) 'F') //or hex?
{
l+=(*p - (char) 'A' + 10) ;
bDigit = TRUE ;
}
if (*p >= (char) 'a' && *p <= (char) 'f')
{
l+=(*p - (char) 'a' + 10) ;
bDigit = TRUE ;
}
}
if (bDigit == FALSE)
{
bSuccess = FALSE ;
return 0 ;
}
p++ ; //get next char
if (*p) //if there is going to be at least one more char
l*=lMultiplier ; //then multiply what we have by the multiplier...
}
bSuccess = TRUE ;
return l ; //success! return the value.
}