132 lines
2.5 KiB
C
132 lines
2.5 KiB
C
|
#include "precomp.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
|
||
|
int
|
||
|
MessageBoxFromMessageV(
|
||
|
IN HWND Window,
|
||
|
IN DWORD MessageId,
|
||
|
IN BOOL SystemMessage,
|
||
|
IN LPCTSTR CaptionString,
|
||
|
IN UINT Style,
|
||
|
IN va_list *Args
|
||
|
)
|
||
|
{
|
||
|
TCHAR Caption[512];
|
||
|
TCHAR Buffer[5000];
|
||
|
|
||
|
if((DWORD_PTR)CaptionString > 0xffff) {
|
||
|
//
|
||
|
// It's a string already.
|
||
|
//
|
||
|
lstrcpyn(Caption,CaptionString,sizeof(Caption)/sizeof(TCHAR));
|
||
|
} else {
|
||
|
//
|
||
|
// It's a string id
|
||
|
//
|
||
|
if(!LoadString(hInst,PtrToUlong(CaptionString),Caption,sizeof(Caption)/sizeof(TCHAR))) {
|
||
|
Caption[0] = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
FormatMessage(
|
||
|
SystemMessage ? FORMAT_MESSAGE_FROM_SYSTEM : FORMAT_MESSAGE_FROM_HMODULE,
|
||
|
NULL,
|
||
|
MessageId,
|
||
|
0,
|
||
|
Buffer,
|
||
|
sizeof(Buffer) / sizeof(TCHAR),
|
||
|
Args
|
||
|
);
|
||
|
|
||
|
return(MessageBox(Window,Buffer,Caption,Style|MB_SETFOREGROUND));
|
||
|
}
|
||
|
|
||
|
|
||
|
int
|
||
|
MessageBoxFromMessage(
|
||
|
IN HWND Window,
|
||
|
IN DWORD MessageId,
|
||
|
IN BOOL SystemMessage,
|
||
|
IN LPCTSTR CaptionString,
|
||
|
IN UINT Style,
|
||
|
...
|
||
|
)
|
||
|
{
|
||
|
va_list arglist;
|
||
|
int i;
|
||
|
|
||
|
va_start(arglist,Style);
|
||
|
|
||
|
i = MessageBoxFromMessageV(Window,MessageId,SystemMessage,CaptionString,Style,&arglist);
|
||
|
|
||
|
va_end(arglist);
|
||
|
|
||
|
return(i);
|
||
|
}
|
||
|
|
||
|
|
||
|
int
|
||
|
MessageBoxFromMessageAndSystemError(
|
||
|
IN HWND Window,
|
||
|
IN DWORD MessageId,
|
||
|
IN DWORD SystemMessageId,
|
||
|
IN LPCTSTR CaptionString,
|
||
|
IN UINT Style,
|
||
|
...
|
||
|
)
|
||
|
{
|
||
|
va_list arglist;
|
||
|
TCHAR Caption[512];
|
||
|
TCHAR Buffer1[1024];
|
||
|
TCHAR Buffer2[1024];
|
||
|
int i;
|
||
|
|
||
|
//
|
||
|
// Fetch the non-system part. The arguments are for that part of the
|
||
|
// message -- the system part has no inserts.
|
||
|
//
|
||
|
va_start(arglist,Style);
|
||
|
|
||
|
FormatMessage(
|
||
|
FORMAT_MESSAGE_FROM_HMODULE,
|
||
|
NULL,
|
||
|
MessageId,
|
||
|
0,
|
||
|
Buffer1,
|
||
|
sizeof(Buffer1) / sizeof(TCHAR),
|
||
|
&arglist
|
||
|
);
|
||
|
|
||
|
va_end(arglist);
|
||
|
|
||
|
//
|
||
|
// Now fetch the system part.
|
||
|
//
|
||
|
FormatMessage(
|
||
|
FORMAT_MESSAGE_FROM_SYSTEM,
|
||
|
NULL,
|
||
|
MessageId,
|
||
|
0,
|
||
|
Buffer2,
|
||
|
sizeof(Buffer2) / sizeof(TCHAR),
|
||
|
&arglist
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Now display the message, which is made up of two parts that get
|
||
|
// inserted into MSG_ERROR_WITH_SYSTEM_ERROR.
|
||
|
//
|
||
|
i = MessageBoxFromMessage(
|
||
|
Window,
|
||
|
MSG_ERROR_WITH_SYSTEM_ERROR,
|
||
|
FALSE,
|
||
|
CaptionString,
|
||
|
Style,
|
||
|
Buffer1,
|
||
|
Buffer2
|
||
|
);
|
||
|
|
||
|
return(i);
|
||
|
}
|