说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

做一个OpenGL控件-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
做一个OpenGL控件-Delphi资料

OpenGL是一个独立于窗口的图形库,而图形最终是在窗口系统里绘制出来的,那么OpenGL的绘图命令是怎么在窗口里生成输出的呢?

这就是各个系统上的OpenGL实现者需要做的工作了。在Windows里是通过wgl库完成的,在X-Windows里是通过glx服务器来完成的,至于这些OpenGL实现具体是怎么工作的,请参考sgi发布的sample implement源码,不过那个代码是用C写的。

在MS-Windows里,wgl库负责将OpenGL的绘制设备RenderContext与GDI的DeviceContext联系起来,使得发到OpenGL的RC里的命令生成的位图能够在GDI DC里绘制出来,你可以把它想象成OpenGL在RC里有一个FrameBuffer,记录着生成的图案,而wgl则负责把FrameBuffer的内容BitBlt到DC上。当然,这并不是它实际的工作方法,如果想了解更多请参考SGI发布的SDK资料或联系MS公司。

为了使GDI DC能够接受OpenGL RC的输出,必须为DC选定特别的像素格式,然后建立RC,再用wglMakeCurrent把当前要使用的RC和DC联系起来。此后我们就可以用OpenGL命令正常工作了。在一个程序里可以创建多个RC和多个DC,程序中的OpenGL命令会发到被wglMakeCurrent指定为当前的那一组合中。

我并不认为这个初始化过程是个很有意思的工作,这个世界上有很多聪明的程序员也这么想,所以他们发明了glaux库和glut库。glaux是在著名的OpenGL Programmer Guide里提出的,这本书是OpenGL编程的官方文档,因为它的封皮是红色的,所以通常简称为RedBook。故名思意,glaux是一套输助库,它使得你无须关心在具体窗口系统里初始化、消息响应的细节,而是使用传统的c/dos程序风格编制OpenGL程序。

int main(int argc

char** argv)

{ auxInitDisplayMode( AUX_SINGLE|AUX_RGB|AUX_DEPTH16);//使用单缓冲、RGB彩色模式、16位浓度

auxInitPosition(0

0

250

250);

auxInitWindow("Title");//以上两行在(0

0)片建立了一个大小为250X250的窗口,其标题为"Title"。

myinit();//建立OpenGL透视投影环境

auxReshapeFunc(myReshape);//指定窗口大小变化的响应函数

auxMainLoop(display);//指定绘制函数

return 0; }

由于glaux是为教学目的开发的,所以实用价值很限,所以又有程序员开发了glut,这套库被广泛使用,它的工作方式与glaux极为类似,但功能完善得多,特别是对交互、全屏等的支持要理想得多,所以许多的OpenGL演示程序使用它,比如SGI网站上提供的多数演示程序都需要使用它。同时这套库已经被移植到多种平台上,所以要是想用简单的方法开发在windows/macos/os2/xwindows等系统上都能使用的程序,那么应该选择这套库。

我并不认为一个Delphi程序员会喜欢glaux或glut,因为那意味着你不能利用Delphi的可视开发能力,另外任何真正实用的Delphi程序想直接在其它操作系统上编译运行好象也不现实,即glut的跨平台能力也没有什么吸引力。我们应该开发一个VCL控件,把初始化工作封装起来。

我认为从TCustomPanel派生一个子类比较方便,让我们称它为TGLPanel吧。初始化过程要在WMCreate里完成,之所以要放在这里是因为这个时候Window Handle已经建立,但还没启用。

在WMCreate中会

①调用initDC完成DC调整工作,initDC会以本窗口使用的DC调用PreparePixelFormat,而PixelFormat则真正完成像素格式调整。

②然后WMCreate会调用InitGL完成OpenGL透视投影环境的设定。

③最后调用OnInit给用户一个调整透视投影环境的机会。

