windows-nt/Source/XPSP1/NT/base/ntsetup/books/bkres.c
2020-09-26 16:20:57 +08:00

198 lines
3.2 KiB
C

/*++
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);
}