/*++

Copyright (c) 1997  Microsoft Corporation

Module Name:

    msgi.h

Abstract:

    Message box routines

Author:

    Vlad Sadovsky   (vlads) 26-Jan-1997

Revision History:

    26-Jan-1997     VladS       created

--*/

#include "cplusinc.h"
#include "sticomm.h"

extern HINSTANCE    g_hInstance;


int MsgBox( HWND hwndOwner, UINT idMsg, UINT wFlags, const TCHAR  *aps[] /* = NULL */ )
{

    STR     strTitle;
    STR     strMsg;

    strTitle.LoadString(IDS_MSGTITLE);

    if (aps == NULL)
        strMsg.LoadString( idMsg );
    else
        strMsg.FormatString(idMsg,aps);

    return ::MessageBox( hwndOwner, strMsg.QueryStr(), strTitle.QueryStr(), wFlags | MB_SETFOREGROUND );
}

/*
 * MsgBoxPrintf
 * ------------
 *
 * Message box routine
 *
 */
UINT    MsgBoxPrintf(HWND hwnd,UINT uiMsg,UINT uiTitle,UINT uiFlags,...)
{
    STR     strTitle;
    STR     strMessage;
    LPTSTR   lpFormattedMessage = NULL;
    UINT    err;
    va_list start;

    va_start(start,uiFlags);

    strMessage.LoadString(uiMsg);

    err = ::FormatMessage(FORMAT_MESSAGE_FROM_STRING  | FORMAT_MESSAGE_ALLOCATE_BUFFER,
                        (LPVOID)strMessage.QueryStr(),
                        // FORMAT_MESSAGE_FROM_HMODULE,
                        //::g_hmodThisDll,
                        uiMsg,                  // Message resource id
                        NULL,                   // Language id
                        (LPTSTR)&lpFormattedMessage,    // Return pointer to fromatted text
                        255,                        // Min.length
                        &start
                        );

    if (!err || !lpFormattedMessage) {
        err = GetLastError();
        return err;
    }

    strTitle.LoadString(uiTitle);

    err = ::MessageBox(hwnd,
                       lpFormattedMessage,
                       strTitle.QueryStr(),
                       uiFlags);

    ::LocalFree(lpFormattedMessage);

    return err;

}

#if 0
/*
 * LoadMsgPrintf
 * -------------
 *
 * Uses normal printf style format string
 */
UINT
LoadMsgPrintf(
    NLS_STR&    nlsMessage,
    UINT        uiMsg,
    ...
    )
{
    LPSTR   lpFormattedMessage = NULL;
    UINT    err;
    va_list start;

    va_start(start,uiMsg);

    nlsMessage.LoadString(uiMsg);

#ifdef USE_PRINTF_STYLE

    lpFormattedMessage = ::LocalAlloc(GPTR,255);    // BUGBUG

    if (!lpFormattedMessage) {
        Break();
        return WN_OUT_OF_MEMORY;
    }

    ::wsprintf(lpFormattedMessage,
               nlsMessage.QueryPch(),
               &start);

#else

    err = ::FormatMessage(FORMAT_MESSAGE_FROM_STRING  | FORMAT_MESSAGE_ALLOCATE_BUFFER,
                        nlsMessage,
                        //| FORMAT_MESSAGE_FROM_HMODULE,
                        //::g_hmodThisDll,
                        uiMsg,                  // Message resource id
                        NULL,                   // Language id
                        (LPTSTR)&lpFormattedMessage,    // Return pointer to fromatted text
                        255,                        // Min.length
                        &start
                        );

    if (!err || !lpFormattedMessage) {
        err = GetLastError();
        return err;
    }

#endif

    nlsMessage = lpFormattedMessage;

    ::LocalFree(lpFormattedMessage);

    return WN_SUCCESS;

}
#endif