注意,如果要在MDI环境中的子窗体中使用OpenGL,还有些附加工作要做,这就是给窗口类的Params.Style加上WS_CLIPCHILDREN和WS_CLIPSIBLINGS属性,这得在Window Handle建立之前就完成,因此要写在CreateParams里。由于SDI应用并不需要该代码,所以应该定义OnPreInit事件,让用户在需要的时候自己加上,在Create里调用OnPreInit。以下代码定义了OnPreInit,但并没有定义CreateParams,如果需要自己加上吧。

在TGLPanel类中实际所做工作的详细说明(按成员可见性组织):

私有

1、加入DC/RC/Pal私有变量

2、定义初始化DC/RC的私有方法

保护:

3、加入FOnPaint

FOnResize

FOnInit

FOnPreInit四个事件响应变量。

4、继承/重载虚方法CreateParams

Paint

Resize

5、响应以下消息

WM_CREATE

TWMCreate

WMCreate

WM_DESTROY

TWMDestroy

WMDestroy

WM_PALETTECHANGED

TWMPaletteChanged

WMPaletteChanged

WM_QUERYNEWPALETTE

TWMQueryNewPalette

WMQueryNewPalette

WM_ERASEBKGND

TWMEraseBkgnd

WMEraseBkgnd

公开:

6、定义建构与析构方法

7、定义必要的其它方法以提供各种特性

发布:

8、以下继承来的属性

__property Alignment;

__property Align;

__property DragCursor;

__property DragMode;

__property Enabled;

__property ParentFont;

__property ParentShowHint;

__property PopupMenu;

__property ShowHint;

__property TabOrder;

__property TabStop;

__property Visible;

9、以下继承来的方法

__property OnClick;

__property OnDblClick;

__property OnDragDrop;

__property OnDragOver;

__property OnEndDrag;

__property OnEnter;

__property OnExit;

__property OnMouseDown;

__property OnMouseMove;

__property OnMouseUp;

__property OnStartDrag;

10、加入以下事件

//初始化OpenGL状态

__property TNotifyEvent OnInit = {read=FOnInit

write=FOnInit};

//专用于修改显示BPP模式

__property TNotifyEvent OnPreInit = {read=FOnPreInit

write=FOnPreInit};

11、重载以下事件

__property TNotifyEvent OnResize = {read=FOnResize

write=FOnResize};

__property TNotifyEvent OnPaint = {read=FOnPaint

write=FOnPaint};

12、将消息与其响应函数连接起来(Delphi中这一步是在定义函数时指定的)

源代码

unit GLPanel;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs

ExtCtrls

OpenGL;

type

TGLPanel = class(TCustomPanel)

private

{ Private declarations }

DC: HDC;

RC: HGLRC;

procedure initDC;

procedure initGL;

procedure PreparePixelFormat(var DC: HDC);

protected

{ Protected declarations }

FOnPaint:TNotifyEvent;

FOnInit:TNotifyEvent;

FOnPreInit:TNotifyEvent;

FOnResize:TNotifyEvent;

procedure Paint;override;

procedure Resize;override;

procedure WMDestroy(var Msg: TWMDestroy);message WM_DESTROY;

procedure WMCreate(var Msg:TWMCreate); message WM_CREATE;

public

{ Public declarations }

constructor Create(Owner:TComponent);override;

published

{ Published declarations }

property Alignment;

property Align;

property DragCursor;

property DragMode;

property Enabled;

property ParentFont;

property ParentShowHint;

property PopupMenu;

property ShowHint;

property TabOrder;

property TabStop;

property Visible;

property OnClick;

property OnDblClick;

property OnDragDrop;

property OnDragOver;

property OnEndDrag;

property OnEnter;

property OnExit;

property OnMouseDown;

property OnMouseMove;

property OnMouseUp;

property OnStartDrag;

property OnInit:TNotifyEvent read FOnInit write FOnInit;

property OnPreInit:TNotifyEvent read FOnPreInit write FOnPreInit;

property OnResize:TNotifyEvent read FOnResize write FOnResize;

