⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnd.cpp

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 CPP
字号:
/*** wnd.cpp - native toplevel window related functions** Copyright (c) 1999*      Transvirtual Technologies, Inc.  All rights reserved.** See the file "license.terms" for information on usage and redistribution * of this file. */#include "toolkit.hpp"#if defined(UNDER_CE)#include <commctrl.h>extern "C" HINSTANCE appInstance;#endifextern UINT KWM_DESTROY;class KWindow:public KWnd {public:	KWindow( HWND parent, TCHAR* title, int style, int x, int y, int width, int height) {		RECT rcl = { x, y, x+width, y+height };		style |= WS_CLIPCHILDREN;		AdjustWindowRectEx( &rcl, style, FALSE, 0);		setInsets( x-rcl.left, y-rcl.top, rcl.right-x-width, rcl.bottom-y-height, true);		hwnd = CreateWindow( TEXT("window"), title, style,					x, y, width, height,					parent, (HMENU)0, NULL, NULL);		defWndProc = (WNDPROC)DefWindowProc;		#if defined(UNDER_CE)		hbar = NULL;#endif	}		void KWindow::setInsets( int xl, int yt, int xr,int yb, bool notify) {		jclass frCls;				jmethodID setDecoInsets;				insets.left = xl;		insets.right = xr;		insets.bottom = yb;		insets.top = yt;				if ( notify) {			frCls = JniEnv->FindClass( "java/awt/Frame");			setDecoInsets = JniEnv->GetStaticMethodID( frCls, "setDecoInsets", "(IIIII)V");						X->frameInsets.left = xl;			X->frameInsets.right = xr;			X->frameInsets.bottom = yb;			X->frameInsets.top = yt;						JniEnv->CallStaticVoidMethod( frCls, setDecoInsets, yt, xl, yb, xr, -1);		}	}			bool KWindow::OnPaint( int x, int y, int width, int height){		PAINTSTRUCT ps;		HDC hdc;						//map to frame extends		width += insets.left + insets.right;		height += insets.bottom + insets.top;				hdc = BeginPaint( hwnd, &ps);		if ( ps.fErase )			FillRect( ps.hdc, &ps.rcPaint, brush);				EndPaint( hwnd, &ps);				X->jEvt = JniEnv->CallStaticObjectMethod( PaintEvent, getPaintEvent,					srcIdx, PAINT, //ps.fErase ? UPDATE : PAINT,					x, y, width, height );							return true;	}		bool KWindow::OnActivate( int flags, bool min, HWND handle ) {		//handled by java				return false;	}		bool KWindow::OnCommand( int cmd) {		HMENU hmenu = GetMenu( hwnd);#if defined(UNDER_CE)		if ( !hmenu && hbar )			hmenu = CommandBar_GetMenu( hbar, 0);#endif		if ( hmenu )			processMenuAction( hmenu, cmd);		return false;	}			bool KWindow::OnPosChanged( int x, int y, int width, int height) {		X->jEvt = JniEnv->CallStaticObjectMethod( ComponentEvent, getComponentEvent,			srcIdx, COMPONENT_RESIZED,			x, y, width, height) ;				return true;	}			bool KWindow::OnClose() {		X->jEvt = JniEnv->CallStaticObjectMethod( WindowEvent, getWindowEvent,			srcIdx, WINDOW_CLOSING);				return true;	}			bool KWindow::OnSetCursor() {		SetCursor( cursor);						return TRUE;	}		bool KWindow::updateInsets() {	/*	* called by Menu assign to detect appropriate	* client insets		*/		RECT rcl, rclc;				GetClientRect( hwnd, &rclc);				rcl.left = rclc.left;		rcl.top  = rclc.top;		rcl.right = rclc.right;		rcl.bottom = rclc.bottom;#if !defined(UNDER_CE)		AdjustWindowRectEx( &rclc, GetWindowLong( hwnd, GWL_STYLE), (GetMenu( hwnd) != NULL), 0);#else		AdjustWindowRectEx( &rclc, GetWindowLong( hwnd, GWL_STYLE), 0, 0);		if ( hbar )			rclc.top += CommandBar_Height( hbar);#endif		setInsets( rcl.left-rclc.left,				rcl.top-rclc.top,				rclc.right-rcl.right,				rclc.bottom-rcl.bottom, false );				return TRUE;	}	};extern "C" {		void __cdecl		Java_java_awt_Toolkit_wndSetTitle ( JNIEnv* env, jclass clazz, KWindow* wnd, jstring jTitle )	{		wnd->setText( jTitle);	}			void __cdecl		Java_java_awt_Toolkit_wndSetResizable ( JNIEnv* env, jclass clazz, KWindow* wnd, jboolean isResizable,		int x, int y, int width, int height )	{		int style;				DBG( awt_wnd, ("setResizable: %x, %d, %d,%d,%d,%d\n", wnd, isResizable, x,y,width,height));				style = GetWindowLong( wnd->hwnd, GWL_STYLE);				if ( isResizable) {			style &= ~WS_BORDER;			style |= WS_THICKFRAME;		}		else {			style |= WS_BORDER;			style &= ~WS_THICKFRAME;		}				SetWindowLong( wnd->hwnd, GWL_STYLE, style);	}		void* __cdecl		Java_java_awt_Toolkit_wndCreateFrame ( JNIEnv* env, jclass clazz, jstring jTitle,		jint x, jint y, jint width, jint height,		jint jCursor, jint clrBack, jboolean isResizable )	{				DBG( awt_wnd, ("createFrame( %p, %d,%d,%d,%d,..)\n", jTitle,x,y,width,height));				KWindow* wnd;		TCHAR* title;#if !defined(D_LOOP_MODE)		if ( !X->dspTid )			X->dspTid = GetCurrentThreadId();#endif		title = java2WinString( env, X, jTitle);		wnd = new KWindow( NULL, title, WS_OVERLAPPEDWINDOW, x, y, width, height);		DBG( awt_wnd, (" -> %x\n", wnd->hwnd));				if ( !isResizable ) {			Java_java_awt_Toolkit_wndSetResizable( env, clazz,				wnd, FALSE, x, y, width, height);					}				return wnd;			}			void* __cdecl		Java_java_awt_Toolkit_wndCreateWindow ( JNIEnv* env, jclass clazz, KWindow* owner,		jint x, jint y, jint width, jint height,		jint jCursor, jint clrBack )	{		KWindow* wnd;				DBG( awt_wnd, ("createWindow( %p, %d,%d,%d,%d,..)\n", owner,x,y,width,height));				wnd = new KWindow( owner ? owner->hwnd : NULL, TEXT(""), WS_POPUP, x, y, width, height);				DBG( awt_wnd, (" -> %x\n", wnd->hwnd));				return wnd;	}		void* __cdecl				Java_java_awt_Toolkit_wndCreateDialog ( JNIEnv* env, jclass clazz, KWindow* owner, jstring jTitle,		jint x, jint y, jint width, jint height,		jint jCursor, jint clrBack, jboolean isResizable )	{		DBG( awt_wnd, ("createDialog( %p,%p, %d,%d,%d,%d,..)\n", owner,jTitle,x,y,width,height));				KWindow* wnd;		TCHAR* title;						title = java2WinString( env, X, jTitle);		wnd = new KWindow( owner->hwnd, title, WS_OVERLAPPEDWINDOW, x, y, width, height);				DBG( awt_wnd, (" -> %x\n", wnd->hwnd));						if ( !isResizable ) {						Java_java_awt_Toolkit_wndSetResizable( env, clazz,								wnd, FALSE, x, y, width, height);								}						return wnd;			}		void __cdecl		Java_java_awt_Toolkit_wndDestroyWindow ( JNIEnv* env, jclass clazz, KWindow* wnd )	{		PostMessage( X->wakeUp, KWM_DESTROY, (WPARAM)wnd->hwnd, 0);	}			void __cdecl		Java_java_awt_Toolkit_wndRequestFocus ( JNIEnv* env, jclass clazz, KWindow* wnd )	{		DBG( awt_wnd, ("request focus: %x\n", wnd));		wnd->setFocus();//		SetFocus( wnd->hwnd);	}			void __cdecl		Java_java_awt_Toolkit_wndSetFrameInsets ( JNIEnv* env, jclass clazz,		jint top, jint left, jint bottom, jint right )	{		X->frameInsets.top  = top;		X->frameInsets.left = left;		X->frameInsets.bottom = bottom;		X->frameInsets.right = right;		X->frameInsets.guess = 1;	}		void __cdecl		Java_java_awt_Toolkit_wndSetDialogInsets ( JNIEnv* env, jclass clazz,		jint top, jint left, jint bottom, jint right )	{		X->dialogInsets.top  = top;		X->dialogInsets.left = left;		X->dialogInsets.bottom = bottom;		X->dialogInsets.right = right;		X->dialogInsets.guess = 1;	}		void __cdecl		Java_java_awt_Toolkit_wndSetBounds ( JNIEnv* env, jclass clazz, KWindow* wnd,		jint x, jint y, jint width, jint height,		jboolean isResizable )	{				DBG( awt_wnd, ("setBounds: %x %d,%d,%d,%d\n", wnd, x, y, width, height));						if ( width < 0 )  width = 1;				if ( height < 0 ) height = 1;				SetWindowPos( wnd->hwnd, NULL, x, y, width, height, SWP_NOZORDER);				if ( !isResizable ) {			Java_java_awt_Toolkit_wndSetResizable( env, clazz,				wnd, FALSE, x, y, width, height);		}			}				void __cdecl		Java_java_awt_Toolkit_wndRepaint ( JNIEnv* env, jclass clazz, KWindow* wnd,		jint x, jint y, jint width, jint height )	{		DBG( awt_wnd, ("wndRepaint: %x %d,%d,%d,%d\n", wnd, x, y, width, height));				RECT rcl;				rcl.left = x;		rcl.top = y;		rcl.right = x + width;		rcl.bottom = y + height;				InvalidateRect( wnd->hwnd, &rcl, TRUE);		UpdateWindow( wnd->hwnd);	}				void __cdecl		Java_java_awt_Toolkit_wndSetIcon ( JNIEnv* env, jclass clazz, KWindow* wnd, void* img )	{	}			void __cdecl		Java_java_awt_Toolkit_wndSetVisible ( JNIEnv* env, jclass clazz, KWindow* wnd, jboolean showIt )	{		DBG( awt_wnd, ("setVisible: %x %d\n", wnd, showIt));		wnd->setVisible( showIt);	}		void __cdecl		Java_java_awt_Toolkit_wndToBack ( JNIEnv* env, jclass clazz, KWindow* wnd )	{		DBG( awt_wnd, ("toBack: %x\n", wnd));		SetWindowPos( wnd->hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);	}		void __cdecl		Java_java_awt_Toolkit_wndToFront ( JNIEnv* env, jclass clazz, KWindow* wnd )	{		DBG( awt_wnd, ("toFront: %x\n", wnd));		SetWindowPos( wnd->hwnd, HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);	}		void __cdecl		Java_java_awt_Toolkit_wndSetCursor ( JNIEnv* env, jclass clazz, KWindow* wnd, jint jCursor )	{		DBG( awt_wnd, ("setCursor: %x, %d\n", wnd, jCursor));		wnd->setCursor( getCursor( jCursor));	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -