guimain.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 586 行 · 第 1/2 页
C
586 行
}
ret = FALSE;
break;
case GUI_MOVE:
if( WndMain != NULL && WndIsMinimized( WndMain ) ) return;
WndResizeHook( wnd );
break;
case GUI_FONT_CHANGED :
if( wnd == WndMain ) {
GUIResizeStatusWindow( gui, 0, 0 );
}
WndFontHook( wnd );
WndResetScroll( wnd );
case GUI_RESIZE:
_Clr( wnd, WSW_ICONIFIED );
cursor = WndHourGlass( NULL );
WndMoveResize( wnd );
ret = WndEvent( wnd, GUI_RESIZE, parm );
WndSetThumb( wnd );
WndHourGlass( cursor );
break;
case GUI_LBUTTONDBLCLK:
_Clr( wnd, WSW_CLICKED );
_Set( wnd, WSW_DCLICKED );
WndLButtonDown( wnd, parm );
break;
case GUI_LBUTTONDOWN:
_Clr( wnd, WSW_DCLICKED );
_Set( wnd, WSW_CLICKED );
WndLButtonDown( wnd, parm );
break;
case GUI_LBUTTONUP:
cursor = WndHourGlass( NULL );
if( _Is( wnd, WSW_DCLICKED ) ) {
WndLDblClk( wnd, parm );
} else if( _Is( wnd, WSW_CLICKED ) ) {
WndLButtonUp( wnd, parm );
}
_Clr( wnd, WSW_CLICKED );
_Clr( wnd, WSW_DCLICKED );
WndHourGlass( cursor );
break;
case GUI_RBUTTONDOWN:
WndRButtonDown( wnd, parm );
break;
case GUI_RBUTTONUP:
cursor = WndHourGlass( NULL );
WndRButtonUp( wnd, parm );
WndHourGlass( cursor );
break;
case GUI_MOUSEMOVE:
WndMouseMove( wnd, parm );
break;
case GUI_CLICKED:
GUI_GETID( parm, id );
if( WndClickHook != NULL && WndClickHook( wnd, id ) ) break;
cursor = WndHourGlass( NULL );
WndClick( wnd, id );
WndHourGlass( cursor );
break;
case GUI_PAINT:
if( _Isnt( wnd, WSW_REPAINT ) ) { // going to repaint anyway
WndProcPaint( wnd, parm );
}
break;
case GUI_SCROLL_BOTTOM :
WndScrollBottom( wnd );
break;
case GUI_SCROLL_TOP :
WndScrollTop( wnd );
break;
case GUI_KEYUP:
ret = FALSE;
break;
case GUI_KEYDOWN:
GUI_GET_KEY_STATE( parm, key, state );
if( GUI_CTRL( state ) ) {
switch( key ) {
case GUI_KEY_TAB:
key = GUI_KEY_CTRL_I;
break;
case GUI_KEY_ENTER:
key = GUI_KEY_CTRL_M;
break;
case GUI_KEY_BACKSPACE:
key = GUI_KEY_CTRL_H;
break;
case GUI_KEY_ESCAPE:
key = GUI_KEY_CTRL_LEFT_BRACKET;
break;
default :
break;
}
}
if( GUI_IS_ASCII( key ) && _Is( wnd, WSW_CHOOSING ) &&
wnd->keypiece != WND_NO_PIECE && WndKeyChar( key ) ) {
if( !WndKeyChoose( wnd, key ) ) {
Ring();
}
break;
}
cursor = WndHourGlass( NULL );
if( !WndProcMacro( wnd, key ) ) {
switch( key ) {
case GUI_KEY_HOME:
if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
WndCursorStart( wnd );
break;
case GUI_KEY_ESCAPE:
WndKeyEscape( wnd );
break;
case GUI_KEY_END:
if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
WndCursorEnd( wnd );
break;
case GUI_KEY_BACKSPACE:
WndKeyRubOut( wnd );
break;
case GUI_KEY_ENTER:
WndKeyEnter( wnd );
break;
case GUI_KEY_SHIFT_TAB:
WndTabLeft( wnd, TRUE );
break;
case GUI_KEY_TAB:
WndTabRight( wnd, TRUE );
break;
case GUI_KEY_LEFT:
if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
WndCursorLeft( wnd );
break;
case GUI_KEY_RIGHT:
if( GUI_SHIFT( state ) ) WndToSelectMode( wnd );
WndCursorRight( wnd );
break;
case GUI_KEY_PAGEDOWN:
if( WndEvent( wnd, GUI_SCROLL_PAGE_DOWN, parm ) ) break;
WndPageDown( wnd );
break;
case GUI_KEY_PAGEUP:
if( WndEvent( wnd, GUI_SCROLL_PAGE_UP, parm ) ) break;
WndPageUp( wnd );
break;
case GUI_KEY_UP:
if( _Is( wnd, WSW_MAP_CURSOR_TO_SCROLL ) ) {
WndScrollUp( wnd );
} else {
if( _Is( wnd, WSW_MULTILINE_SELECT ) && GUI_SHIFT( state ) ) {
WndToSelectMode( wnd );
}
WndCursorUp( wnd );
}
break;
case GUI_KEY_DOWN:
if( _Is( wnd, WSW_MAP_CURSOR_TO_SCROLL ) ) {
WndScrollDown( wnd );
} else {
if( _Is( wnd, WSW_MULTILINE_SELECT ) && GUI_SHIFT( state ) ) {
WndToSelectMode( wnd );
}
WndCursorDown( wnd );
}
break;
case GUI_KEY_CTRL_HOME:
WndScrollTop( wnd );
break;
case GUI_KEY_CTRL_END:
WndScrollBottom( wnd );
break;
default:
ret = FALSE;
break;
}
}
if( ret ) {
GUIFlushKeys();
}
WndHourGlass( cursor );
break;
case GUI_DESTROY:
WndDestroy( wnd );
break;
case GUI_ICONIFIED:
_Set( wnd, WSW_ICONIFIED );
if( wnd == WndNext( NULL ) ) {
WndNextNonIconToFront( WndNext( wnd ) );
}
break;
case GUI_QUERYENDSESSION:
ret = !WndQueryEndSessionHook();
break;
case GUI_ENDSESSION:
{
bool endsession;
GUI_GET_BOOL( parm, endsession );
if( endsession ) {
WndEndSessionHook();
}
}
break;
case GUI_CLOSE:
if( wnd == WndMain ) {
ret = WndShutDownHook();
} else {
WndResizeHook( wnd );
ret = TRUE;
}
break;
case GUI_TOOLBAR_FLOATING:
case GUI_TOOLBAR_FIXED:
case GUI_TOOLBAR_DESTROYED:
WndSetToolBar( event );
ret = TRUE;
break;
case GUI_HSCROLL_NOTIFY:
WndHScrollNotify( wnd );
break;
default:
ret = FALSE;
break;
}
if( !WndDoingRefresh && wndProcNesting == 1 ) WndDoInput();
if( WndValid( wnd ) ) { // could have been freed
WndEndSelectEvent( wnd );
WndSayMatchMode( wnd );
}
WndFreshAll();
spawnp->ret = ret;
return;
}
void *WndHourCursor( void )
{
if( GUIIsGUI() ) {
wndCursorType = GUI_HOURGLASS_CURSOR;
return( GUISetMouseCursor( GUI_HOURGLASS_CURSOR ) );
} else {
if( BusyString == NULL ) {
BusyString = WndLoadString( LITERAL_Busy );
}
WndInternalStatusText( BusyString );
return( "" );
}
}
void *WndArrowCursor( void )
{
if( GUIIsGUI() ) {
wndCursorType = GUI_ARROW_CURSOR;
return( GUISetMouseCursor( GUI_ARROW_CURSOR ) );
} else {
WndResetStatusText();
return( "" );
}
}
void *WndSetCursor( void *to )
{
if( GUIIsGUI() ) {
wndCursorType = GUI_ARROW_CURSOR;
GUIResetMouseCursor( to );
} else {
WndResetStatusText();
}
return( NULL );
}
void *WndHourGlass( void *to )
{
if( to != NULL ) {
return( WndSetCursor( to ) );
} else {
return( WndHourCursor() );
}
}
extern GUICALLBACK WndMainEventProc;
bool WndMainEventProc( gui_window * gui, gui_event event, void *parm )
{
spawn_parms spawnp;
spawnp.gui = gui;
spawnp.event = event;
spawnp.parm = parm;
wndProcNesting++;
SpawnP( ( void (*) (void *) )DoMainEventProc, &spawnp );
wndProcNesting--;
return( spawnp.ret );
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?