property OnPaint:TNotifyEvent read FOnPaint write FOnPaint;

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents(’Samples’

[TGLPanel]);

end;

//---------------------------------------------

constructor TGLPanel.Create;

begin

inherited;

end;

//---------------------------------------------

procedure TGLPanel.WMDestroy(var Msg: TWMDestroy);

begin

wglMakeCurrent(0

0);

wglDeleteContext(RC);

ReleaseDC(Handle

DC);

end;

//---------------------------------------------------

procedure TGLPanel.initDC;

begin

DC := GetDC(Handle);

PreparePixelFormat(DC);

end;

//---------------------------------------------------

procedure TGLPanel.initGL;

begin

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);

glLoadIdentity;

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glOrtho(-1

1

-1

1

-1

50);

glMatrixMode(GL_MODELVIEW);

glLoadIdentity;

glEnable(GL_DEPTH_TEST);

//注意下面这一行是为了做练习程序时可以直接用glColor指定材质而加的,

// 可能使得光照或表面材质发生意想不到的变化,

// 如果不需要可以去掉或在程序中用glDisable(GL_COLOR_MATERIAL);关闭

glEnable(GL_COLOR_MATERIAL);

glShadeModel(GL_SMOOTH);

gluLookAt(2

4

6

0

0

0

0

1

0);

SwapBuffers(DC);

end;

//---------------------------------------------

procedure TGLPanel.PreparePixelFormat(var DC: HDC);

var

PFD : TPixelFormatDescriptor;

ChosenPixelFormat : Integer;

begin

FillChar(PFD

SizeOf(TPixelFormatDescriptor)

0);

with PFD do

begin

nSize := SizeOf(TPixelFormatDescriptor);

nVersion := 1;

dwFlags := PFD_DRAW_TO_WINDOW or

PFD_SUPPORT_OPENGL or

PFD_DOUBLEBUFFER;

iPixelType := PFD_TYPE_RGBA;

cColorBits := 16; // 16位颜色

cDepthBits := 32; // 32位深度缓冲

iLayerType := PFD_MAIN_PLANE;

{ Should be 24

but we must allow for the clunky WKU boxes }

end;

ChosenPixelFormat := ChoosePixelFormat(DC

@PFD);

if ChosenPixelFormat = 0 then

Raise Exception.Create(’ChoosePixelFormat failed!’);

SetPixelFormat(DC

ChosenPixelFormat

@PFD);

end;

procedure TGLPanel.WMCreate(var Msg:TWMCreate);

begin

//在这里做初始化工作

//修改DC的象素格式,使之支持OpenGL绘制

initDC;

RC := wglCreateContext(DC);

wglMakeCurrent(DC

RC);

//初始化GL绘制系统

initGL;

if Assigned(FOnInit) then

begin

if (wglMakeCurrent(DC

RC)=false) then

ShowMessage(’wglMakeCurrent:’ + IntToStr(GetLastError));

FOnInit(self);

end;

end;

//

procedure TGLPanel.Paint;

begin

//TCustomPanel::Paint();

if Assigned(FOnPaint) then

begin

wglMakeCurrent(DC

RC);

FOnPaint(self);

SwapBuffers(DC);

end;

end;

//

procedure TGLPanel.Resize;

begin

inherited;

if Assigned(FOnResize) then

begin

wglMakeCurrent(DC

RC);

glViewport(0

0

ClientWidth

ClientHeight);

FOnResize(self);

end;

end;

end.

