windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/cmpmsg.cpp
2020-09-26 16:20:57 +08:00

217 lines
5.1 KiB
C++

#include "stdafx.h"
#include <stdarg.h>
#include "pbrush.h"
#include "pbrusfrm.h"
#include "pbrusvw.h"
#include "minifwnd.h"
#include "cmpmsg.h"
#ifdef _DEBUG
#undef THIS_FILE
static CHAR BASED_CODE THIS_FILE[] = __FILE__;
#endif
#include "memtrace.h"
//
//
// CmpCenterParent retrieves a window to which a modal dialog should
// be centered (relative center).
//
// NOTE: The return value may be temporary!
//
CWnd* CmpCenterParent()
{
CWnd* pPopupWnd = AfxGetMainWnd();;
ASSERT(pPopupWnd != NULL);
if (pPopupWnd->IsKindOf(RUNTIME_CLASS(CMiniFrmWnd)))
{
// don't center relative to mini-frame windows
CWnd* pParentWnd = pPopupWnd->GetParent();
// instead use parent or main window...
if (pParentWnd != NULL)
pPopupWnd = pParentWnd;
else
pPopupWnd = theApp.m_pMainWnd;
}
return pPopupWnd;
}
//
// composer message box, same interface as windows, but you give
// string id's not strings
//
// example: CmpMessageBox( IDS_OUTOFMEMORY, IDS_ERROR, MB_OK );
//
int CmpMessageBox( WORD wTextStringID, // string id of text
WORD wCaptionID, // string id of caption
UINT nType ) // same as message box
{
TCHAR FAR* lpText;
TCHAR FAR* lpCaption;
CString sText, sCaption;
if( wCaptionID == CMPNOSTRING )
lpCaption = NULL;
else
{
VERIFY( sCaption.LoadString( wCaptionID ) );
lpCaption = (TCHAR FAR*)(const TCHAR *)sCaption;
}
if( wTextStringID == CMPNOSTRING )
lpText = TEXT("");
else
{
VERIFY( sText.LoadString( wTextStringID ) );
lpText = (TCHAR FAR*)(const TCHAR *)sText;
}
CWnd *pcWnd = AfxGetMainWnd();
if (pcWnd != NULL)
{
return pcWnd->MessageBox(lpText, lpCaption, nType | MB_TASKMODAL);
}
else
{
return ::MessageBox(NULL, lpText, lpCaption,nType | MB_TASKMODAL);
}
}
int CmpMessageBoxString( CString& s,
WORD wCaptionID,
UINT nType )
{
TCHAR FAR* lpCaption;
CString sText, sCaption;
if( wCaptionID == CMPNOSTRING )
lpCaption = NULL;
else
{
VERIFY( sCaption.LoadString( wCaptionID ) );
lpCaption = (TCHAR FAR*)(const TCHAR *)sCaption;
}
CWnd *pcWnd = AfxGetMainWnd();
if (pcWnd != NULL)
{
return pcWnd->MessageBox((const TCHAR *)s, lpCaption,nType | MB_TASKMODAL);
}
else
{
return ::MessageBox(NULL, (const TCHAR *)s, lpCaption,nType | MB_TASKMODAL);
}
}
int CmpMessageBox2( WORD wTextStringID,
WORD wCaptionID,
UINT nType,
LPCTSTR szParam1,
LPCTSTR szParam2 )
{
TCHAR FAR* lpText;
TCHAR FAR* lpCaption;
CString sText, sCaption;
if( wCaptionID == CMPNOSTRING )
lpCaption = NULL;
else
{
VERIFY( sCaption.LoadString( wCaptionID ) );
lpCaption = (TCHAR FAR*)(const TCHAR *)sCaption;
}
if( wTextStringID == CMPNOSTRING )
lpText = TEXT("");
else
{
AfxFormatString2( sText, wTextStringID, szParam1, szParam2);
lpText = (TCHAR FAR*)(const TCHAR *)sText;
}
CWnd *pcWnd = AfxGetMainWnd();
if (pcWnd != NULL)
{
return pcWnd->MessageBox(lpText, lpCaption, nType | MB_TASKMODAL);
}
else
{
return ::MessageBox(NULL, lpText, lpCaption,nType | MB_TASKMODAL);
}
}
//
// composer message box, combines wsprintf, you continue to
// use string ids
//
// example:
//
// CmpMessageBoxPrintf( IDS_CANTOPEN, IDS_ERROR, MB_OK, lpszFileName );
//
#define nLocalBuf 512
extern "C" int CDECL
CmpMessageBoxPrintf(WORD wTextStringID, // string id of text (format)
WORD wCaptionID, // string id of caption
UINT nType, // same as message box
... ) // wsprintf arguments
{
TCHAR FAR* lpText;
TCHAR FAR* lpCaption;
CString sText, sCaption;
int nBuf;
TCHAR szBuffer[nLocalBuf];
va_list args;
va_start( args, nType );
if( wCaptionID == CMPNOSTRING )
lpCaption = NULL;
else
{
VERIFY( sCaption.LoadString( wCaptionID ) );
lpCaption = (TCHAR FAR*)(const TCHAR *)sCaption;
}
if( wTextStringID == CMPNOSTRING )
lpText = TEXT("");
else
{
VERIFY( sText.LoadString( wTextStringID ) );
lpText = (TCHAR FAR*)(const TCHAR *)sText;
}
nBuf = wvsprintf( szBuffer, lpText, args );
ASSERT( nBuf < nLocalBuf );
CWnd *pcWnd = AfxGetMainWnd();
if (pcWnd != NULL)
{
return pcWnd->MessageBox(szBuffer, lpCaption,nType | MB_TASKMODAL);
}
else
{
return ::MessageBox(NULL, szBuffer, lpCaption,nType | MB_TASKMODAL);
}
}