// Copyright (c) 1997-1999 Microsoft Corporation // // Wrappers of Win APIs // // 8-14-97 sburns #ifndef WIN_HPP_INCLUDED #define WIN_HPP_INCLUDED // Wrappers of Win32 APIs, doing such nice things as taking Strings // as parameters, asserting parameters and return values, assuming // certain parameters such as resource instance handles, and other // stuff. // // Each function name is identical to the API function it wraps. namespace Burnslib { namespace Win { // Win::Error is a subclass of ::Error that automatically maps // error codes to message strings, pulling the strings string from // various windows system resources. class Error : public ::Error { public: // Constructs a new instance. // // hr - The HRESULT to keep track of. // // summaryResID - ID of the string resource that corresponds to // the summary text to be returned by GetSummary(). Error(HRESULT hr, int summaryResID); virtual ~Error() { } // Overrides the default windows message text. // // hr - The HRESULT to keep track of. // // message - The error message that will be returned by calls to // GetMessage. // // summary - the string that will be returned by calls to GetSummary Error(HRESULT hr, const String& message, const String& summary); HRESULT GetHresult() const; // Returns the HelpContext that will point the user to // assistance in deciphering the error message and details. For // this implementation, this is just the HRESULT parameter // passed to the ctor. virtual HelpContext GetHelpContext() const; // Returns the human readable error message from the system // error message string table(s). virtual String GetMessage() const; // returns a 1-line summary: The essence of the error, suitable // for use as the title of a reporting dialog, for instance. virtual String GetSummary() const; const Error& operator=(const Error& rhs); private: HRESULT hr; mutable String message; mutable String summary; int summaryResId; }; // A CursorSetting is a convenient trick to change the cursor only // for the lifetime of a single code block. When an instance is // constructed, the cursor is changed. When it is destroyed, the // old cursor is restored. // // Example: // // { // open block scope // Win::CursorSetting scope(IDC_WAIT); // // the cursor is now IDC_WAIT // // // do something time consuming // } // close block scope // // scope destroyed; the cursor is restored to what it was before // NOTE: not threadsafe: do not use the same CursorSetting object from // multiple threads. class CursorSetting { public: // Construct a new instance with the named cursor resource. explicit CursorSetting(const String& newCursorName); // MAKEINTRESOURCE version explicit CursorSetting( const TCHAR* newCursorName, bool isSystemCursor = true); // Construct a new instance from a valid HCURSOR. explicit CursorSetting(HCURSOR newCursor); ~CursorSetting(); private: HCURSOR oldCursor; void init( const TCHAR* cursorName, bool isSystemCursor = true); // these are not defined CursorSetting(const CursorSetting&); const CursorSetting& operator=(const CursorSetting&); }; class WaitCursor : public CursorSetting { public: WaitCursor() : CursorSetting(IDC_WAIT) { } private: // these are not defined WaitCursor(const WaitCursor&); const WaitCursor& operator=(const WaitCursor&); }; HRESULT AdjustTokenPrivileges( HANDLE tokenHandle, bool disableAllPrivileges, TOKEN_PRIVILEGES newState[], DWORD bufferLength, TOKEN_PRIVILEGES* previousState, DWORD* returnLength); HRESULT AllocateAndInitializeSid( SID_IDENTIFIER_AUTHORITY& authority, BYTE subAuthorityCount, DWORD subAuthority0, DWORD subAuthority1, DWORD subAuthority2, DWORD subAuthority3, DWORD subAuthority4, DWORD subAuthority5, DWORD subAuthority6, DWORD subAuthority7, PSID& sid); #undef Animate_Open void Animate_Open(HWND animation, const TCHAR* animationNameOrRes); #undef Animate_Stop void Animate_Stop(HWND animation); HRESULT AppendMenu( HMENU menu, UINT flags, UINT_PTR idNewItem, PCTSTR newItem); #undef Button_SetCheck void Button_SetCheck(HWND button, int checkState); #undef Button_GetCheck bool Button_GetCheck(HWND button); #undef Button_SetStyle void Button_SetStyle(HWND button, int style, bool redraw); void CheckDlgButton(HWND parentDialog, int buttonID, UINT buttonState); void CheckRadioButton( HWND parentDialog, int firstButtonInGroupID, int lastButtonInGroupID, int buttonInGroupToCheckID); // sets the handle to INVALID_HANDLE_VALUE void CloseHandle(HANDLE& handle); void CloseServiceHandle(SC_HANDLE handle); #undef ComboBox_AddString int ComboBox_AddString(HWND combo, const String& s); // Adds all of the strings in the range defined by the provided iterators // to the combo box control, and returns the 0-based index of the last // string added. Returns CB_ERR if an error occurred, or CB_ERRSPACE if // insufficient space is available to add the string. // // Each element is added in the sequence provided by the iterators. If an // error is encountered, the iteration stops, and the error value is // returned. In other words, remaining elements in the iteration are // skipped. // // Each element must be a String, or a type convertible to String (PWSTR, // etc.) // // combo - a HWND for a combo box. // // first - a forward iterator set to the first element in the sequence to // be added to the combo box. // // last - a forward iterator set to just beyond the last element of the // sequence. // // Example: // // StringList fooStrings; // fooStrings.push_back(L"hello"); // fooStrings.push_back(L"world"); // // int err = // Win::ComboBox_AddStrings( // combo, // fooStrings.begin(), // fooStrings.end()); template int ComboBox_AddStrings( HWND combo, ForwardIterator first, ForwardIterator last) { ASSERT(Win::IsWindow(combo)); int err = CB_ERR; for ( // copy the iterators so as not to modify the actual parameters ForwardIterator f = first, l = last; f != l; ++f) { err = Win::ComboBox_AddString(combo, *f); if (err == CB_ERR || err == CB_ERRSPACE) { break; } } return err; } #undef ComboBox_GetCurSel int ComboBox_GetCurSel(HWND combo); // Retrieves the text of the selected item in the list box of the combo // or empty if no item is selected. String ComboBox_GetCurText(HWND combo); #undef ComboBox_GetLBText String ComboBox_GetLBText(HWND combo, int index); #undef ComboBox_GetLBTextLen int ComboBox_GetLBTextLen(HWND combo, int index); #undef ComboBox_SelectString int ComboBox_SelectString(HWND combo, const String& str); #undef ComboBox_SetCurSel void ComboBox_SetCurSel(HWND combo, int index); int CompareString( LCID locale, DWORD flags, const String& string1, const String& string2); HRESULT ConnectNamedPipe( HANDLE pipe, OVERLAPPED* overlapped); HRESULT ConvertSidToStringSid(PSID sid, String& result); HRESULT CopyFileEx( const String& existingFileName, const String& newFileName, LPPROGRESS_ROUTINE progressRoutine, void* progressParam, BOOL* cancelFlag, DWORD flags); HRESULT CopySid(DWORD destLength, PSID dest, PSID source); HRESULT CreateDialogParam( HINSTANCE hInstance, const TCHAR* templateName, HWND owner, DLGPROC dialogProc, LPARAM param, HWND& result); HRESULT CreateDirectory(const String& path); HRESULT CreateEvent( SECURITY_ATTRIBUTES* securityAttributes, bool manualReset, bool initiallySignaled, HANDLE& result); HRESULT CreateEvent( SECURITY_ATTRIBUTES* securityAttributes, bool manualReset, bool initiallySignaled, const String& name, HANDLE& result); HRESULT CreateFile( const String& fileName, DWORD desiredAccess, DWORD shareMode, SECURITY_ATTRIBUTES* securityAttributes, DWORD creationDistribution, DWORD flagsAndAttributes, HANDLE hTemplateFile, HANDLE& result); HRESULT CreateFontIndirect( const LOGFONT& logFont, HFONT& result); HRESULT CreateMailslot( const String& name, DWORD maxMessageSize, DWORD readTimeout, SECURITY_ATTRIBUTES* attributes, HANDLE& result); HRESULT CreateMutex( SECURITY_ATTRIBUTES* attributes, bool isInitialOwner, const String& name, HANDLE& result); HRESULT CreateNamedPipe( const String& name, DWORD openMode, DWORD pipeMode, DWORD maxInstances, DWORD outBufferSizeInBytes, DWORD inBufferSizeInBytes, DWORD defaultTimeout, SECURITY_ATTRIBUTES* sa, HANDLE& result); HRESULT CreatePopupMenu(HMENU& result); #undef CreateProcess HRESULT CreateProcess( String& commandLine, SECURITY_ATTRIBUTES* processAttributes, SECURITY_ATTRIBUTES* threadAttributes, bool inheritHandles, DWORD creationFlags, void* environment, const String& currentDirectory, STARTUPINFO& startupInformation, PROCESS_INFORMATION& processInformation); HRESULT CreatePropertySheetPage( const PROPSHEETPAGE& pageInfo, HPROPSHEETPAGE& result); HRESULT CreateSolidBrush( COLORREF color, HBRUSH& result); HRESULT CreateStreamOnHGlobal( HGLOBAL hglobal, bool deleteOnRelease, IStream*& result); HRESULT CreateWindowEx( DWORD exStyle, const String& className, const String& windowName, DWORD style, int x, int y, int width, int height, HWND parent, HMENU menuOrChildID, void* param, HWND& result); HRESULT DeleteFile(const String& path); // object is set to 0 HRESULT DeleteObject(HGDIOBJ& object); HRESULT DeleteObject(HFONT& object); HRESULT DeleteObject(HBITMAP& object); // icon is set to 0 HRESULT DestroyIcon(HICON& icon); // menu is set to 0 HRESULT DestroyMenu(HMENU& menu); // page is set to 0 HRESULT DestroyPropertySheetPage(HPROPSHEETPAGE& page); // window is set to 0 HRESULT DestroyWindow(HWND& window); INT_PTR DialogBoxParam( HINSTANCE hInstance, const TCHAR* templateName, HWND owner, DLGPROC dialogProc, LPARAM param); HRESULT DisconnectNamedPipe(HANDLE pipe); HRESULT DrawFocusRect(HDC dc, const RECT& rect); // appends text to the contents of an edit control. // // editbox - HWND of the edit control // // text - text to append. Must not be empty. // // preserveSelection - true to keep any active selection, false to move // the care to the end of the appended text. // // canUndo - true to allow undo of the append, false if not. void Edit_AppendText( HWND editbox, const String& text, bool preserveSelection = true, bool canUndo = true); #undef Edit_GetSel void Edit_GetSel(HWND editbox, int& start, int& end); #undef Edit_LimitText void Edit_LimitText(HWND editbox, int limit); #undef Edit_ReplaceSel void Edit_ReplaceSel(HWND editbox, const String& newText, bool canUndo); #undef Edit_SetSel void Edit_SetSel(HWND editbox, int start, int end); bool EqualSid(PSID sid1, PSID sid2); void EnableWindow(HWND window, bool state); HRESULT EndDialog(HWND dialog, int result); #undef EnumUILanguages HRESULT EnumUILanguages( UILANGUAGE_ENUMPROCW proc, DWORD flags, LONG_PTR lParam); HRESULT ExitWindowsEx(UINT options); // expands strings in s, returns s on failure, expanded version on // success. String ExpandEnvironmentStrings(const String& s); HRESULT FindFirstFile( const String& fileName, WIN32_FIND_DATA& data, HANDLE& result); HRESULT FindClose(HANDLE& findHandle); HRESULT FindNextFile(HANDLE& findHandle, WIN32_FIND_DATA& data); HRESULT FlushFileBuffers(HANDLE handle); HRESULT FrameRect(HDC dc, const RECT& rect, HBRUSH brush); HRESULT FreeLibrary(HMODULE& module); void FreeSid(PSID sid); // used to free the result returned by Win::GetTokenInformation void FreeTokenInformation(TOKEN_USER* userInfo); HWND GetActiveWindow(); // for Windows pre-defined classes. HRESULT GetClassInfoEx(const String& className, WNDCLASSEX& info); HRESULT GetClassInfoEx( HINSTANCE hInstance, const String& className, WNDCLASSEX& info); String GetClassName(HWND window); String GetClipboardFormatName(UINT format); HRESULT GetClientRect(HWND window, RECT& rect); HRESULT GetColorDepth(int& result); String GetCommandLine(); // Inserts the command line arguments of the current process into the // provided list. The list is not cleared beforehand. The list is similar // to the traditional argv array. Returns the number of args inserted. // // Use instead of ::GetCommandLine, ::ComandLineToArgVW. // // BackInsertionSequence - any type that supports the construction of // a back_insert_iterator on itself, and has a value type that can be // constructed from an PWSTR. // // bii - a reference to a back_insert_iterator of the // BackInsertionSequence template parameter. The simplest way to make // one of these is to use the back_inserter helper function. // // Example: // // StringList container; // int argCount = Win::GetCommandLineArgs(std::back_inserter(container)); // // StringVector container; // int argCount = Win::GetCommandLineArgs(std::back_inserter(container)); template int GetCommandLineArgs( std::back_insert_iterator& bii) { PWSTR* clArgs = 0; int argCount = 0; int retval = 0; clArgs = ::CommandLineToArgvW(Win::GetCommandLine().c_str(), &argCount); ASSERT(clArgs); if (clArgs) { for (retval = 0; retval < argCount; retval++) { // the container values can be any type that can be constructed // from PWSTR... //lint --e(*) lint does not grok back_insert_iterator *bii++ = clArgs[retval]; } Win::LocalFree(clArgs); } ASSERT(argCount == retval); return retval; } // HRESULT // GetComputerNameEx(COMPUTER_NAME_FORMAT format, String& result); String GetComputerNameEx(COMPUTER_NAME_FORMAT format); HRESULT GetCurrentDirectory(String& result); HANDLE GetCurrentProcess(); HRESULT GetCursorPos(POINT& result); HRESULT GetDC(HWND window, HDC& result); int GetDeviceCaps(HDC hdc, int index); HWND GetDesktopWindow(); HRESULT GetDiskFreeSpaceEx( const String& path, ULARGE_INTEGER& available, ULARGE_INTEGER& total, ULARGE_INTEGER* free); HWND GetDlgItem(HWND parentDialog, int itemResID); String GetDlgItemText(HWND parentDialog, int itemResID); int GetDlgItemInt(HWND parentDialog, int itemResID, bool isSigned = false); UINT GetDriveType(const String& path); EncodedString GetEncodedDlgItemText(HWND parentDialog, int itemResID); String GetEnvironmentVariable(const String& name); HRESULT GetExitCodeProcess(HANDLE hProcess, DWORD& exitCode); HRESULT GetFileAttributes(const String& path, DWORD& result); HRESULT GetFileSizeEx(HANDLE handle, LARGE_INTEGER& result); DWORD GetFileType(HANDLE handle); // DWORD // GetLastError(); HRESULT GetFullPathName(const String& path, String& result); HRESULT GetLastErrorAsHresult(); void GetLocalTime(SYSTEMTIME& time); HRESULT GetLogicalDriveStrings(size_t bufChars, TCHAR* buf, DWORD& result); HRESULT GetMailslotInfo( HANDLE mailslot, DWORD* maxMessageSize, DWORD* nextMessageSize, DWORD* messageCount, DWORD* readTimeout); String GetModuleFileName(HMODULE hModule); // of this process exe HINSTANCE GetModuleHandle(); HWND GetParent(HWND child); String GetPrivateProfileString( const String& section, const String& key, const String& defaultValue, const String& filename); HRESULT GetProcAddress(HMODULE module, const String& procName, FARPROC& result); HRESULT GetStringTypeEx( LCID localeId, DWORD infoTypeOptions, const String& sourceString, WORD* charTypeInfo); HRESULT GetSysColor(int element, DWORD& result); // returns %systemroot%\system32 String GetSystemDirectory(); void GetSystemInfo(SYSTEM_INFO& info); // returns %systemroot%, always (even under terminal server). String GetSystemWindowsDirectory(); // // returns %systemroot%, always // // String // GetSystemRootDirectory(); int GetSystemMetrics(int index); #undef GetTempPath HRESULT GetTempPath(String& result); HRESULT GetTextExtentPoint32(HDC hdc, const String& string, SIZE& size); HRESULT GetTextMetrics(HDC hdc, TEXTMETRIC& tm); // free the result with Win::FreeTokenInformation. // // allocates the result and returns it thru userInfo. HRESULT GetTokenInformation(HANDLE hToken, TOKEN_USER*& userInfo); // ... other varations of GetTokenInformation could be defined for // other infomation classes... // trims off leading and trailing whitespace String GetTrimmedDlgItemText(HWND parentDialog, int itemResID); // trims off leading and trailing whitespace String GetTrimmedWindowText(HWND window); HRESULT GetVersionEx(OSVERSIONINFO& info); HRESULT GetVersionEx(OSVERSIONINFOEX& info); HRESULT GetVolumeInformation( const String& volume, String* name, DWORD* serialNumber, DWORD* maxFilenameLength, DWORD* flags, String* fileSystemName); HRESULT GetWindowDC(HWND window, HDC& result); #undef GetWindowFont HFONT GetWindowFont(HWND window); HRESULT GetWindowPlacement(HWND window, WINDOWPLACEMENT& placement); HRESULT GetWindowRect(HWND window, RECT& rect); // returns %windir%, which may vary for terminal server users. String GetWindowsDirectory(); #undef GetWindowLong HRESULT GetWindowLong(HWND window, int index, LONG& result); #undef GetWindowLongPtr HRESULT GetWindowLongPtr(HWND window, int index, LONG_PTR& result); String GetWindowText(HWND window); HRESULT GlobalAlloc(UINT flags, size_t bytes, HGLOBAL& result); HRESULT GlobalFree(HGLOBAL mem); HRESULT GlobalLock(HGLOBAL mem, PVOID& result); HRESULT GlobalUnlock(HGLOBAL mem); void HtmlHelp( HWND caller, const String& file, UINT command, DWORD_PTR data); #undef ImageList_Add int ImageList_Add(HIMAGELIST list, HBITMAP image, HBITMAP mask); #undef ImageList_AddIcon int ImageList_AddIcon(HIMAGELIST list, HICON icon); #undef ImageList_AddMasked int ImageList_AddMasked(HIMAGELIST list, HBITMAP bitmap, COLORREF mask); HIMAGELIST ImageList_Create( int pixelsx, int pixelsy, UINT flags, int initialSize, int reserve); HRESULT InitializeSecurityDescriptor(SECURITY_DESCRIPTOR& sd); LONG InterlockedDecrement(LONG& addend); LONG InterlockedIncrement(LONG& addend); bool IsDlgButtonChecked(HWND parentDialog, int buttonResID); // returns true if the name matches one of the local computer's names // (case insensitive) bool IsLocalComputer(const String& computerName); bool IsWindow(HWND candidate); bool IsWindowEnabled(HWND window); #undef ListBox_AddString int ListBox_AddString(HWND box, const String& s); #undef ListBox_SetItemData int ListBox_SetItemData(HWND box, int index, LPARAM value); #undef ListBox_GetItemData LPARAM ListBox_GetItemData(HWND box, int index); #undef ListBox_SetCurSel int ListBox_SetCurSel(HWND box, int index); #undef ListBox_GetCurSel int ListBox_GetCurSel(HWND box); #undef ListView_DeleteItem bool ListView_DeleteItem(HWND listview, int item); #undef ListView_GetItem bool ListView_GetItem(HWND listview, LVITEM& item); #undef ListView_GetItemCount int ListView_GetItemCount(HWND listview); #undef ListView_GetItemState UINT ListView_GetItemState(HWND listview, int index, UINT mask); #undef ListView_GetSelectedCount int ListView_GetSelectedCount(HWND listview); #undef ListView_GetSelectionMark int ListView_GetSelectionMark(HWND listview); #undef ListView_InsertColumn int ListView_InsertColumn(HWND listview, int index, const LVCOLUMN& column); #undef ListView_InsertItem int ListView_InsertItem(HWND listview, const LVITEM& item); #undef ListView_SetImageList HIMAGELIST ListView_SetImageList(HWND listview, HIMAGELIST images, int type); #undef ListView_SetItem void ListView_SetItem(HWND listview, const LVITEM& item); #undef ListView_SetItemText void ListView_SetItemText( HWND listview, int item, int subItem, const String& text); HRESULT LoadBitmap(unsigned resId, HBITMAP& result); HRESULT LoadCursor(const String& cursorName, HCURSOR& result); // provided for MAKEINTRESOURCE versions of cursorName HRESULT LoadCursor( const TCHAR* cursorName, HCURSOR& result, bool isSystemCursor = true); HRESULT LoadIcon(int resID, HICON& result); HRESULT LoadImage(unsigned resID, unsigned type, HANDLE& result); HRESULT LoadImage(unsigned resID, HICON& result); HRESULT LoadImage(unsigned resID, HBITMAP& result); HRESULT LoadLibrary(const String& libFileName, HINSTANCE& result); HRESULT LoadLibraryEx(const String& libFileName, DWORD flags, HINSTANCE& result); HRESULT LoadMenu(unsigned resID, HMENU& result); // Loads from the module indicated by GetResourceModuleHandle() String LoadString(unsigned resID); String LoadString(unsigned resID, HINSTANCE hInstance); HRESULT LocalFree(HLOCAL mem); HRESULT LookupAccountSid( const String& machineName, PSID sid, String& accountName, String& domainName); #undef LookupPrivilegeValue HRESULT LookupPrivilegeValue( const TCHAR* systemName, const TCHAR* privName, LUID& luid); HRESULT MapWindowPoints( HWND from, HWND to, RECT& rect, int* dh = 0, // number of pixels added to horizontal coord int* dv = 0); // number of pixels added to vertical coord int MessageBox( HWND owner, const String& text, const String& title, UINT flags); HRESULT MoveFileEx( const String& srcPath, const String& dstPath, DWORD flags); HRESULT MoveWindow( HWND window, int x, int y, int width, int height, bool shouldRepaint); HRESULT OpenProcessToken( HANDLE processHandle, DWORD desiredAccess, HANDLE& tokenHandle); HRESULT OpenSCManager( const String& machine, DWORD desiredAccess, SC_HANDLE& result); HRESULT OpenService( SC_HANDLE managerHandle, const String& serviceName, DWORD desiredAccess, SC_HANDLE& result); void OutputDebugString(const String& string); HRESULT PeekNamedPipe( HANDLE pipe, void* buffer, DWORD bufferSize, DWORD* bytesRead, DWORD* bytesAvailable, DWORD* bytesRemainingThisMessage); HRESULT PostMessage(HWND window, UINT msg, WPARAM wParam, LPARAM lParam); HRESULT PropertySheet(PROPSHEETHEADER* header, INT_PTR& result); #undef PropSheet_Changed void PropSheet_Changed(HWND propSheet, HWND page); #undef PropSheet_Unchanged void PropSheet_Unchanged(HWND propSheet, HWND page); #undef PropSheet_RebootSystem void PropSheet_RebootSystem(HWND propSheet); #undef PropSheet_SetTitle void PropSheet_SetTitle( HWND propSheet, DWORD style, const String& title); #undef PropSheet_SetWizButtons void PropSheet_SetWizButtons(HWND propSheet, DWORD buttonFlags); HRESULT QueryServiceStatus( SC_HANDLE handle, SERVICE_STATUS& status); HRESULT ReadFile( HANDLE file, void* buffer, DWORD bytesToRead, DWORD& bytesRead, OVERLAPPED* overlapped); void ReleaseStgMedium(STGMEDIUM& medium); HRESULT RegCloseKey(HKEY hKey); HRESULT RegConnectRegistry( const String& machine, HKEY hKey, HKEY& result); HRESULT RegCreateKeyEx( HKEY hKey, const String& subkeyName, DWORD options, REGSAM access, SECURITY_ATTRIBUTES* securityAttrs, HKEY& result, DWORD* disposition); HRESULT RegDeleteValue( HKEY hKey, const String& valueName); HRESULT RegOpenKeyEx( HKEY hKey, const String& subKey, REGSAM accessDesired, HKEY& result); HRESULT RegQueryValueEx( HKEY hKey, const String& valueName, DWORD* type, BYTE* data, DWORD* dataSize); HRESULT RegSetValueEx( HKEY hKey, const String& valueName, DWORD type, const BYTE* data, size_t dataSize); HRESULT RegisterClassEx(const WNDCLASSEX& wndclass, ATOM& result); CLIPFORMAT RegisterClipboardFormat(const String& name); void ReleaseDC(HWND window, HDC dc); HRESULT ReleaseMutex(HANDLE mutex); HRESULT RemoveDirectory(const String& path); inline HRESULT RemoveFolder(const String& path) { return Win::RemoveDirectory(path); } HRESULT ResetEvent(HANDLE event); HRESULT ScreenToClient(HWND window, POINT& point); HRESULT ScreenToClient(HWND window, RECT& rect); HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hobject); LRESULT SendMessage(HWND window, UINT msg, WPARAM wParam, LPARAM lParam); HRESULT SetComputerNameEx(COMPUTER_NAME_FORMAT format, const String& newName); HCURSOR SetCursor(HCURSOR newCursor); HRESULT SetDlgItemText( HWND parentDialog, int itemResID, const String& text); inline HRESULT SetDlgItemText( HWND parentDialog, int itemResID, int textResID) { return Win::SetDlgItemText( parentDialog, itemResID, String::load(textResID)); } HRESULT SetDlgItemText( HWND parentDialog, int itemResID, const EncodedString& cypherText); HRESULT SetEvent(HANDLE event); HRESULT SetFilePointerEx( HANDLE handle, const LARGE_INTEGER& distanceToMove, LARGE_INTEGER* newPosition, DWORD moveMethod); HWND SetFocus(HWND window); bool SetForegroundWindow(HWND window); HRESULT SetSecurityDescriptorDacl( SECURITY_DESCRIPTOR& sd, bool daclPresent, ACL* dacl, // ptr not ref to allow null dacl bool daclDefaulted); #undef SetWindowFont void SetWindowFont(HWND window, HFONT font, bool redraw); #undef SetWindowLong HRESULT SetWindowLong( HWND window, int index, LONG value, LONG* oldValue = 0); #undef SetWindowLongPtr HRESULT SetWindowLongPtr( HWND window, int index, LONG_PTR value, LONG_PTR* oldValue = 0); HRESULT SetWindowPos( HWND window, HWND insertAfter, int x, int y, int width, int height, UINT flags); HRESULT SetWindowText(HWND window, const String& text); LPITEMIDLIST SHBrowseForFolder(BROWSEINFO& bi); HRESULT SHGetMalloc(LPMALLOC& pMalloc); String SHGetPathFromIDList(LPCITEMIDLIST pidl); HRESULT SHGetSpecialFolderLocation( HWND hwndOwner, int nFolder, LPITEMIDLIST& pidl); void ShowWindow(HWND window, int swOption); // 'Spin' is a synonym for 'Up-Down' control void Spin_GetRange(HWND spinControl, int* low, int* high); void Spin_SetRange(HWND spinControl, int low, int high); int Spin_GetPosition(HWND spinControl); void Spin_SetPosition(HWND spinControl, int position); #undef Static_SetIcon void Static_SetIcon(HWND staticText, HICON icon); String StringFromCLSID(const CLSID& clsID); // inline synonym inline String CLSIDToString(const CLSID& clsID) { return StringFromCLSID(clsID); } String StringFromGUID2(const GUID& guid); // inline synonym inline String GUIDToString(const GUID& guid) { return StringFromGUID2(guid); } HRESULT SystemParametersInfo( UINT action, UINT param, void* vParam, UINT WinIni); HRESULT TlsAlloc(DWORD& result); HRESULT TlsFree(DWORD index); HRESULT TlsSetValue(DWORD index, PVOID value); HRESULT TlsGetValue(DWORD index, PVOID& result); HRESULT UpdateWindow(HWND winder); bool ToolTip_AddTool(HWND toolTip, TOOLINFO& info); bool ToolTip_GetToolInfo(HWND toolTip, TOOLINFO& info); bool ToolTip_SetTitle(HWND toolTip, int icon, const String& title); void ToolTip_TrackActivate(HWND toolTip, bool activate, TOOLINFO& info); void ToolTip_TrackPosition(HWND toolTip, int xPos, int yPos); HRESULT UnregisterClass(const String& classname, HINSTANCE module); HRESULT WaitForSingleObject( HANDLE object, unsigned timeoutMillis, DWORD& result); HRESULT WideCharToMultiByte( DWORD flags, const String& string, char* buffer, size_t bufferSize, size_t& result); HRESULT WinHelp( HWND window, const String& helpFileName, UINT command, ULONG_PTR data); HRESULT WriteFile( HANDLE handle, const void* buffer, DWORD numberOfBytesToWrite, DWORD* numberOfBytesWritten); HRESULT WritePrivateProfileString( const String& section, const String& key, const String& value, const String& filename); } } // namespace Burnslib #endif // WIN_HPP_INCLUDED