以上代码仅用来说明原理及建立一个基本的练习环境,您可以自由使用,转载请注明出处。如果使用从本人主页下载的TGLPanel请遵守内附使用说明的版权申明。如果实际做东西,建议使用Mike Lischke的GLScene控件组(http://www.lischke-online.de/)。

end

else

删除注册表项....................... end;初始化扩展是通过IShellExtInit实现的,当外壳调用IShellExtInit.Initialize时,它传递一个数据对象包含来文件对应的目录的PIDL标识符。Initialize方法需要从数据对象中提取文件名,并把文件名和PIDL标识符保存起来为了以后使用。

function TCXPropSheet.SEIInitialize(pidlFolder: PItemIDList;

lpdobj: IDataObject; hKeyProgID: HKEY): HResult;

var

StgMedium: TStgMedium;

FormatEtc: TFormatEtc;

szFile: array[0..MAX_PATH+1]of Char;

filecount: integer;begin

Result:=E_FAIL;

if(lpdobj=nil)then

begin

Result:=E_INVALIDARG;

messagebox(0

’1’

’错误’

mb_ok);

Exit;

end;

with FormatEtc do

begin

cfFormat:=CF_HDROP;

ptd:=nil;

dwAspect:=DVASPECT_CONTENT;

lindex:=-1;

tymed:=TYMED_HGLOBAL;

end;

Result:=lpdobj.GetData(FormatEtc

StgMedium);

if Failed(Result)then

Exit;

//如果只有一个文件被选中,获得文件名并保存。

filecount:=DragQueryFile(stgmedium.hGlobal

$FFFFFFFF

nil

0);

if filecount=1 then

begin

Result:=NOERROR;

DragQueryFile(stgmedium.hGlobal

0

szFile

SizeOf(szFile));

FFilename:=strpas(szFile);

end;

ReleaseStgMedium(StgMedium);end;添加页面的操作是通过IShellPropSheetExt接口来实现的。如果属性页是和文件相关联,外壳会调用IShellPropSheetExt.AddPages给属性页添加一个页面。如果属性页同控制面板程序相关联,外壳调用IShellPropSheetExt.ReplacePage来替换页面。

IShellPropSheetExt.AddPages方法有两个参数,lpfnAddPage是一个指向AddPropSheetPageProc回调函数的指针,回调函数用来提供要添加的页面信息给外壳。lParam是一个用户自定义的值,这里我们用它来返回给回调函数对象。

一般的IShellPropSheetExt.AddPages方法实现步骤是:

给PROPSHEETPAGE结构设定正确的值,特别是:

把扩展的对象引用记数变量付值给pcRefParent成员,这可以防止页面还在显示时,扩展对象被卸载。

实现PropSheetPageProc回调函数来处理页面创建和销毁的情况。

调用CreatePropertySheetPage函数来创建页面。

调用lpfnAddPage指向的函数来来添加创建好的页面。

function TCXPropSheet.AddPages(lpfnAddPage: TFNADDPROPSHEETPAGE;

lParam: LPARAM): HResult;var

PSP: TPropSheetPage;

HPSP: HPropSheetPage;begin

result:=E_FAIL;

try

psp.dwSize:=SizeOf(psp);

psp.dwFlags:=PSP_USEREFPARENT or PSP_USETITLE or PSP_USECALLBACK;

psp.hInstance:=hInstance;

//这里我们使用了事先储存在wave.res中的对话框模板

模板是用delphi5自带的

//resource workshop编辑的,使用delphi5\bin\brcc32.exe编译的。

psp.pszTemplate:=MakeIntResource(100);

//标题名

psp.pszTitle:=’波文件信息’;

//设定回调函数

psp.pfnDlgProc:=@DialogProc;

psp.pfnCallBack:=@PropCallback;

//设定对象引用记数变量

psp.pcRefParent:=@comserver.objectcount;

//用lParam向回调函数传递对象

psp.lParam:=integer(self);

HPSP:=CreatePropertySheetPage(psp);

if HPSP<>nil then begin

if not lpfnAddPage(HPSP

lParam)then begin

DestroyPropertySheetPage(HPSP);

end else begin

_addref;//增加引用记数,否则一脱离这个方法的作用域,delphi自动释放对象。

result:=S_OK;

end

end

except

on e: exception do begin

e.message:=’添加页面’+e.message;

messagebox(0

pchar(e.message)

’错误’

mb_ok);

end;

end;end;

function TCXPropSheet.ReplacePage(uPageID: UINT;

lpfnReplaceWith: TFNADDPROPSHEETPAGE; lParam: LPARAM): HResult;begin

Result:=E_NOTIMPL;//同文件关联时,外壳不调用ReplacePage

所以不用实现end;回调函数处理属性页的消息,主要要响应WM_INITDIALOG消息来初始化页面显示信息,响应WM_COMMAND消息来处理用户交互,响应WM_NOTIFY消息来处理页面切换或关闭后处理操作结果。

function DialogProc(hwndDlg: HWnd; Msg: UINT; wParam: wParam;

lParam: LPARAM): Bool; stdcall;

var

PageObj: TCXPropSheet;

filename: string;

displayName : string;

SheetHWnd: HWnd;

begin

result:=false;

try

if Msg=WM_INITDIALOG then begin//初始化界面

//获得lparam传递过来的对象

pageObj:=TCXPropSheet(PPropSheetPage(lParam)^.lParam);

//保存对象信息

SetWindowLong(hwndDlg

DWL_USER

integer(pageObj));

//设置界面显示波文件信息

SetDlgItemText(hwndDlg

100

PChar(ExtractFileName(PageObj.FFileName)));

OpenMedia(PageObj.FFileName);

SetDlgItemText(hwndDlg

101

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_AVGBYTESPERSEC))));

