|
|
/*++
Copyright (c) 1993 Microsoft Corporation
Module Name:
bkmem.c
Abstract:
Resource manipulation routines for online books program.
Author:
Ted Miller (tedm) 5-Jan-1995
Revision History:
--*/
#include "books.h"
PWSTR MyLoadString( IN UINT StringId )
/*++
Routine Description:
Load a string from the application's string table resource and place it into a buffer.
Arguments:
StringId - supplies the string table id of the string to be retreived.
Return Value:
Pointer to a buffer containing the string. If any error occured the buffer will be empty.
The caller can free the buffer via MyFree when done with it.
--*/
{ WCHAR buf[4096]; int i; PWSTR p;
i = LoadString(hInst,StringId,buf,sizeof(buf)/sizeof(buf[0]));
if(!i) { buf[0] = 0; }
return DupString(buf); }
int MessageBoxFromMessage( IN HWND Owner, IN UINT MessageId, IN UINT CaptionStringId, IN UINT Style, ... )
/*++
Routine Description:
Display a message box whose text is a formatted message and whose caption is a string in the application's string resources.
Arguments:
Owner - supplied handle of owner window
MessageId - supplies id of message in message table resources
CaptionStringId - supplies id of string in string resources. If this value is 0 the default ("Error") is used.
Style - supplies style flags to be passed to MessageBox
Return Value:
Return value from MessageBox.
--*/
{ PWSTR Text,Caption; va_list arglist; DWORD d; int i;
va_start(arglist,Style);
d = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, hInst, MessageId, 0, (LPTSTR)&Text, 0, &arglist );
va_end(arglist);
if(!d) { OutOfMemory(); }
Caption = CaptionStringId ? MyLoadString(CaptionStringId) : NULL;
i = MessageBox(Owner,Text,Caption,Style);
if(Caption) { MyFree(Caption); }
LocalFree(Text);
return(i); }
PWSTR RetreiveMessage( IN UINT MessageId, ... )
/*++
Routine Description:
Retreive and format a message from the application's message resources.
Arguments:
MessageId - supplies the message id of the message to be retreived and formatted.
... - additional arguments supply strings to be inserted into the message as it is formatted.
Return Value:
Pointer to a buffer containing the string. If any error occured the buffer will be empty.
The caller can free the buffer via MyFree when done with it.
--*/
{ va_list arglist; DWORD d; PWSTR p,q;
va_start(arglist,MessageId);
d = FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE, hInst, MessageId, 0, (LPTSTR)&p, 0, &arglist );
va_end(arglist);
if(!d) { OutOfMemory(); }
//
// Move the string to a buffer allocated with MyAlloc so the caller
// can use MyFree instead of LocalFree (to avoid confusion).
//
q = DupString(p); LocalFree((HLOCAL)p); return(q); }
|