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

📄 mgjs_main.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			eventType = mgjsDOMEvent::MOUSEOVER;			break;		case WINDOWEVENTOWNER_ONMOUSEOUT:			eventType = mgjsDOMEvent::MOUSEOUT;			break;		case WINDOWEVENTOWNER_ONKEYDOWN:			eventType = mgjsDOMEvent::KEYDOWN;			break;		case WINDOWEVENTOWNER_ONKEYUP:			eventType = mgjsDOMEvent::KEYUP;			break;		case WINDOWEVENTOWNER_ONKEYPRESS:			eventType = mgjsDOMEvent::KEYPRESS;			break;		case WINDOWEVENTOWNER_ONMOUSEMOVE:			eventType = mgjsDOMEvent::MOUSEMOVE;			break;		case WINDOWEVENTOWNER_ONFOCUS:			eventType = mgjsDOMEvent::FOCUS;			break;		case WINDOWEVENTOWNER_ONBLUR:			eventType = mgjsDOMEvent::BLUR;			break;		case WINDOWEVENTOWNER_ONSUBMIT:			eventType = mgjsDOMEvent::SUBMIT;			break;		case WINDOWEVENTOWNER_ONRESET:			eventType = mgjsDOMEvent::RESET;			break;		case WINDOWEVENTOWNER_ONCHANGE:			eventType = mgjsDOMEvent::CHANGE;			break;		case WINDOWEVENTOWNER_ONSELECT:			eventType = mgjsDOMEvent::SELECT;			break;		case WINDOWEVENTOWNER_ONUNLOAD:			eventType = mgjsDOMEvent::UNLOAD;			break;		case WINDOWEVENTOWNER_ONCLOSE://			eventType = mgjsDOMEvent::CLOSE;			break;		case WINDOWEVENTOWNER_ONABORT:			eventType = mgjsDOMEvent::ABORT;			break;		case WINDOWEVENTOWNER_ONERROR:			eventType = mgjsDOMEvent::ERROR;			break;		case WINDOWEVENTOWNER_ONPAINT://			eventType = mgjsDOMEvent::PAINT;			break;		case WINDOWEVENTOWNER_ONDRAGDROP:			eventType = mgjsDOMEvent::DRAGDROP;			break;		case WINDOWEVENTOWNER_ONRESIZE:			eventType = mgjsDOMEvent::RESIZE;			break;		case WINDOWEVENTOWNER_ONSCROLL:			eventType = mgjsDOMEvent::SCROLL;			break;			}		if(eventType)return mgJsSetEvent(cx,obj,vp,eventType);		}		}//endof:switch	}//endof:if    return JS_TRUE;}static JSBool WindowScrollTo (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	HWND hWnd=mgJSGethWnd(cx);	int x, y,w,h;	RECT rc;	x = JSVAL_TO_INT(argv[0]);	y = JSVAL_TO_INT(argv[1]);	GetWindowRect (hWnd,&rc);	w=rc.right-rc.left;	h=rc.bottom-rc.top;	MoveWindow (hWnd,x,y,w,h,true);	return JS_TRUE;}static JSBool WindowScrollBy (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	HWND hWnd=mgJSGethWnd(cx);	int iOffx, iOffy;RECT rc1, rc2;	GetWindowRect (hWnd,&rc1);	rc2=rc1;	iOffx = JSVAL_TO_INT(argv[0]);	iOffy = JSVAL_TO_INT(argv[1]);	ScrollWindow (hWnd, iOffx,  iOffy, &rc1,NULL);	return JS_TRUE;}	static JSBool WindowGetSelection(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	//TODO:	return JS_TRUE;}static JSBool WindowScrollByLines(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	return JS_TRUE;}static JSBool WindowInternalDump(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	//TODO:	return JS_TRUE;}static JSBool WindowScrollByPages(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	return JS_TRUE;}static JSBool WindowInternalAlert (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSString* text;	HWND hWnd=mgJSGethWnd(cx);	if(argc<1)return JS_FALSE;	if (!(text = JS_ValueToString (cx, argv[0])))        return JS_FALSE;    MessageBox (hWnd, JS_GetStringBytes (text), MGJS_TEXT_BROWSER, MB_OK | MB_ICONEXCLAMATION);	    return JS_TRUE;}	static JSBool WindowInternalConfirm (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    JSString* text;	HWND hWnd=mgJSGethWnd(cx);	if(argc<1)return JS_FALSE;    if (!(text = JS_ValueToString (cx, argv[0])))        return JS_FALSE;    if (MessageBox (hWnd, JS_GetStringBytes (text),MGJS_TEXT_BROWSER,                 MB_YESNO | MB_ICONQUESTION) == IDYES) {        *rval = BOOLEAN_TO_JSVAL (TRUE);    }    else        *rval = BOOLEAN_TO_JSVAL (FALSE);    return JS_TRUE;}static JSBool WindowInternalPrompt(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    char* entry;    JSString* prompt;    JSString* text;    int ret;	HWND hWnd=mgJSGethWnd(cx);    myWINENTRY entries [] = {        { " ", &entry, 0, 0 },        { NULL, NULL, 0, 0 } };    myWINBUTTON buttons[] = {        { "OK", IDOK, BS_DEFPUSHBUTTON },        { "Cancel", IDCANCEL, BS_PUSHBUTTON },        { NULL, 0, 0}    };	if(argc<2)return JS_FALSE;	if (!(prompt = JS_ValueToString (cx, argv[0])))        return JS_FALSE;    if (!(text = JS_ValueToString (cx, argv[1])))        return JS_FALSE;    entry = JS_GetStringBytes (text);    ret = myWinEntries(hWnd,		MGJS_TEXT_BROWSER, JS_GetStringBytes (prompt),		10, 10, FALSE, entries, buttons);    if (ret == IDOK && entry)        *rval = STRING_TO_JSVAL (JS_NewStringCopyZ (cx, entry));    else        *rval = STRING_TO_JSVAL (JS_NewStringCopyZ (cx, ""));    free (entry);    return JS_TRUE;}static JSBool WindowInternalOpen(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	MGHTMLView *view = mgJSGetView(cx);	char url[TEMPSTRINGMAX+1],strWndName[TEMPSTRINGMAX+1],strFeatureList[TEMPSTRINGMAX+1];    JSString* jss;		url[0] = 0;	strWndName[0] = 0;	strFeatureList[0] = 0;	if(argc<1)goto fail;	if ((jss = JS_ValueToString (cx, argv[0])))		strncpy(url,JS_GetStringBytes (jss),TEMPSTRINGMAX);	else		goto fail;	if(argc>=2){		if ((jss = JS_ValueToString (cx, argv[1])))			strncpy(strWndName,JS_GetStringBytes (jss),TEMPSTRINGMAX);	}	if(argc>=3){		if ((jss = JS_ValueToString (cx, argv[2])))			strncpy(strFeatureList,JS_GetStringBytes (jss),TEMPSTRINGMAX);	}	view->setURL( url );//	SendNotifyMessage(view->getHwnd(), MSG_OPENURL, 0 ,0);	return JS_TRUE;fail:	return JS_FALSE;	}static JSBool WindowInternalClose(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	//TODO: it seems nothing to do.	return JS_TRUE;}static JSBool WindowInternalSetTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	MGHTMLView *view = mgJSGetView(cx);	// HWND hWnd=mgJSGethWnd(cx);	int speed,expLength;	char expression[TEMPSTRINGMAX+1];	JSString *jss;    // jsval jval;	expression[0]=0;	if(argc<2)return JS_FALSE;		//TODO: arg[2]..arg[n] are expression's arguments.			if ((jss = JS_ValueToString (cx, argv[0])))		strncpy(expression,JS_GetStringBytes (jss),TEMPSTRINGMAX);	expLength=strlen(expression);	speed = JSVAL_TO_INT(argv[1]);	if(!(SetTimer(view->getParent(),view->m_JsTimerId,speed)))	{		return JS_FALSE;	}	JsTimerStruct *aJsTimer=new JsTimerStruct;	if(!aJsTimer)		return JS_FALSE;	*rval=INT_TO_JSVAL(view->m_JsTimerId);	aJsTimer->id = view->m_JsTimerId++;	aJsTimer->exp =(char*) malloc( sizeof(char) * (expLength+1) );	if(aJsTimer->exp == NULL)		return JS_FALSE;	aJsTimer->exp[expLength] = 0;	aJsTimer->expLength = expLength;	strncpy(aJsTimer->exp,expression,expLength);	view->m_JsTimer.append(aJsTimer);		return JS_TRUE;}static JSBool WindowInternalClearTimeout(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	MGHTMLView *view = mgJSGetView(cx);	JsTimerStruct *aJsTimer;	char *exp;	int id;	if(argc<1)return JS_FALSE;	id = JSVAL_TO_INT(argv[0]);	if(mgJsLocateTimer(view,id))	{		aJsTimer = view->m_JsTimer.current();		KillTimer(view->getParent(),id);		view->m_JsTimer.remove();		exp = aJsTimer->exp;		free(aJsTimer);		free(exp);	}	return JS_TRUE;}bool mgJsLocateTimer(MGHTMLView* view,int id){	bool bFind=0;	JsTimerStruct *aJsTimer;	if(!view)return 0;	for(aJsTimer=view->m_JsTimer.first();aJsTimer!=0;aJsTimer=view->m_JsTimer.next())		if(aJsTimer->id==id)		{			bFind=1;break;		}	return bFind;}bool mgJsFreeAllTimer(MGHTMLView* view){	JsTimerStruct *aJsTimer;	char *exp;	if(!view)return 0;	for(aJsTimer=view->m_JsTimer.first();aJsTimer!=0;aJsTimer=view->m_JsTimer.next())	{		KillTimer(view->getParent(),aJsTimer->id);		exp = aJsTimer->exp;		free(aJsTimer);		free(exp);	}	view->m_JsTimer.setAutoDelete(0);	view->m_JsTimer.clear();	return TRUE;}bool TimerEvaluateJavaScript(JSContext** jsc,JSObject** jso,MGHTMLView* view,int id){	char exp[TEMPSTRINGMAX+1];	QString qs;	JsTimerStruct *aJsTimer;	if(!mgJsLocateTimer(view,id))		return FALSE;	aJsTimer = view->m_JsTimer.current();	strncpy(exp,aJsTimer->exp,TEMPSTRINGMAX);	exp[TEMPSTRINGMAX] = 0;	qs = (const char * ) exp;	return EvaluateJavaScript(qs,jsc,jso,0);}JSBool mgJsSetEvent(JSContext *cx, JSObject *obj, jsval *vp, int EventType){	MGHTMLView *view = mgJSGetView(cx);	JsEventStruct *aJsEvent;	if( mgJsLocateEvent(view,EventType) )		mgJsFreeCurrentEvent(view);	aJsEvent=new JsEventStruct;	if( !aJsEvent )		return JS_FALSE;	aJsEvent->type=EventType;	aJsEvent->value=*vp;	view->m_JsEvent.append(aJsEvent);	return JS_TRUE;}bool mgJsLocateEvent(MGHTMLView* view,int type){	bool bFind=0;	JsEventStruct *aJsEvent;	if(!view)return 0;	for(aJsEvent=view->m_JsEvent.first();aJsEvent!=0;aJsEvent=view->m_JsEvent.next())		if(aJsEvent->type==type)		{			bFind=1;break;		}	return bFind;}bool mgJsFreeCurrentEvent(MGHTMLView* view){	JsEventStruct *aJsEvent;	if(!view)return FALSE;	aJsEvent=view->m_JsEvent.current();	if(!aJsEvent)return FALSE;	view->m_JsEvent.remove();	free(aJsEvent);	return TRUE;}bool mgJsFreeAllEvent(MGHTMLView* view){	JsEventStruct *aJsEvent;	if(!view)return 0;	for(aJsEvent=view->m_JsEvent.first();aJsEvent!=0;aJsEvent=view->m_JsEvent.next())	{		free(aJsEvent);	}	view->m_JsEvent.setAutoDelete(0);	view->m_JsEvent.clear();	return TRUE;}bool EventEvaluateJavaScript(JSContext** jsc,JSObject** jso,MGHTMLView* view){	JsEventStruct *aJsEvent;	uintN argc; 	jsval argv; 	jsval rval;	JSBool jsb;	JSFunction *jsf;		if(!view->m_JsEventType)		return TRUE;		if(!mgJsLocateEvent(view,view->m_JsEventType))		return FALSE;	aJsEvent = view->m_JsEvent.current();   	jsf=JS_ValueToFunction(*jsc,aJsEvent->value);	if(jsf==NULL)		return FALSE;	argc=1;	argv=OBJECT_TO_JSVAL(mgJSGetEventObj(*jsc));		jsb=JS_CallFunction(*jsc,*jso,jsf,argc,&argv,&rval);	view->m_JsEventType = 0;		return (jsb==JS_TRUE);}static JSBool WindowInternalBlur(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){	return JS_TRUE;}static JSBool WindowInternalFocus(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){

⌨️ 快捷键说明

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