SetDlgItemText(hwndDlg

102

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_BITSPERSAMPLE))));

SetDlgItemText(hwndDlg

103

PChar(IntToStr(GetWavStatus(MCI_WAVE_STATUS_CHANNELS))));

CloseMedia;

SetWindowLong(hwndDlg

DWL_MSGRESULT

0);

Result:=TRUE;

end

else if(Msg=WM_COMMAND)then begin

if Lo(wParam)=110 then//用户点击了关于按钮(id=110)

MessageBox(0

’作者:hubdog’+#13#10+’email:hubdog@263.net’

’关于...’

MB_OK);

end else if(msg=WM_NOTIFY)then begin

sheetHwnd:=getparent(hwndDlg);//获得属性页的窗口句柄

case PNMHdr(lparam)^.code of

//页面失去焦点

PSN_KILLACTIVE:

begin

SetWindowLong(hwndDlg

DWL_MSGRESULT

0);

Result:=TRUE;

end;

end;

end;

except

on e: exception do begin

e.message:=’回调处理’+e.message;

messagebox(0

pchar(e.message)

’错误’

mb_ok);

end;

end;

end;

建立同驱动器相关联的属性页扩展用

同上面讲的有两点不同:

IShellExtInit.Initialize方法传递过来的数据对象包含的驱动器路径可能是CFSTR_MOUNTEDVOLUME格式而不是CF_HDROP格式的。标准驱动器是CF_HDROP格式的,而在NTFS文件系统中映射的远程设备则是CFSTR_MOUNTEDVOLUME格式的。

注册表项是HKEY_CLASSES_ROOT\Drive\Shellex\PropertySheetHandlers子键。

建立控制面板属性页扩展

同上面讲的有两点不同:

控制面板程序调用IShellPropSheetExt.ReplacePage方法来替换页面,它不调用IShellPropSheetExt。AddPages方法。

注册方式:子键可以在不同位置创建,这依赖于扩展是针对用户还是针对机器的。对用户方式子键是HKEY_CURRENT_USER\REGSTR_PATH_CONTROLPANEL,否则子键是HKEY_LOCAL_MACHINE\REGSTR_PATH_CONTROLSFOLDER。

本程序在Delphi5,Win NT 4.0,K6-233系统下调试成功。例子程序可以到http://chaozhi.com/lgc去下载

