;************************************************************************* ; ; WIN32.INC - Win32 assembly language structures & constants ; ; ;************************************************************************* ; ; NOTE: this file only implements the structures and constants that ; wap32.asm uses. You may extend it for your own applications. ; ;************************************************************************* ; ; ; C/C++ Run Time Library - Version 6.0 ; ; Copyright (c) 1985, 1993 by Borland International ; All Rights Reserved. ; UCHAR EQU USHORT EQU ; used only if we really need 16 bits UINT EQU
; 32 bits for WIN32 ULONG EQU
;******************************************************************* ; ; Window's externals ; ;******************************************************************* extrn BeginPaint:PROC extrn BeginPath:PROC extrn BitBlt:PROC extrn CloseHandle:PROC extrn CreateCompatibleBitmap:PROC extrn CreateCompatibleDC:PROC extrn CreatePen:PROC extrn CreateSolidBrush:PROC extrn CreateWindowExA:PROC extrn CreateFileA:PROC extrn DefWindowProcA:PROC extrn DeleteDC:PROC extrn DeleteObject:PROC extrn DialogBoxParamA:PROC extrn DispatchMessageA:PROC extrn CreateEllipticRgn:PROC extrn Ellipse:PROC extrn EndDialog:PROC extrn EndDoc:PROC extrn EndPaint:PROC extrn EndPage:PROC extrn EndPath:PROC extrn EnableWindow:PROC extrn ExitProcess:PROC extrn FillRect:PROC extrn FindWindowA:PROC extrn GetCurrentProcess:PROC extrn GetDC:PROC extrn GetDlgItem:PROC extrn GetDlgItemTextA:PROC extrn GetLastError:PROC extrn GetLocalTime:PROC extrn GetMessageA:PROC extrn GetClientRect:PROC extrn GetFileSize:PROC extrn GetModuleHandleA:PROC extrn GetOpenFileNameA:PROC extrn GetSaveFileNameA:PROC extrn GetStockObject:PROC extrn GetSysColor:PROC extrn GetSystemMetrics:PROC extrn GetTextMetricsA:PROC extrn GetTickCount:PROC extrn GetVolumeInformationA:PROC extrn GetWindowTextA:PROC extrn GetWindowRect:PROC extrn GlobalAlloc:PROC extrn GlobalFree:PROC extrn GlobalLock:PROC extrn InitCommonControls:PROC extrn InvalidateRect:PROC extrn RegOpenKeyExA:PROC extrn KillTimer:PROC extrn LineTo:PROC extrn LoadAcceleratorsA:PROC extrn LoadCursorA:PROC extrn LoadIconA:PROC extrn LoadMenuA:PROC extrn LoadStringA:PROC extrn MessageBeep:PROC extrn MessageBoxA:PROC extrn MoveToEx:PROC extrn MoveWindow:PROC extrn OpenFile:PROC extrn PostQuitMessage:PROC extrn PrintDlgA:PROC extrn ReadFile:PROC extrn Rectangle:PROC extrn RegisterClassA:PROC extrn RegOpenKeyA:PROC extrn RegQueryValueA:PROC extrn RegQueryValueExA:PROC extrn ReleaseDC:PROC extrn SendDlgItemMessageA:PROC extrn SendMessageA:PROC extrn SelectObject:PROC extrn SelectClipPath:PROC extrn SetBkMode:PROC extrn SetDlgItemTextA:PROC extrn SetFilePointer:PROC extrn SetFocus:PROC extrn SetSysColors:PROC extrn SetTextColor:PROC extrn SetTimer:PROC extrn SetWindowPos:PROC extrn SetWindowTextA:PROC extrn Sleep:PROC extrn ShowWindow:PROC extrn StartDocA:PROC extrn StartPage:PROC extrn TextOutA:PROC extrn TranslateAcceleratorA:PROC extrn TranslateMessage:PROC extrn UpdateWindow:PROC extrn WinHelpA:PROC extrn WriteFile:PROC extrn wvsprintfA:PROC ;extrn LoadStringA:PROC CreateFile equ CreateWindowEx equ DefWindowProc equ DialogBoxParam equ DispatchMessage equ FindWindow equ GetDlgItemText equ GetMessage equ GetModuleHandle equ GetOpenFileName equ GetSaveFileName equ GetTextMetrics equ LoadAccelerators equ LoadCursor equ LoadIcon equ LoadMenu equ LoadString equ MessageBox equ PrintDlg equ RegisterClass equ SendMessage equ StartDoc equ TextOut equ TranslateAccelerator equ WinHelp equ ; ; Commands to pass to WinHelp() ; HELP_CONTEXT = 0001h HELP_QUIT = 0002h HELP_INDEX = 0003h HELP_CONTENTS = 0003h HELP_HELPONHELP = 0004h HELP_SETINDEX = 0005h HELP_SETCONTENTS = 0005h HELP_CONTEXTPOPUP = 0008h HELP_FORCEFILE = 0009h HELP_KEY = 0101h HELP_COMMAND = 0102h HELP_PARTIALKEY = 0105h HELP_MULTIKEY = 0201h HELP_SETWINPOS = 0203h HELP_CONTEXTMENU = 000ah HELP_FINDER = 000bh HELP_WM_HELP = 000ch HELP_SETPOPUP_POS = 000dh HELP_TCARD = 8000h HELP_TCARD_DATA = 0010h HELP_TCARD_OTHER_CALLER = 0011h IDH_NO_HELP = 28440 IDH_MISSING_CONTEXT = 28441 IDH_GENERIC_HELP_BUTTON = 28442 IDH_OK = 28443 IDH_CANCEL = 28444 IDH_HELP = 28445 ; ========================= ; ternary raster operations ; ========================= ; SRCCOPY equ 00CC0020h ;dest = src SRCPAINT equ 00EE0086h ;dest = src or dest SRCAND equ 008800C6h ;dest = src and dest SRCINVERT equ 00660046h ;dest = src xor dest SRCERASE equ 00440328h ;dest = src and -dest NOTSRCCOPY equ 00330008h ;dest = -src NOTSRCERASE equ 001100A6h ;dest = -src and -dest MERGECOPY equ 00C000CAh ;dest = src and pat MERGEPAINT equ 00BB0226h ;dest = -src or dest PATCOPY equ 00F00021h ;dest = pat PATPAINT equ 00FB0A09h ;dest = DPSnoo PATINVERT equ 005A0049h ;dest = pat xor dest DSTINVERT equ 00550009h ;dest = -dest BLACKNESS equ 00000042h ;dest = black WHITENESS equ 00FF0062h ;dest = white GMEM_FIXED equ 0h GMEM_MOVEABLE equ 2h GMEM_NOCOMPACT equ 10h GMEM_NODISCARD equ 20h GMEM_ZEROINIT equ 40h GMEM_MODIFY equ 80h GMEM_DISCARDABLE equ 100h GMEM_NOT_BANKED equ 1000h GMEM_SHARE equ 2000h GMEM_DDESHARE equ 2000h GMEM_NOTIFY equ 4000h GMEM_LOWER equ GMEM_NOT_BANKED GMEM_VALID_FLAGS equ 7F72h GMEM_INVALID_HANDLE equ 8000h GMEM_DISCARDED equ 4000h GMEM_LOCKCOUNT equ 0FFh GHND equ GMEM_MOVEABLE OR GMEM_ZEROINIT GPTR equ GMEM_FIXED OR GMEM_ZEROINIT POINT struct x DWORD 0 ;x coordinate y DWORD 0 ;y coordinate POINT ends CHARFORMAT STRUCT cbSize DWORD ? dwMask DWORD ? dwEffects DWORD ? yHeight DWORD ? yOffset DWORD ? crTextColor DWORD ? bCharSet BYTE ? bPitchAndFamily BYTE ? szFaceName BYTE ? CHARFORMAT ENDS CREATE_NEW equ 1 CREATE_ALWAYS equ 2 OPEN_EXISTING equ 3 OPEN_ALWAYS equ 4 ;******************************************************************* ; ; OFSTRUCT ; ;******************************************************************* OF_READ = 00000000h OF_WRITE = 00000001h OF_READWRITE = 00000002h OF_SHARE_COMPAT = 00000000h OF_SHARE_EXCLUSIVE = 00000010h OF_SHARE_DENY_WRITE = 00000020h OF_SHARE_DENY_READ = 00000030h OF_SHARE_DENY_NONE = 00000040h OF_PARSE = 00000100h OF_DELETE = 00000200h OF_VERIFY = 00000400h OF_CANCEL = 00000800h OF_CREATE = 00001000h OF_PROMPT = 00002000h OF_EXIST = 00004000h OF_REOPEN = 00008000h OFS_MAXPATHNAME = 128 OFSTRUCT struc cBytes UCHAR ? fFixedDisk UCHAR ? nErrCode USHORT ? Reserved1 USHORT ? Reserved2 USHORT ? szPathName db OFS_MAXPATHNAME dup(?) OFSTRUCT ends WSADESCRIPTION_LEN equ 256 WSASYS_STATUS_LEN equ 128 IPPROTO_IP equ 0 IPPROTO_ICMP equ 1 IPPROTO_GGP equ 2 IPPROTO_TCP equ 6 IPPROTO_PUP equ 12 IPPROTO_UDP equ 17 IPPROTO_IDP equ 22 IPPROTO_ND equ 77 IPPROTO_RAW equ 255 IPPROTO_MAX equ 256 IOCPARM_MASK equ 7Fh IOC_VOID equ 20000000h IOC_OUT equ 40000000h IOC_IN equ 80000000h IOC_INOUT equ IOC_IN OR IOC_OUT FIONBIO equ 8004667Eh FIONSYNC equ 8004667Dh FIONREAD equ 4004667Fh IPPORT_ECHO equ 7 IPPORT_DISCARD equ 9 IPPORT_SYSTAT equ 11 IPPORT_DAYTIME equ 13 IPPORT_NETSTAT equ 15 IPPORT_FTP equ 21 IPPORT_TELNET equ 23 IPPORT_SMTP equ 25 IPPORT_TIMESERVER equ 37 IPPORT_NAMESERVER equ 42 IPPORT_WHOIS equ 43 IPPORT_MTP equ 57 IPPORT_TFTP equ 69 IPPORT_RJE equ 77 IPPORT_FINGER equ 79 IPPORT_TTYLINK equ 87 IPPORT_SUPDUP equ 95 IPPORT_EXECSERVER equ 512 IPPORT_LOGINSERVER equ 513 IPPORT_CMDSERVER equ 514 IPPORT_EFSSERVER equ 520 IPPORT_BIFFUDP equ 512 IPPORT_WHOSERVER equ 513 IPPORT_ROUTESERVER equ 520 IPPORT_RESERVED equ 1024 IMPLINK_IP equ 155 IMPLINK_LOWEXPER equ 156 IMPLINK_HIGHEXPER equ 158 IN_CLASSA_NET equ 0FF000000h IN_CLASSA_NSHIFT equ 24 IN_CLASSA_HOST equ 000FFFFFFh IN_CLASSA_MAX equ 128 IN_CLASSB_NET equ 0FFFF0000h IN_CLASSB_NSHIFT equ 16 IN_CLASSB_HOST equ 00000FFFFh IN_CLASSB_MAX equ 65536 IN_CLASSC_NET equ 0FFFFFF00h IN_CLASSC_NSHIFT equ 8 IN_CLASSC_HOST equ 0000000FFh INADDR_ANY equ 000000000h INADDR_LOOPBACK equ 07F000001h INADDR_BROADCAST equ 0FFFFFFFFh INADDR_NONE equ 0FFFFFFFFh SOCK_STREAM equ 1 SOCK_DGRAM equ 2 SOCK_RAW equ 3 SOCK_RDM equ 4 SOCK_SEQPACKET equ 5 SO_DEBUG equ 00001h SO_ACCEPTCONN equ 00002h SO_REUSEADDR equ 00004h SO_KEEPALIVE equ 00008h SO_DONTROUTE equ 00010h SO_BROADCAST equ 00020h SO_USELOOPBACK equ 00040h SO_LINGER equ 00080h SO_OOBINLINE equ 00100h SOL_SOCKET equ 0FFFFh SO_DONTLINGER equ NOT SO_LINGER SO_SNDBUF equ 01001h SO_RCVBUF equ 01002h SO_SNDLOWAT equ 01003h SO_RCVLOWAT equ 01004h SO_SNDTIMEO equ 01005h SO_RCVTIMEO equ 01006h SO_ERROR equ 01007h SO_TYPE equ 01008h TCP_NODELAY equ 00001h AF_UNSPEC equ 0 AF_UNIX equ 1 AF_INET equ 2 AF_IMPLINK equ 3 AF_PUP equ 4 AF_CHAOS equ 5 AF_NS equ 6 AF_IPX equ 6 AF_ISO equ 7 AF_OSI equ AF_ISO AF_ECMA equ 8 AF_DATAKIT equ 9 AF_CCITT equ 10 AF_SNA equ 11 AF_DECnet equ 12 AF_DLI equ 13 AF_LAT equ 14 AF_HYLINK equ 15 AF_APPLETALK equ 16 AF_NETBIOS equ 17 AF_MAX equ 18 PF_UNSPEC equ AF_UNSPEC PF_UNIX equ AF_UNIX PF_INET equ AF_INET PF_IMPLINK equ AF_IMPLINK PF_PUP equ AF_PUP PF_CHAOS equ AF_CHAOS PF_NS equ AF_NS PF_IPX equ AF_IPX PF_ISO equ AF_ISO PF_OSI equ AF_OSI PF_ECMA equ AF_ECMA PF_DATAKIT equ AF_DATAKIT PF_CCITT equ AF_CCITT PF_SNA equ AF_SNA PF_DECnet equ AF_DECnet PF_DLI equ AF_DLI PF_LAT equ AF_LAT PF_HYLINK equ AF_HYLINK PF_APPLETALK equ AF_APPLETALK PF_MAX equ AF_MAX SOMAXCONN equ 5 MSG_OOB equ 01h MSG_PEEK equ 02h MSG_DONTROUTE equ 04h MSG_MAXIOVLEN equ 16 MAXGETHOSTSTRUCT equ 1024 FD_READ equ 001h FD_WRITE equ 002h FD_OOB equ 004h FD_ACCEPT equ 008h FD_CONNECT equ 010h FD_CLOSE equ 020h WSABASEERR equ 10000 WSAEINTR equ WSABASEERR+4 WSAEBADF equ WSABASEERR+9 WSAEACCES equ WSABASEERR+13 WSAEFAULT equ WSABASEERR+14 WSAEINVAL equ WSABASEERR+22 WSAEMFILE equ WSABASEERR+24 WSAEWOULDBLOCK equ WSABASEERR + 35 WSAEINPROGRESS equ WSABASEERR + 36 WSAEALREADY equ WSABASEERR + 37 WSAENOTSOCK equ WSABASEERR + 38 WSAEDESTADDRREQ equ WSABASEERR + 39 WSAEMSGSIZE equ WSABASEERR + 40 WSAEPROTOTYPE equ WSABASEERR + 41 WSAENOPROTOOPT equ WSABASEERR + 42 WSAEPROTONOSUPPORT equ WSABASEERR + 43 WSAESOCKTNOSUPPORT equ WSABASEERR + 44 WSAEOPNOTSUPP equ WSABASEERR + 45 WSAEPFNOSUPPORT equ WSABASEERR + 46 WSAEAFNOSUPPORT equ WSABASEERR + 47 WSAEADDRINUSE equ WSABASEERR + 48 WSAEADDRNOTAVAIL equ WSABASEERR + 49 WSAENETDOWN equ WSABASEERR + 50 WSAENETUNREACH equ WSABASEERR + 51 WSAENETRESET equ WSABASEERR + 52 WSAECONNABORTED equ WSABASEERR + 53 WSAECONNRESET equ WSABASEERR + 54 WSAENOBUFS equ WSABASEERR + 55 WSAEISCONN equ WSABASEERR + 56 WSAENOTCONN equ WSABASEERR + 57 WSAESHUTDOWN equ WSABASEERR + 58 WSAETOOMANYREFS equ WSABASEERR + 59 WSAETIMEDOUT equ WSABASEERR + 60 WSAECONNREFUSED equ WSABASEERR + 61 WSAELOOP equ WSABASEERR + 62 WSAENAMETOOLONG equ WSABASEERR + 63 WSAEHOSTDOWN equ WSABASEERR + 64 WSAEHOSTUNREACH equ WSABASEERR + 65 WSAENOTEMPTY equ WSABASEERR + 66 WSAEPROCLIM equ WSABASEERR + 67 WSAEUSERS equ WSABASEERR + 68 WSAEDQUOT equ WSABASEERR + 69 WSAESTALE equ WSABASEERR + 70 WSAEREMOTE equ WSABASEERR + 71 WSASYSNOTREADY equ WSABASEERR+91 WSAVERNOTSUPPORTED equ WSABASEERR+92 WSANOTINITIALISED equ WSABASEERR+93 WSAHOST_NOT_FOUND equ WSABASEERR + 1001 HOST_NOT_FOUND equ WSAHOST_NOT_FOUND WSATRY_AGAIN equ WSABASEERR + 1002 TRY_AGAIN equ WSATRY_AGAIN WSANO_RECOVERY equ WSABASEERR + 1003 NO_RECOVERY equ WSANO_RECOVERY WSANO_DATA equ WSABASEERR + 1004 NO_DATA equ WSANO_DATA WSANO_ADDRESS equ WSANO_DATA NO_ADDRESS equ WSANO_ADDRESS EWOULDBLOCK equ WSAEWOULDBLOCK EINPROGRESS equ WSAEINPROGRESS EALREADY equ WSAEALREADY ENOTSOCK equ WSAENOTSOCK EDESTADDRREQ equ WSAEDESTADDRREQ EMSGSIZE equ WSAEMSGSIZE EPROTOTYPE equ WSAEPROTOTYPE ENOPROTOOPT equ WSAENOPROTOOPT EPROTONOSUPPORT equ WSAEPROTONOSUPPORT ESOCKTNOSUPPORT equ WSAESOCKTNOSUPPORT EOPNOTSUPP equ WSAEOPNOTSUPP EPFNOSUPPORT equ WSAEPFNOSUPPORT EAFNOSUPPORT equ WSAEAFNOSUPPORT EADDRINUSE equ WSAEADDRINUSE EADDRNOTAVAIL equ WSAEADDRNOTAVAIL ENETDOWN equ WSAENETDOWN ENETUNREACH equ WSAENETUNREACH ENETRESET equ WSAENETRESET ECONNABORTED equ WSAECONNABORTED ECONNRESET equ WSAECONNRESET ENOBUFS equ WSAENOBUFS EISCONN equ WSAEISCONN ENOTCONN equ WSAENOTCONN ESHUTDOWN equ WSAESHUTDOWN ETOOMANYREFS equ WSAETOOMANYREFS ETIMEDOUT equ WSAETIMEDOUT ECONNREFUSED equ WSAECONNREFUSED ELOOP equ WSAELOOP ENAMETOOLONG equ WSAENAMETOOLONG EHOSTDOWN equ WSAEHOSTDOWN EHOSTUNREACH equ WSAEHOSTUNREACH ENOTEMPTY equ WSAENOTEMPTY EPROCLIM equ WSAEPROCLIM EUSERS equ WSAEUSERS EDQUOT equ WSAEDQUOT ESTALE equ WSAESTALE EREMOTE equ WSAEREMOTE FD_SETSIZE equ 64 INVALID_SOCKET equ NOT 0 SOCKET_ERROR equ -1 SOCKET_BUFFER_SIZE equ 512 ICMP_ECHOREPLY equ 0 ICMP_ECHOREQ equ 8 ; ------------------------ wsock32 structures ----------------------------- fd_setstruc STRUCT fd_count DWORD ? fd_array DWORD ? fd_setstruc ENDS timeval STRUCT tv_sec DWORD ? tv_usec DWORD ? timeval ENDS sockaddr_in STRUCT sin_family WORD ? sin_port WORD ? sin_addr DWORD ? sin_zero BYTE 8 dup (0) sockaddr_in ENDS sockaddr STRUCT sa_family WORD ? sa_data WORD ? sockaddr ENDS WSAdata STRUCT wVersion WORD ? wHighVersion WORD ? szDescription BYTE WSADESCRIPTION_LEN + 1 dup (?) szSystemStatus BYTE WSASYS_STATUS_LEN + 1 dup (?) iMaxSockets WORD ? iMaxUdpDg WORD ? lpVendorInfo DWORD ? WSAdata ENDS sockproto STRUCT sp_family WORD ? sp_protocol WORD ? sockproto ENDS linger STRUCT l_onoff WORD ? l_linger WORD ? linger ENDS hostentStru STRUCT h_name DWORD ? h_alias DWORD ? h_addr WORD ? h_len WORD ? h_list DWORD ? hostentStru ENDS netent STRUCT n_name DWORD ? n_aliases DWORD ? n_addrtype WORD ? n_net DWORD ? netent ENDS servent STRUCT s_name DWORD ? s_aliases DWORD ? s_port WORD ? s_proto DWORD ? servent ENDS icmp_hdr STRUCT icmp_type BYTE ? icmp_code BYTE ? icmp_cksum WORD ? icmp_id WORD ? icmp_seq WORD ? icmp_data BYTE ? icmp_hdr ENDS ip_hdr STRUCT ip_hlv BYTE ? ip_tos BYTE ? ip_len WORD ? ip_id WORD ? ip_off WORD ? ip_ttl BYTE ? ip_p BYTE ? ip_cksum WORD ? ip_src DWORD ? ip_dest DWORD ? ip_hdr ENDS ICMP_OPTIONS STRUCT Ttl BYTE ? Tos BYTE ? Flags BYTE ? OptionsSize BYTE ? OptionsData DWORD ? ICMP_OPTIONS ENDS ICMP_ECHO_REPLY STRUCT Address DWORD ? Status DWORD ? RoundTripTime DWORD ? DataSize WORD ? Reserved WORD ? DataPointer DWORD ? Options DWORD ? zData BYTE 250 dup (?) ICMP_ECHO_REPLY ENDS OFN_READONLY = 00000001h OFN_OVERWRITEPROMPT = 00000002h OFN_HIDEREADONLY = 00000004h OFN_NOCHANGEDIR = 00000008h OFN_SHOWHELP = 00000010h OFN_ENABLEHOOK = 00000020h OFN_ENABLETEMPLATE = 00000040h OFN_ENABLETEMPLATEHANDLE = 00000080h OFN_NOVALIDATE = 00000100h OFN_ALLOWMULTISELECT = 00000200h OFN_EXTENSIONDIFFERENT = 00000400h OFN_PATHMUSTEXIST = 00000800h OFN_FILEMUSTEXIST = 00001000h OFN_CREATEPROMPT = 00002000h OFN_SHAREAWARE = 00004000h OFN_NOREADONLYRETURN = 00008000h OFN_NOTESTFILECREATE = 00010000h OFN_NONETWORKBUTTON = 00020000h OFN_NOLONGNAMES = 00040000h OFN_EXPLORER = 00080000h OFN_NODEREFERENCELINKS = 00100000h OFN_LONGNAMES = 00200000h OFN_SHAREFALLTHROUGH = 2 OFN_SHARENOWARN = 1 OFN_SHAREWARN = 0 ; ================== ; combo box messages ; ================== ; CB_GETEDITSEL equ 0140h CB_LIMITTEXT equ 0141h CB_SETEDITSEL equ 0142h CB_ADDSTRING equ 0143h CB_DELETESTRING equ 0144h CB_DIR equ 0145h CB_GETCOUNT equ 0146h CB_GETCURSEL equ 0147h CB_GETLBTEXT equ 0148h CB_GETLBTEXTLEN equ 0149h CB_INSERTSTRING equ 014Ah CB_RESETCONTENT equ 014Bh CB_FINDSTRING equ 014Ch CB_SELECTSTRING equ 014Dh CB_SETCURSEL equ 014Eh CB_SHOWDROPDOWN equ 014Fh CB_GETITEMDATA equ 0150h CB_SETITEMDATA equ 0151h CB_GETDROPPEDCONTROLRECT equ 0152h CB_SETITEMHEIGHT equ 0153h CB_GETITEMHEIGHT equ 0154h CB_SETEXTENDEDUI equ 0155h CB_GETEXTENDEDUI equ 0156h CB_GETDROPPEDSTATE equ 0157h CB_FINDSTRINGEXACT equ 0158h CB_SETLOCALE equ 0159h CB_GETLOCALE equ 015Ah CB_GETTOPINDEX equ 015Bh CB_SETTOPINDEX equ 015Ch CB_GETHORIZONTALEXTENT equ 015Dh CB_SETHORIZONTALEXTENT equ 015Eh CB_GETDROPPEDWIDTH equ 015Fh CB_SETDROPPEDWIDTH equ 0160h CB_INITSTORAGE equ 0161h CB_MSGMAX equ 0162h ; ;------------------------------------------------------------------------------ ; ; ======================= ; combo box return values ; ======================= ; CB_OKAY equ 0 CB_ERR equ -1 CB_ERRSPACE equ -2 CBN_ERRSPACE equ -1 CBN_SELCHANGE equ 1 CBN_DBLCLK equ 2 CBN_SETFOCUS equ 3 CBN_KILLFOCUS equ 4 CBN_EDITCHANGE equ 5 CBN_EDITUPDATE equ 6 CBN_DROPDOWN equ 7 CBN_CLOSEUP equ 8 CBN_SELENDOK equ 9 CBN_SELENDCANCEL equ 10 ;******************************************************************* ; ; PRINTDLG ; ;******************************************************************* PRINTDLG struc pdlStructSize ULONG ? pdhwndOwner ULONG ? pdhDevMode ULONG ? pdhDevNames ULONG ? pdhDC ULONG ? pdFlags ULONG ? pdnFromPage USHORT ? pdnToPage USHORT ? pdnMinPage USHORT ? pdnMaxPage USHORT ? pdnCopies USHORT ? pdhInstance ULONG ? pdlCustData ULONG ? pdlpfnPrintHook ULONG ? pdlpfnSetupHook ULONG ? pdlpPrintTemplateName ULONG ? pdlpSetupTemplateName ULONG ? pdhPrintTemplate ULONG ? pdhSetupTemplate ULONG ? PRINTDLG ends PD_ALLPAGES = 00000000h PD_SELECTION = 00000001h PD_PAGENUMS = 00000002h PD_NOSELECTION = 00000004h PD_NOPAGENUMS = 00000008h PD_COLLATE = 00000010h PD_PRINTTOFILE = 00000020h PD_PRINTSETUP = 00000040h PD_NOWARNING = 00000080h PD_RETURNDC = 00000100h PD_RETURNIC = 00000200h PD_RETURNDEFAULT = 00000400h PD_SHOWHELP = 00000800h PD_ENABLEPRINTHOOK = 00001000h PD_ENABLESETUPHOOK = 00002000h PD_ENABLEPRINTTEMPLATE = 00004000h PD_ENABLESETUPTEMPLATE = 00008000h PD_ENABLEPRINTTEMPLATEHANDLE = 00010000h PD_ENABLESETUPTEMPLATEHANDLE = 00020000h PD_USEDEVMODECOPIES = 00040000h PD_USEDEVMODECOPIESANDCOLLATE = 00040000h PD_DISABLEPRINTTOFILE = 00080000h PD_HIDEPRINTTOFILE = 00100000h PD_NONETWORKBUTTON = 00200000h DOCINFO struc cbSize UINT ? lpszDocName ULONG ? lpszOutput ULONG ? lpszDatatype ULONG ? fwType ULONG ? DOCINFO ends ;******************************************************************* ; ; SYSTEMTIME ; ;******************************************************************* SYSTEMTIME struc wYear USHORT ? wMonth USHORT ? wDayOfWeek USHORT ? wDay USHORT ? wHour USHORT ? wMinute USHORT ? wSecond USHORT ? wMilliseconds USHORT ? SYSTEMTIME ends ;******************************************************************* ; ; TBBUTTON ; ;******************************************************************* TBBUTTON struc iBitmap UINT ? idCommand UINT ? fsState UCHAR ? fsStyle UCHAR ? bReserved db 2 dup(?) dwData ULONG ? iString UINT ? TBBUTTON ends STD_CUT = 0 STD_COPY = 1 STD_PASTE = 2 STD_UNDO = 3 STD_REDOW = 4 STD_DELETE = 5 STD_FILENEW = 6 STD_FILEOPEN = 7 STD_FILESAVE = 8 STD_PRINTPRE = 9 STD_PROPERTIES = 10 STD_HELP = 11 STD_FIND = 12 STD_REPLACE = 13 STD_PRINT = 14 TBSTATE_CHECKED = 01h TBSTATE_PRESSED = 02h TBSTATE_ENABLED = 04h TBSTATE_HIDDEN = 08h TBSTATE_INDETERMINATE = 10h TBSTATE_WRAP = 20h TBSTYLE_BUTTON = 00h TBSTYLE_SEP = 01h TBSTYLE_CHECK = 02h TBSTYLE_GROUP = 04h TBSTYLE_CHECKGROUP = TBSTYLE_GROUP+TBSTYLE_CHECK TBSTYLE_TOOLTIPS = 0100h TBSTYLE_WRAPABLE = 0200h TBSTYLE_ALTDRAG = 0400h TB_ENABLEBUTTON = (WM_USER + 1) TB_CHECKBUTTON = (WM_USER + 2) TB_PRESSBUTTON = (WM_USER + 3) TB_HIDEBUTTON = (WM_USER + 4) TB_INDETERMINATE = (WM_USER + 5) TB_ISBUTTONENABLED = (WM_USER + 9) TB_ISBUTTONCHECKED = (WM_USER + 10) TB_ISBUTTONPRESSED = (WM_USER + 11) TB_ISBUTTONHIDDEN = (WM_USER + 12) TB_ISBUTTONINDETERMINATE = (WM_USER + 13) TB_SETSTATE = (WM_USER + 17) TB_GETSTATE = (WM_USER + 18) TB_ADDBITMAP = (WM_USER + 19) TB_SAVERESTOREA = (WM_USER + 26) TB_SAVERESTOREW = (WM_USER + 76) TB_CUSTOMIZE = (WM_USER + 27) TB_ADDSTRINGA = (WM_USER + 28) TB_ADDSTRINGW = (WM_USER + 77) TB_GETITEMRECT = (WM_USER + 29) TB_BUTTONSTRUCTSIZE = (WM_USER + 30) TB_SETBUTTONSIZE = (WM_USER + 31) TB_SETBITMAPSIZE = (WM_USER + 32) TB_AUTOSIZE = (WM_USER + 33) TB_GETTOOLTIPS = (WM_USER + 35) TB_SETTOOLTIPS = (WM_USER + 36) TB_SETPARENT = (WM_USER + 37) TB_SETROWS = (WM_USER + 39) TB_GETROWS = (WM_USER + 40) TB_SETCMDID = (WM_USER + 42) TB_CHANGEBITMAP = (WM_USER + 43) TB_GETBITMAP = (WM_USER + 44) TB_GETBUTTONTEXTA = (WM_USER + 45) TB_GETBUTTONTEXTW = (WM_USER + 75) TB_REPLACEBITMAP = (WM_USER + 46) ;====== COMMON CONTROL STYLES ===== CCS_TOP = 00000001h CCS_NOMOVEY = 00000002h CCS_BOTTOM = 00000003h CCS_NORESIZE = 00000004h CCS_NOPARENTALIGN = 00000008h CCS_ADJUSTABLE = 00000020h CCS_NODIVIDER = 00000040h ;******************************************************************* ; ; NMHDR ; ;******************************************************************* NMHDR struc hwndFrom UINT ? idFrom UINT ? code UINT ? NMHDR ends ;******************************************************************* ; ; TOOLTIPTEXT ; ;******************************************************************* TOOLTIPTEXT struc hdr NMHDR lpszText ULONG ? szText db 80 dup(?) hinst ULONG ? uFlags UINT ? TOOLTIPTEXT ends TTN_NEEDTEXT equ 0FFFFFDF8h ;******************************************************************* ; ; TEXTMETRIC ; ;******************************************************************* TEXTMETRIC struc tmHeight ULONG ? tmAscent ULONG ? tmDescent ULONG ? tmInternalLeading ULONG ? tmExternalLeading ULONG ? tmAveCharWidth ULONG ? tmMaxCharWidth ULONG ? tmWeight ULONG ? tmOverhang ULONG ? tmDigitizedAspectX ULONG ? tmDigitizedAspectY ULONG ? tmFirstChar UCHAR ? tmLastChar UCHAR ? tmDefaultChar UCHAR ? tmBreakChar UCHAR ? tmItalic UCHAR ? tmUnderlined UCHAR ? tmStruckOut UCHAR ? tmPitchAndFamily UCHAR ? tmCharSet UCHAR ? TEXTMETRIC ends ;******************************************************************* ; ; Rectangle ; ;******************************************************************* RECT struc left UINT ? top UINT ? right UINT ? bottom UINT ? RECT ends ;******************************************************************* ; ; Window Class structure ; ;******************************************************************* WNDCLASS struc clsStyle UINT ? clsLpfnWndProc ULONG ? clsCbClsExtra UINT ? clsCbWndExtra UINT ? clsHInstance UINT ? clsHIcon UINT ? clsHCursor UINT ? clsHbrBackground UINT ? clsLpszMenuName ULONG ? clsLpszClassName ULONG ? hIconSm UINT ? WNDCLASS ends PAINTSTRUCT STRUC PShdc UINT ? PSfErase UINT ? PSrcPaint UCHAR size RECT dup(?) PSfRestore UINT ? PSfIncUpdate UINT ? PSrgbReserved UCHAR 32 dup(?) PAINTSTRUCT ENDS MSGSTRUCT struc msHWND UINT ? msMESSAGE UINT ? msWPARAM UINT ? msLPARAM ULONG ? msTIME ULONG ? msPT ULONG 2 dup(?) MSGSTRUCT ends MINMAXINFO struc res_x dd ? res_y dd ? maxsize_x dd ? maxsize_y dd ? maxposition_x dd ? maxposition_y dd ? mintrackposition_x dd ? mintrackposition_y dd ? maxtrackposition_x dd ? maxtrackposition_y dd ? MINMAXINFO ends ; ; System Metrics ; SM_CXSCREEN = 0 SM_CYSCREEN = 1 SM_CXVSCROLL = 2 SM_CYHSCROLL = 3 SM_CYCAPTION = 4 SM_CXBORDER = 5 SM_CYBORDER = 6 SM_CXDLGFRAME = 7 SM_CYDLGFRAME = 8 SM_CYVTHUMB = 9 SM_CXHTHUMB = 10 SM_CXICON = 11 SM_CYICON = 12 SM_CXCURSOR = 13 SM_CYCURSOR = 14 SM_CYMENU = 15 SM_CXFULLSCREEN = 16 SM_CYFULLSCREEN = 17 SM_CYKANJIWINDOW = 18 SM_MOUSEPRESENT = 19 SM_CYVSCROLL = 20 SM_CXHSCROLL = 21 SM_DEBUG = 22 SM_SWAPBUTTON = 23 SM_RESERVED1 = 24 SM_RESERVED2 = 25 SM_RESERVED3 = 26 SM_RESERVED4 = 27 SM_CXMIN = 28 SM_CYMIN = 29 SM_CXSIZE /*********************************************************************** ** ** Module: ShellUIBase.cpp ** ** Description: This module implements the shell ui base class. This ** base class connects up the virtual functions to geoShell ** and uses some common system services to implement other ** aspects of the shell (Startup and Shutdown). The rest ** of the UI stuff is not implemented. A new class should ** be derived from this class that implements a new UI ** style. ** ** Author: Geoffrey J. Elliott (GeoffE) ** ** Created: 6/11/99 ** ** Modified: ** ** Copyright (C) 1999 Geoffrey J. Elliott ** All Rights Reserved ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation; either version 2 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program; if not, write to the Free Software ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ** ** The author can be contacted via Email at geo@cybersnot.com ** ***********************************************************************/ #include #include #include "../geOLib/API.h" #include "Resource.h" #include "ShellUIBase.h" #define _dbgModule "ShellUIBase.cpp" //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // Globals we need to keep track off: // extern HINSTANCE g_hInst; fnGetShellList m_ShellGetList; fnGetShellTree m_ShellGetTree; fnShellRegister m_ShellRegister; fnShellUnregister m_ShellUnregister; fnShellLoadPlugin m_ShellLoadPlugin; fnShellUnloadPlugin m_ShellUnloadPlugin; fnShellCloseHost m_ShellCloseHost; fnShellOpenHost m_ShellOpenHost; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // Our GUI cache is shared amongst all instances of the GUI: // UINT m_cCache = 0; COLORREF m_crHigh = RGB(0,0,0); COLORREF m_crLow = RGB(0,0,0); COLORREF m_crEdgeHigh = RGB(0,0,0); COLORREF m_crEdgeLow = RGB(0,0,0); COLORREF m_crBg = RGB(0,0,0); COLORREF m_crBgInset = RGB(0,0,0); COLORREF m_crTextInset = RGB(0,0,0); COLORREF m_crBgSelected = RGB(0,0,0); COLORREF m_crText = RGB(0,0,0); COLORREF m_crTextDisabled = RGB(0,0,0); COLORREF m_crTextHigh = RGB(0,0,0); HBRUSH m_hbrHigh = NULL; HBRUSH m_hbrLow = NULL; HBRUSH m_hbrEdgeHigh = NULL; HBRUSH m_hbrEdgeLow = NULL; HBRUSH m_hbrBg = NULL; HBRUSH m_hbrBgInset = NULL; HBRUSH m_hbrTextInset = NULL; HBRUSH m_hbrBgSelected = NULL; HBRUSH m_hbrText = NULL; HBRUSH m_hbrTextDisabled = NULL; HBRUSH m_hbrTextHigh = NULL; HPEN m_hpenHigh = NULL; HPEN m_hpenLow = NULL; HPEN m_hpenEdgeHigh = NULL; HPEN m_hpenEdgeLow = NULL; HPEN m_hpenBg = NULL; HPEN m_hpenBgInset = NULL; HPEN m_hpenTextInset = NULL; HPEN m_hpenBgSelected = NULL; HPEN m_hpenText = NULL; HPEN m_hpenTextDisabled = NULL; HPEN m_hpenTextHigh = NULL; HICON m_hicoStart = NULL; HICON m_hicoTasks = NULL; HICON m_hicoPrograms = NULL; HICON m_hicoDocuments = NULL; HICON m_hicoFavorites = NULL; HICON m_hicoDrives = NULL; HICON m_hicoSettings = NULL; HICON m_hicoMyComputer = NULL; HICON m_hicoRun = NULL; HICON m_hicoShutdown = NULL; HICON m_hico35Floppy = NULL; HICON m_hico525Floppy = NULL; HICON m_hicoRemovableDrive = NULL; HICON m_hicoCDRom = NULL; HICON m_hicoNetworkDrive = NULL; HICON m_hicoRamDisk = NULL; HICON m_hicoHardDrive = NULL; HICON m_hicoControlPanel = NULL; HICON m_hicoPrinters = NULL; HICON m_hicoLogOff = NULL; HICON m_hicoDesktop = NULL; HFONT m_hfGui = NULL; HFONT m_hfGuiBold = NULL; //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // CShellUIBase // // A ShellUI class is being created. Make sure the base class values // are initialized to NULL. // CShellUIBase::CShellUIBase() { dbgTraceEnter("CShellUIBase::CShellUIBase"); // // Initialize our stuff // m_hwnd = NULL; m_hmodShell = NULL; m_ShellGetList = NULL; m_ShellGetTree = NULL; m_ShellRegister = NULL; m_ShellUnregister = NULL; m_ShellLoadPlugin = NULL; m_ShellUnloadPlugin = NULL; // // Initialize the GDI cache: // _CacheAddRef(); _ConnectToShell(); dbgTraceLeave(); } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // ~CShellUIBase // // A ShellUI class is being destroyed. Release our hold on the GUI // cache so it can destroy itself if needed. // CShellUIBase::~CShellUIBase() { dbgTraceEnter("CShellUIBase::~CShellUIBase"); // // Reset the GDI cache: // _CacheRelease(); dbgTraceLeave(); } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // // // // // // IShellWindow METHODS // // // // // // //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // Hwnd // // Return our HWND to the caller. // HWND CShellUIBase::Hwnd(VOID) { dbgTraceEnter("CShellUIBase::Hwnd"); dbgTraceLeave(); return m_hwnd; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // PostMessage // // Allow a caller to post a message to us without querying for our // HWND. // LRESULT CShellUIBase::PostMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { return ::PostMessage(m_hwnd, uMsg, wParam, lParam); } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // SendMessage // // Allow a caller to send a message to us without querying for our // HWND. // LRESULT CShellUIBase::SendMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { return (m_hwnd != NULL) ? ::SendMessage(m_hwnd, uMsg, wParam, lParam) : 0; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // wndProc // // We don't do much, be we'll try to do *something* default: // LRESULT CShellUIBase::wndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // // // // // // IShellPluginHost METHODS // // // // // // //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // GetShellBrush // // Return a brush from our shell ui cache. // HBRUSH CShellUIBase::GetShellBrush(DWORD dwBrush) { dbgTraceEnter("CShellUIBase::GetShellBrush"); HBRUSH hbrRet = NULL; switch (dwBrush) { case SHELL_EDGE_HIGH: hbrRet = m_hbrEdgeHigh; break; case SHELL_EDGE_LOW: hbrRet = m_hbrEdgeLow; break; case SHELL_HIGH: hbrRet = m_hbrHigh; break; case SHELL_LOW: hbrRet = m_hbrLow; break; case SHELL_BACKGROUND: hbrRet = m_hbrBg; break; case SHELL_BACKGROUND_INSET: hbrRet = m_hbrBgInset; break; case SHELL_BACKGROUND_SELECTED: hbrRet = m_hbrBgSelected; break; case SHELL_TEXT: hbrRet = m_hbrText; break; case SHELL_TEXT_INSET: hbrRet = m_hbrTextInset; break; case SHELL_TEXT_DISABLED: hbrRet = m_hbrTextDisabled; break; case SHELL_TEXT_HIGH: hbrRet = m_hbrTextHigh; break; } dbgTraceLeave(); return hbrRet; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // GetShellPen // // Return a pen from our shell ui cache. // HPEN CShellUIBase::GetShellPen(DWORD dwPen) { dbgTraceEnter("CShellUIBase::GetShellPen"); HPEN hpenRet = NULL; switch(dwPen) { case SHELL_EDGE_HIGH: hpenRet = m_hpenEdgeHigh; break; case SHELL_EDGE_LOW: hpenRet = m_hpenEdgeLow; break; case SHELL_HIGH: hpenRet = m_hpenHigh; break; case SHELL_LOW: hpenRet = m_hpenLow; break; case SHELL_BACKGROUND: hpenRet = m_hpenBg; break; case SHELL_BACKGROUND_INSET: hpenRet = m_hpenBgInset; break; case SHELL_BACKGROUND_SELECTED: hpenRet = m_hpenBgSelected; break; case SHELL_TEXT: hpenRet = m_hpenText; break; case SHELL_TEXT_INSET: hpenRet = m_hpenTextInset; break; case SHELL_TEXT_DISABLED: hpenRet = m_hpenTextDisabled; break; case SHELL_TEXT_HIGH: hpenRet = m_hpenTextHigh; break; } dbgTraceLeave(); return hpenRet; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // GetShellColor // // Return a color from our shell ui cache. // COLORREF CShellUIBase::GetShellColor(DWORD dwColor) { dbgTraceEnter("CShellUIBase::GetShellColor"); COLORREF crRet = RGB(0,0,0); switch(dwColor) { case SHELL_EDGE_HIGH: crRet = m_crEdgeHigh; break; case SHELL_EDGE_LOW: crRet = m_crEdgeLow; break; case SHELL_HIGH: crRet = m_crHigh; break; case SHELL_LOW: crRet = m_crLow; break; case SHELL_BACKGROUND: crRet = m_crBg; break; case SHELL_BACKGROUND_INSET: crRet = m_crBgInset; break; case SHELL_BACKGROUND_SELECTED: crRet = m_crBgSelected; break; case SHELL_TEXT: crRet = m_crText; break; case SHELL_TEXT_INSET: crRet = m_crTextInset; break; case SHELL_TEXT_DISABLED: crRet = m_crTextDisabled; break; case SHELL_TEXT_HIGH: crRet = m_crTextHigh; break; } dbgTraceLeave(); return crRet; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // GetShellFont // // Return a font from our shell ui cache. // HFONT CShellUIBase::GetShellFont(DWORD dwFont) { dbgTraceEnter("CShellUIBase::GetShellFont"); HFONT hfRet = NULL; switch(dwFont) { case SHELL_FONT: hfRet = m_hfGui; break; case SHELL_FONT_BOLD: hfRet = m_hfGuiBold; break; } dbgTraceLeave(); return hfRet; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // GetShellIocn // // Return an icon from our shell ui cache. // HICON CShellUIBase::GetShellIcon(DWORD dwIcon) { dbgTraceEnter("CShellUIBase::GetShellIcon"); HICON hicoRet = NULL; switch(dwIcon) { case SHELL_ICON_START: hicoRet = m_hicoStart; break; case SHELL_ICON_TASKS: hicoRet = m_hicoTasks; break; case SHELL_ICON_PROGRAMS: hicoRet = m_hicoPrograms; break; case SHELL_ICON_DOCUMENTS: hicoRet = m_hicoDocuments; break; case SHELL_ICON_FAVORITES: hicoRet = m_hicoFavorites; break; case SHELL_ICON_DRIVES: hicoRet = m_hicoDrives; break; case SHELL_ICON_SETTINGS: hicoRet = m_hicoSettings; break; case SHELL_ICON_MYCOMPUTER: hicoRet = m_hicoMyComputer; break; case SHELL_ICON_RUN: hicoRet = m_hicoRun; break; case SHELL_ICON_SHUTDOWN: hicoRet = m_hicoShutdown; break; case SHELL_ICON_35FLOPPY: hicoRet = m_hico35Floppy; break; case SHELL_ICON_525FLOPPY: hicoRet = m_hico525Floppy; break; case SHELL_ICON_REMOVABLEDRIVE: hicoRet = m_hicoRemovableDrive; break; case SHELL_ICON_CDROM: hicoRet = m_hicoCDRom; break; case SHELL_ICON_NETWORKDRIVE: hicoRet = m_hicoNetworkDrive; break; case SHELL_ICON_RAMDISK: hicoRet = m_hicoRamDisk; break; case SHELL_ICON_HARDDRIVE: hicoRet = m_hicoHardDrive; break; case SHELL_ICON_CONTROLPANEL: hicoRet = m_hicoControlPanel; break; case SHELL_ICON_PRINTERS: hicoRet = m_hicoPrinters; break; case SHELL_ICON_LOGOFF: hicoRet = m_hicoLogOff; break; case SHELL_ICON_DESKTOP: hicoRet = m_hicoDesktop; } dbgTraceLeave(); return hicoRet; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // ShellRunDialog // // Display the standard Run dialog: // HRESULT CShellUIBase::ShellRunDialog(VOID) { dbgTraceEnter("CShellUIBase::ShellRunDialog"); // // The desktop window handles this stuff for us: // BOOL br = ::SendMessage((HWND)GetWindowLong(m_hwnd, GWL_HWNDPARENT), WM_HOTKEY, NULL, MAKELONG(MOD_WIN, 'R')); dbgTraceLeave(); return (br == 1) ? S_OK : E_FAIL; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // ShellLogOff // // Log the user off. // HRESULT CShellUIBase::ShellLogOff(VOID) { dbgTraceEnter("CShellUIBase::ShellLogOff"); // // The desktop window handles this stuff for us: // BOOL br = ::SendMessage((HWND)GetWindowLong(m_hwnd, GWL_HWNDPARENT), WM_HOTKEY, NULL, MAKELONG(MOD_WIN, 'L')); dbgTraceLeave(); return S_OK; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // ShellShutdown // // Display the standard shutdown dialog and shutdown the system as // appropriate. // HRESULT CShellUIBase::ShellShutdown(VOID) { dbgTraceEnter("CShellUIBase::ShellShutdown"); // // The desktop window handles this stuff for us: // BOOL br = ::SendMessage((HWND)GetWindowLong(m_hwnd, GWL_HWNDPARENT), WM_HOTKEY, NULL, MAKELONG(MOD_WIN, 'Q')); dbgTraceLeave(); return S_OK; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // Proxy Functions // // The following functions are proxied off to the main geoShell.exe: // HRESULT CShellUIBase::ShellGetList(CHAR *szService, IShellList **ppShellList) { if (m_ShellGetList != NULL) { return m_ShellGetList(szService, ppShellList); } else { return E_NOTIMPL; } } HRESULT CShellUIBase::ShellGetTree(CHAR *szService, IShellTree **ppShellTree) { if (m_ShellGetTree != NULL) { return m_ShellGetTree(szService, ppShellTree); } else { return E_NOTIMPL; } } HRESULT CShellUIBase::ShellRegister(HWND hwnd, DWORD dwService) { if (m_ShellRegister != NULL) { return m_ShellRegister(hwnd, dwService); } else { return E_NOTIMPL; } } HRESULT CShellUIBase::ShellUnregister(HWND hwnd, DWORD dwService) { if (m_ShellUnregister != NULL) { return m_ShellUnregister(hwnd, dwService); } else { return E_NOTIMPL; } } HRESULT CShellUIBase::ShellLoadPlugin(IShellPluginHost *pPluginHost, CHAR *szPluginUrl, VOID **ppShellPlugin) { if (m_ShellLoadPlugin != NULL) { return m_ShellLoadPlugin(pPluginHost, szPluginUrl, (IShellPlugin **)ppShellPlugin); } else { return E_NOTIMPL; } } HRESULT CShellUIBase::ShellUnloadPlugin(VOID *pPlugin) { if (m_ShellUnloadPlugin != NULL) { return m_ShellUnloadPlugin((IShellPlugin *)pPlugin); } else { return E_NOTIMPL; } } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // Not Implemented // // The following functions need to be implemented by a derived class. // HRESULT CShellUIBase::Startup(HWND hwndParent, INT x, INT y, stPluginItem *pPlugins) { return E_NOTIMPL; } HRESULT CShellUIBase::Shutdown(VOID) { return E_NOTIMPL; } HRESULT CShellUIBase::AddPlugin(VOID *pPlugin) { return E_NOTIMPL; } HRESULT CShellUIBase::RemovePlugin(VOID *pPlugin) { return E_NOTIMPL; } //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // // // // // // PRIVATE METHODS // // // // // // //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- // // _CacheAddRef // // This method increments the number of people using the GDI cache, and // if it is the first item, it initializes the cache. // HRESULT CShellUIBase::_CacheAddRef(VOID) { dbgTraceEnter("CShellUIBase::_CacheAddRef"); BOOL fSystemColors = FALSE; CHAR szFont[MAX_PATH+1]; UINT dwFontPt; CHAR *psz; HKEY hk; // // has it already been loaded? // m_cCache++; if (m_cCache == 1) { dbgTrace("Initializing the cache!"); // // Ok, load up some settings: // szFont[0] = '\0'; if (RegOpenKey(HKEY_CURRENT_USER, "Software\\geO\\geOShell\\ShellUI", &hk) == ERROR_SUCCESS) { fSystemColors = _RegGetValueDW(hk, "Use System Colors", FALSE); _RegGetValueSZ(hk, "GUI Font", szFont, MAX_PATH, "standard"); if (stricmp(szFont, "standard") != 0) { psz = strrchr(szFont, ','); if (psz != NULL) { *psz = '\0'; dwFontPt = atoi(psz+1); } else { szFont[0] = '\0'; } } else { szFont[0] = '\0'; } RegCloseKey(hk); } if (fSystemColors) { // // Use windows colors: // m_crHigh = GetSysColor(COLOR_3DHILIGHT); m_crLow = GetSysColor(COLOR_3DSHADOW); m_crEdgeHigh = GetSysColor(COLOR_3DLIGHT); m_crEdgeLow = GetSysColor(COLOR_3DDKSHADOW); m_crBg = GetSysColor(COLOR_3DFACE); m_crBgInset = GetSysColor(COLOR_3DFACE); m_crTextInset = GetSysColor(COLOR_BTNTEXT); m_crBgSelected = GetSysColor(COLOR_HIGHLIGHT); m_crText = GetSysColor(COLOR_MENUTEXT); m_crTextDisabled = GetSysColor(COLOR_GRAYTEXT); m_crTextHigh = GetSysColor(COLOR_HIGHLIGHTTEXT); } else { // // BUGBUG :: Load th