如何在win98 se下得到显存大小,用mitic组件得不到。
解决方案 »
- 2010年初大亮语句
- 请问fastreport3.05 for delphi7 的注册码谁有吗?? 谢谢了
- 请问我这样的winsock程序能支持多用户同时连接吗?
- 编译问题,急急急 在线等
- DXDBGRID控件开发的问题
- 请问,delphi6.0下的NMFTP组件,在delphi7.0的哪里?
- 怎样象rave报表里写值
- 求《深入delphi6网络编程》配套光盘中的书中例子的代码?我的email: [email protected]
- 用ado连接oracle不上,错误提示说我服务器名字错了但我连接console也是那个服务器名字呀
- 高薪寻找合作者:医院信息管理系统
- 使用SMImport控件导入时提示错误如下,不知怎么回事?
- DELPHI工程师
安装完毕后新建一个FORM,然后拖一个其中的组件MiTeC_Display到FORM上,然后再在程序段处写
MiTeC_Display1.RefreshData;
showmessage(floattostr(MiTeC_Display1.Memory/1024/1024)+' MB');
GetAvailableVidMem
GetAvailableVidMem,该函数可以获得所有可用的显存容量值,和当前可以为某种指定类型的页面所用的空余显存容量值。
{
/*** IUnknown methods ***/virtual HRESULT __stdcall QueryInterface (IID riid, void far * ppvObj) =0;//STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj) PURE;virtual ULONG __stdcall AddRef () =0;// STDMETHOD_(ULONG,AddRef) (THIS) PURE;virtual ULONG __stdcall Release () =0;// STDMETHOD_(ULONG,Release) (THIS) PURE; /*** IDirectDraw methods ***///以下同上,只是进行了一下封装,实际上还是一套纯虚函数
STDMETHOD(Compact)(THIS) PURE;
STDMETHOD(CreateClipper)(THIS_ DWORD, LPDIRECTDRAWCLIPPER FAR*, IUnknown FAR * ) PURE;
STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE FAR*, IUnknown FAR * ) PURE;
STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 FAR *, IUnknown FAR *) PURE;
STDMETHOD(DuplicateSurface)( THIS_ LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7 FAR * ) PURE;
STDMETHOD(EnumDisplayModes)( THIS_ DWORD, LPDDSURFACEDESC2, LPVOID, LPDDENUMMODESCALLBACK2 ) PURE;
STDMETHOD(EnumSurfaces)(THIS_ DWORD, LPDDSURFACEDESC2, LPVOID,LPDDENUMSURFACESCALLBACK7 ) PURE;
STDMETHOD(FlipToGDISurface)(THIS) PURE;
STDMETHOD(GetCaps)( THIS_ LPDDCAPS, LPDDCAPS) PURE;
STDMETHOD(GetDisplayMode)( THIS_ LPDDSURFACEDESC2) PURE;
STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD, LPDWORD ) PURE;
STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE7 FAR *) PURE;
STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD) PURE;
STDMETHOD(GetScanLine)(THIS_ LPDWORD) PURE;
STDMETHOD(GetVerticalBlankStatus)(THIS_ LPBOOL ) PURE;
STDMETHOD(Initialize)(THIS_ GUID FAR *) PURE;
STDMETHOD(RestoreDisplayMode)(THIS) PURE;
STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD) PURE;
STDMETHOD(SetDisplayMode)(THIS_ DWORD, DWORD,DWORD, DWORD, DWORD) PURE;
STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE ) PURE;
/*** Added in the v2 interface ***/
STDMETHOD(GetAvailableVidMem)(THIS_ LPDDSCAPS2, LPDWORD, LPDWORD) PURE;
/*** Added in the V4 Interface ***/
STDMETHOD(GetSurfaceFromDC) (THIS_ HDC, LPDIRECTDRAWSURFACE7 *) PURE;
STDMETHOD(RestoreAllSurfaces)(THIS) PURE;
STDMETHOD(TestCooperativeLevel)(THIS) PURE;
STDMETHOD(GetDeviceIdentifier)(THIS_ LPDDDEVICEIDENTIFIER2, DWORD ) PURE;
STDMETHOD(StartModeTest)(THIS_ LPSIZE, DWORD, DWORD ) PURE;
STDMETHOD(EvaluateMode)(THIS_ DWORD, DWORD * ) PURE;
};有上面这个接口定义可以发现,接口中定义的方法都是纯虚函数,但正真的实现在那里呢?上面(1)所提到的对象又在那里呢?DirectX依靠硬件抽象层(HAL)解决了这些疑问。它使得我们的编程于设备无关。(本来嘛,不同的硬件厂商,提供的同一个操作(比如光栅化),可能实现的方式不同,访问的方式也不同,这就使得如果你想让自己的程序在某个特定的设备上运行,必须满足它的规范,可想而知,要想作一个在所有硬件设备上都能运行的应用程序是多么的困难)现在好了,DirectX提供了一套访问硬件的规范接口,就是上面所示的COM接口,当然,对不同的设备(比如不同的显卡),COM接口内的方法(函数)的实现不同,但我们不需要关心,这些实现也里所当然有生产硬件设备的厂商来提供。一般以设备驱动的一部分或是动态连接库的方式提供给你。这样我们的COM对象当然有可能就是动态连接库了。这样我们只要用COM接口中的方法就可以访问所有遵循这个接口约定的硬件设备(绝大多数都遵循),完成我们想要完成的功能。当然有些“便宜的”显卡可能实现的功能比较少(比如不支持矩阵乘法),我们可以用DirectX提供的函数查询,如果不支持,是不是就没办法了呢,别担心,direct早想好了,它为你提供了硬件仿真功能,用软件的方法实现了这些功能,这样,“便宜的”显卡也能运行你的应用程序了,但就是速度慢,但一份价钱一份货嘛,哪有便宜还想要好性能的,不能太贪心了,呵呵。