Google Now新增语音命令:生活简单一点,让爱更近一点 千万美金收购案:GetJar是一家怎样的公司 传苹果与时代华纳等公司合作,推新一代Apple TV 追本溯源 解析“大数据生态环境”发展现状 为Hadoop存储层增加对OpenStack Swift的支持 详解并行逻辑回归 在AWS上使用GPU实现分布式神经网络 大数据时代,看“小数据”如何支持决策 22人15天研发 微信红包系统发起“珍珠港偷袭”的背后 开发产品防脱节,DevOps来帮忙 手游福音:官方中文版Unity用户手册免费发布 支持多平台!2D和3D游戏引擎Godot宣布开源 从Google备份互联网看“数据安全” NBA全明星周末,数据打造下的辉煌盛事 2014情人节没活动?我们来帮你! Windows 8授权销售已超过2亿份 速度不及Win 7 IDC:2013年第四季度Windows Phone出货量大幅增长 深入思考SDN的核心本质:从SDN=OpenFlow回到软件定义网络 谷歌、VMware在Chromebooks上双赢了,微软你怎么看? Tizen真要来了!又有15家IT大佬成帮会成员 研发周报:开源世界应该致谢的五家公司 Square、LinkedIn、Google... 看国外巨头如何“绑架”用户? 一周消息树:5.5寸屏幕的iPhone 6概念机来袭、索契冬奥会开幕式现Bug 一周热点:美国大学生数学建模分析,Hadoop不是万能,探访雅虎数据中心 Google Play services 4.2全球推送,完全支持Chromecast! 移动周报:最快的Web开发IDE——HBuilder Google Glass是空有噱头还是实用品? 服务好“最后一公里”,高效CDN架构经验 “义军”突起,帮用户夺回大数据控制权 为安全,Google收购基于超声波密码验证技术公司SlickLogin 2014 Shenzhen Maker Faire:国内顶级创客聚会即将举行 请教vb自带的报表编程 在Sql语言中的取整函数是什么? 怎样将添加的记录到所有的现有记录后面? 如何装双系统?(在线等候) CSS一般要学多久才算掌握? 从事共享软件开发的进来谈谈做共享的辛酸好吗? 请教使用notifyicon遇到的问题 ActiveState.Visual.XSLT.for.VS.2003.v1.7.9.2475.WinNT2K无法安装。 如何合并两个dataset win98系统下ISAM问题 如何减小生成的EXE文件大小等? asp.net有没有模板 帮帮忙,呵呵!!!一个小问题!!!!! 用VB的兄弟姐妹们,来整个MSN如何? 关于dllhost占用系统资源的问题! 谁是雍亲王,出来说话!!! 在WSAD5.0里怎么添加类型为MYSQL的数据源 高手们,帮帮我噢(解决立刻给分) 全中国程序员联和起来。 如何在web的FORM1模式下画一条线段 界面贴图问题 为什么我用Server.MapPath(""),返回不了任何东东? 上手指路,高分相送 asp怎样连到SQL Server 2000?给100分,在线等 ASP.NET和SQL 哪位兄弟有用asp.net做的OA完整的例子...大家快来.. 关于dllhost占用系统资源的问题! Kylix是否和Delphi一样有RTF控件可以处理丰富文本? 小弟想考程序员!各位大哥指点一下嘛!有要考的交流一下嘛! 查询条件的问题?? 从事共享软件开发的进来谈谈做共享的辛酸好吗? TListView中某一SubItem怎末实时更新?在线等。。 http://www.000163.com/的空间能不能信得过? 请帮忙哟,在线急等 asp.net下如何用c#编写程序实现调用数据库中的多个表显示在datagrid 如何调用存储过程来删除表中的列名???? 给一个变量赋空值的问题 如何在DirectDraw显示Edit,输入文字?? 贴子回复次数大于跟给分次数是什么意思啊?让不让结啊?? 结交delphi爱好者! 请各位高手给我指点一下方向? 如何在Sybase数据库中获得刚插入的那条记录的主键? 怎样获得菜单项(menuitem)名? 简单问题 请问如果有一个dll文件,我想知道里面有什么函数,但我又没有说明书,有什么工具么? 报表设计器怎末没有在外接程序菜单中显示出来呀?? 如何知道选哪个? 急,如何将图标保存在一个数组中,并将它显示出来? struts配制数据源中如何指定url编码? 在csdn设立开放源代码的项目 妈的!等咱有了钱... zt 辛弃疾 白朴 李白 艾青 怎么排序急 不导电的水用什么流量计 如果有人在家里去世了 然后该怎么办?包括打120时该怎么说 文言文《枭与鸠对话》的全文翻译 唐僧是指十二生肖哪一个希望最快解决,谢谢大家 girl.you think you'er cooler than me 是什么意思? 文言文《枭与鸠对话》的启示是什么原文】枭①逢鸠,鸠②曰:“子③将安④之⑤?”枭曰:“我将东徙⑥。”鸠曰:“何故?”枭曰:“乡人皆⑦恶⑧我鸣,以故东徙。”鸠曰:“子能更 rain是什么意思 质壁分离实验 染的细胞是什么 枭与鸠的对话枭(猫头鹰)逢鸠(斑鸠).鸠曰:“子将安之?” 枭曰:“我将东徙.” 鸠曰:“何故?” 枭曰:“乡人(当地人)皆恶我鸣.以故东徙.” 鸠曰:“子能更鸣,可矣;不能更鸣,东徙,犹恶子之声.” 1 知恩图报饮水思源的意思是指十二生肖哪个 齐景公问政于孔子,孔子的回答体现了孔子的什么主张 古文;枭蓬鸠翻译 Rain是啥意思? 怎样正确使用安全带 情深似海什么意思 题目看补充,解答我打问号的.最后一道也要.小胖班级有50人要划船,每条大船可做6人,需要20元,每条小船可做4人,需要15元,请你设计几种租船方案方案 大船(条) 小船(条) 金额(元)问:那 能不能给我一份英语统考的题库,万分感谢 情深似海造句 打问号的题求解析 哪位大神能帮忙翻译一下...或者告诉我这是干嘛的也行... 情深似海的近义词有哪些要多! 把打问号的解答 英语翻译LZ是刚到美国的学生,今天一上课历史老师就发给我这么一张纸,什么都没说,我不清楚这是什么啊,下周一就要把这张纸交上去, 第二题打问号的?怎么答, 已知正六棱柱的12个定点都在一个半径为3的球面上,当正六棱柱的体积最大时,其高的值为? 求大神做几道英语题.最好能翻译下每个题和答案!在线等急! 主要国家经济力量研究,怎么翻译成英文才地道? 拿破仑的加冕典礼是在哪里举行的?还有,拿破仑真的长这样吗? 谁给我解释解释 腻和腻歪 分别什么意思别告诉我一字之差 蛋白质的结构层次是怎么样的(不要解释得太复杂) 〈明义法师之鸠〉译文 ”腻歪“怎么解释?怎么应用?谢谢! 奥林匹克竞赛提高题,帮个忙!A.B两个港口相距300千米.若甲船顺水自A驶向B,乙船同时自B逆水驶向A,两船在C处相距.若乙船顺水自A驶向B,甲船同时自B逆水A,则两船于D处相遇,C.D相距30千米.已知甲船 《明义法师之鸠》的译文急~~~~~~ 为什么总有人说,这是有多歪腻.什么的 英语翻译 《明义法师之鸠》古文解释 “暗送秋波” 英语翻译 谁能给我文言文《明义法师之鸠》的译文和字词解释?越快越好, 英语翻译Set Up Panel On Dispiay Wide Sounds Menu Color Type2 Startup Off File No Reset World Time Home Timestamp Off Data Style YY/MM/DD Auto Power Off 1min REC/PLAY Power On USB Mass Storage Video Out NTSC 4:3 Format Rsest REC Focus AF Focus Fra 正方体是不是棱柱 会计题,解题公式.甲公司成立时收到某投资者投入的原材料一批,双方确认的价值为100 000元(不含税费),增值税额为17 000元(准许抵扣),甲公司注册资本为800 000元.该投资者出资占注册资本 翻译:做某事花费某人一些时间 正方体是棱柱吗 不少行人却在马路上横冲直撞,对天桥似乎视而不见,原因何在?写一篇500字左右的文章必须要500字左右的额.... 李氏之鸠文言文 运用比喻或拟人的修辞,使用下面的词语写一段环境描写的话,至少用上其中的三个.宁静 涌起 领略 内涵 关于商鞅变法商鞅变法的内容是如何体现社会变革的?哪些措施最能体现社会变革?哪一项对后世政治制度影响最大?改革使那些人受益那些人受害?还有是哪几项是有利于社会进步的? 照相机的发展经历了一个由低级到高级的过程,针孔式照相机是利用( )的原理来成像的,而老式傻瓜相机和现代的一些高级相机都是利用物距大于凸透镜( )倍的情况,成( )缩小 请运用比喻或拟人修辞下面备选词语中至少两个词语写一段描写环境的话词宁静涌起领略内涵 不少行人却在马路上横冲直撞,对天桥似乎视而不见,原因何在?写一篇500字左右的议论文急用………………………………………………………………6 its probably cause you think you're cooler than me. 体会每组近义词的不同含义,在完成词语搭配.比喻 宁静的什么什么 平静的什么什么在仿写一个个大侠知道谢谢了,. 找出一组意思相反的词 橡皮的英文 用奔波,宁静,涌起.内涵,领略写一连贯的话,至少用2个 商鞅变法经过 橡皮用英语怎么写? 有了闲林水库这只“碗” 杭州饮水防洪安徽宁国网友募捐遭民政局叫停:我们压药店奶粉自动售卖机故障 消费者抱怨无穿“新制服”配IC卡 每一杯西湖龙井上海自贸区揭牌满月巡礼 开启新一轮改美智库报告称朝鲜为发射大型导弹扩建卫杨洁篪会见伊朗伊斯兰议会议长拉里贾尼6名少女统一着装离家出走 称无人理解滨江一学校体育馆“一馆两用” 学生市媒体称上海自贸区资本项目开放或实行“13岁儿子黑网吧内打游戏 母亲连找四安徽病重孕妇遭多家医院拒收 为省钱只美数千民众参加枕头大战 欲破吉尼斯世加油站职员遭抢劫 胸前手机挡子弹救其有研究称所有哺乳动物遵循21秒排尿定埃及武打冠军因支持前总统穆尔西 金牌世上真有“摇钱树”:桉树能测地下黄金美国安局铁杆盟友临阵“倒戈” 称反对外媒称俄罗斯在G20峰会监控各国元首埃及再次审理穆兄会领导人美国百年交响名团将首次访华新华时评:“温水煮青蛙”考验官员“底湖北高招将建多元互动网上录取平台学者:中国四大理由能应对现代战争 不NBA步行者前锋科普兰夜店遇刺 嫌疑台中捷运工地钢梁砸车 酿4死4伤台中捷运意外 林佳龙强调无要求赶工台中捷运意外 林佳龙:明显是人为疏失石门水库持续降雨 水位略升武汉投入百亿元建设“海绵城市”破解内重庆武陵镇:文明创建助推产业发展 三杨建平昆仑决大战在即 邹市明:加油!世卫继续将埃博拉疫情确定为“国际关注唐山路北区鼓励居民认养小区绿地故城陈汝珍不弃患病丈夫捐肾救弟 柔弱秦皇岛残疾小伙儿张俭心怀感恩志愿捐遗丰润区一企业为员工患病母亲捐款10万世卫继续将埃博拉疫情确定为“国际关注一周楼市:公积金新政利好楼市 二手房今年昆明近8万小学生毕业 但仅一成多台中市府为拼\"百日有感\"地铁赶工洛瑞复出猛龙险胜魔术回第3 德隆准3
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