📄 wdemain.c
字号:
break;
case WM_ENDSESSION:
if ( !wParam ) {
WdeFatalExit = FALSE;
}
break;
case WM_QUERYENDSESSION:
if ( ret = WdeQueryKillApp ( FALSE ) ) {
WdeFatalExit = TRUE;
pass_to_def = FALSE;
}
break;
case WM_CLOSE:
// this prevents the user from closing the editor during
// DDE initialization
if( !wParam && !EnableMenuInput ) {
return( 0 );
}
/* clean up before we exit */
WdeCleanupStarted = TRUE;
if( wParam ) { // wParam is non-zero if the DDE connection died
WdeFatalExit = TRUE;
WdeQueryKillApp ( TRUE );
wParam = 0;
}
if( !WdeCleanup ( res_info, WdeFatalExit ) ) {
WdeCleanupStarted = FALSE;
pass_to_def = FALSE;
}
}
if ( pass_to_def ) {
ret = DefFrameProc( hWnd, hWinWdeMDIClient, message, wParam, lParam );
}
return ( ret );
}
Bool WdeIsMenuIDValid( HMENU menu, WORD id )
{
UINT st;
if( !EnableMenuInput ) {
return( FALSE );
}
if( WdeGetTestMode() ) {
if( id != IDM_TEST_MODE ) {
return( FALSE );
}
}
switch( id ) {
case IDM_TAB:
case IDM_STAB:
case IDM_ESCAPE:
case IDM_GOTO_INFOBAR:
return( TRUE );
}
if( menu == (HMENU) NULL ) {
menu = WdeGetMenuHandle();
}
handleInitMenu( menu );
st = GetMenuState( menu, id, MF_BYCOMMAND );
if ( ( st == -1 ) || ( ( st & MF_GRAYED ) == MF_GRAYED ) ) {
return( FALSE );
}
return( TRUE );
}
Bool WdeSetDialogMode( WORD id )
{
OBJPTR obj;
WdeOrderMode mode;
switch ( id ) {
case IDM_SET_ORDER:
mode = WdeSetOrder;
break;
case IDM_SET_TABS:
mode = WdeSetTabs;
break;
case IDM_SET_GROUPS:
mode = WdeSetGroups;
break;
}
if( ( obj = WdeGetCurrentDialog() ) ) {
if( Forward( obj, SET_ORDER_MODE, &mode, NULL ) ) {
return( TRUE );
}
}
return( FALSE );
}
Bool WdeSaveCurrentDialog ( WORD menu_id )
{
OBJPTR obj;
if ( ( obj = WdeGetCurrentDialog() ) ) {
return ( Forward ( obj, SAVE_OBJECT, &menu_id, NULL ) );
}
return ( FALSE );
}
Bool WdeRestoreCurrentDialog ( void )
{
OBJPTR obj;
if( ( obj = WdeGetCurrentDialog() ) ) {
return( Forward ( obj, RESTORE_OBJECT, NULL, NULL ) );
}
return ( FALSE );
}
Bool WdeHideCurrentDialog( void )
{
OBJPTR obj;
Bool user_action, hide;
if( ( obj = WdeGetCurrentDialog() ) ) {
user_action = FALSE;
hide = TRUE;
return( Forward( obj, DESTROY, &user_action, &hide ) );
}
return( FALSE );
}
void WdeHandleSizeToText ( void )
{
OBJPTR obj;
LIST *l;
l = WdeGetCurrObjectList();
for ( ; l; l = ListConsume ( l ) ) {
obj = ListElement ( l );
Forward ( obj, SIZE_TO_TEXT, NULL, NULL );
}
}
void WdeHandleTabEvent ( Bool up )
{
OBJPTR obj;
if( !WdeGetNumRes() ) {
return;
}
if( obj = WdeGetNextObject ( up, NULL, NULL ) ) {
MakeObjectCurrent ( obj );
HideSelectBoxes();
WdeHandleGotoCurrentObject();
ShowSelectBoxes();
}
}
LRESULT WdeHandleMDIArrangeEvents ( WORD w )
{
UINT msg;
WPARAM wp;
wp = 0;
switch ( w ) {
case IDM_MDI_CASCADE:
msg = WM_MDICASCADE;
break;
case IDM_MDI_TILEV:
msg = WM_MDITILE;
wp = MDITILE_VERTICAL;
break;
case IDM_MDI_TILEH:
msg = WM_MDITILE;
wp = MDITILE_HORIZONTAL;
break;
case IDM_MDI_ARRANGE:
msg = WM_MDIICONARRANGE;
break;
default:
return ( FALSE );
}
return ( SendMessage ( hWinWdeMDIClient, msg, wp, 0 ) );
}
void WdeUpdateScreenPosOpt ( void )
{
RECT rect;
GetWindowRect ( hWinWdeMain, &rect );
WdeSetScreenPosOption ( &rect );
}
void WdeResizeWindows ( void )
{
RECT rect;
int info_depth;
int stat_depth;
int ribbon_depth;
if ( !WdeCleanupStarted ) {
info_depth = WdeGetInfoWindowDepth(),
stat_depth = WdeGetStatusDepth (),
ribbon_depth = WdeGetRibbonHeight();
GetClientRect ( hWinWdeMain, &rect );
MoveWindow( hWinWdeMDIClient,
0, info_depth + ribbon_depth,
( rect.right - rect.left ),
( rect.bottom -
(rect.top+stat_depth+info_depth+ribbon_depth) ),
TRUE );
WdeResizeStatusWindows ( &rect );
WdeResizeRibbon ( &rect );
WdeResizeInfoWindow ( &rect );
}
}
Bool WdeCleanup ( WdeResInfo *res_info, Bool fatal_exit )
{
/* clean up before we exit */
if ( WdeGetTestMode() ) {
WdeHandleTestModeMenu ( res_info );
}
// must be done before FMEDIT is shutdown
if( FMPasteValid() ) {
FMResetClipboard();
}
WdeSetOption( WdeOptIsCntlsTBarVisible, WdeControlsToolBarExists() );
if( WdeQueryKillApp( fatal_exit ) ) {
WdeFreeResList ();
} else {
return ( FALSE );
}
WdeFiniHints ();
WdeFreeAllCustLibs ();
#ifndef __NT__
WdeFreeCustRESProcs ();
#endif
WdeShutdownToolBars ();
WdeSetOption( WdeOptIsScreenMax, IsZoomed( hWinWdeMain ) );
WdeOptsShutdown ();
WdeFreeControlIDs ( );
WdeSetAppMenuToRes ( FALSE );
DestroyMenu ( WdeResMenu );
DestroyMenu ( WdeDDEMenu );
WdeFiniToolMenu ();
WdeShutdownControls ();
WdeDestroyRibbon ();
WdeShutdownRibbon ();
WdeFiniCreateTable ();
WdeFiniOrderStuff ();
/* get rid of all the child windows of the main application window */
WdeDestroyInfoWindow();
WdeInfoFini();
WdeDestroyStatusLine ();
WdeFiniEditClass();
WdeFiniResStrings();
WdeFreeFontList();
WdeCtl3DFini( hInstWde );
WdeFreeFileFilter();
JDialogFini();
return( TRUE );
}
Bool WdeIsDDEArgs( char **argv, int argc )
{
int i;
for( i = 1; i<argc; i++ ) {
if( !stricmp( argv[i], DDE_OPT ) ) {
return( TRUE );
}
}
return( FALSE );
}
Bool WdeProcessArgs( char **argv, int argc )
{
int i;
Bool ok;
ok = TRUE;
for( i = 1; i<argc; i++ ) {
if( !stricmp( argv[i], CREATE_NEW_FLAG ) ) {
WdeCreateNewFiles = TRUE;
} else if( stricmp( argv[i], DDE_OPT ) ) {
if( WRFileExists( argv[i] ) ) {
ok = WdeOpenResource( argv[i] ) && ok;
} else if( WdeCreateNewFiles ) {
ok = ( WdeCreateNewResource( argv[i] ) != NULL ) && ok;
} else {
ok = FALSE;
}
}
}
if( !ok ) {
WdeSetStatusByID( -1, WDE_INPUTFILENOTFOUND );
}
return( ok );
}
void WdeDisplayAboutBox ( HINSTANCE inst, HWND parent, UINT msecs )
{
FARPROC lpProcAbout;
lpProcAbout = MakeProcInstance ( (FARPROC) WdeAbout, hInstWde );
JDialogBoxParam ( inst, "WdeAboutBox", parent, (DLGPROC) lpProcAbout,
(LPARAM) &msecs );
FreeProcInstance ( lpProcAbout );
}
Bool WINEXPORT WdeAbout( HWND hDlg, WORD message,
WPARAM wParam, LPARAM lParam )
{
UINT msecs, timer, start;
HDC dc, tdc;
HBITMAP old;
HWND w666;
RECT rect, arect;
PAINTSTRUCT ps;
WORD w;
char *title;
static BITMAP bm;
static HBITMAP logo;
static HBRUSH brush;
static COLORREF color;
switch ( message ) {
case WM_SYSCOLORCHANGE:
WdeCtl3dColorChange ();
break;
case WM_DESTROY:
if ( logo ) {
DeleteObject ( logo );
}
if ( brush ) {
DeleteObject ( brush );
}
break;
case WM_INITDIALOG:
msecs = *((UINT *)lParam);
if ( msecs ) {
timer = SetTimer ( hDlg, ABOUT_TIMER, msecs, NULL );
if ( timer ) {
title = WdeAllocRCString( WDE_APPTITLE );
SetWindowLong ( hDlg, DWL_USER, (LONG) timer );
ShowWindow ( GetDlgItem ( hDlg, IDOK ), SW_HIDE );
SendMessage ( hDlg, WM_SETTEXT, 0, (LPARAM)title );
if( title ) {
WdeFreeRCString( title );
}
}
}
logo = LoadBitmap ( hInstWde, "AboutLogo" );
/*
color = GetSysColor ( COLOR_BTNFACE );
color = RGB(128,128,128);
*/
color = GetSysColor ( COLOR_BTNFACE );
brush = CreateSolidBrush ( color );
GetObject ( logo, sizeof(BITMAP), &bm );
return( TRUE );
#if 0
#ifdef __NT__
case WM_CTLCOLORSTATIC:
if ( brush ) {
dc = (HDC) wParam;
SetBkColor ( dc, color );
return ( (LRESULT) brush );
}
break;
#else
case WM_CTLCOLOR:
if ( brush ) {
dc = (HDC) wParam;
if ( HIWORD(lParam) == CTLCOLOR_STATIC ) {
SetBkColor ( dc, color );
}
return ( (LRESULT) brush );
}
break;
#endif
case WM_ERASEBKGND:
if ( brush ) {
GetClientRect( hDlg, &rect );
UnrealizeObject( brush );
FillRect( (HDC)wParam, &rect, brush );
return ( TRUE );
}
break;
#endif
case WM_PAINT:
dc = BeginPaint ( hDlg, &ps );
if ( dc ) {
w666 = GetDlgItem ( hDlg, 666 );
GetClientRect ( w666, &rect );
GetClientRect ( hDlg, &arect );
start = ( arect.right - arect.left - bm.bmWidth ) / 2;
MapWindowPoints ( w666, hDlg, (POINT *) &rect, 2 );
tdc = CreateCompatibleDC ( dc );
old = SelectObject ( tdc, logo );
BitBlt ( dc, start, rect.top + 20, bm.bmWidth, bm.bmHeight,
tdc, 0, 0, SRCCOPY );
SelectObject ( tdc, old );
DeleteDC ( tdc );
EndPaint ( hDlg, &ps );
}
break;
case WM_TIMER:
timer = (UINT) GetWindowLong ( hDlg, DWL_USER );
if ( timer ) {
KillTimer ( hDlg, timer );
}
EndDialog ( hDlg, TRUE );
return ( TRUE );
break;
case WM_COMMAND:
w = LOWORD(wParam);
if ( ( w == IDOK ) || ( w == IDCANCEL ) ) {
timer = (UINT) GetWindowLong ( hDlg, DWL_USER );
if ( timer ) {
KillTimer ( hDlg, timer );
}
EndDialog(hDlg, TRUE);
return ( TRUE );
}
break;
}
return ( FALSE );
}
void CALLBACK WdeHelpRoutine( void )
{
WWinHelp( hWinWdeMain, "resdlg.hlp", HELP_CONTENTS, 0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -