发新话题
打印

.NET 2.0还缺什么……

.NET 2.0还缺什么……

声明:本文摘自《程序员》2006年1月刊 作者:游智超

1、System.Windows.Forms.MessageBox
  这是显示消息框的类。新版的MessageBox已经增加了HELP BUTTON的显示,但较WIN32 API的::MessageBoxEx()而言,仍然缺乏MB_SYSTEMODAL和MB_TOPMOST可以让极为重要的信息框可以在顶层显示的选项。

2、::SendMessage()的WM_QUERYENDSESSION
  如果你的程序在还没被关闭之前,用户进行了关机/重启/注销的操作,系统会发出WM_QUERYENDSESSION消息请示你是否可以把你的程序给结束掉。其实在.NET 1.0中就有Microsoft.Win32.SystemEvents的Sessionending event。但是如果要使用的话,还是得override WinProc()来处理WM_QUERYENDSESSION消息。为什么呢?因为在微软的文档说有可能FORM的CLOSING事件会比SessionEnding来的早,所以在CLOSING事件的处理方法里你无法知道是否是因为有人要SHUTDOWN/REBOOT你的电脑才来这个CLOSING事件,所以这样你还是得跟WIN32的WINDOWS MESSAGES大交道。直至.NET 2.0还是这样,至少文档是这样说的。

3、关机
  在.NET 2.0中仍然无法对系统进行关机或重启操作。在WIN32 API可以用::ExitWindowsEx()(在USER32.DLL)进行关机。或::InitiateSystemShutdown(), ::InitiateSystemShutdownEx()(在ADVAPI32.DLL)进行远程关机。

4、::EnumWindows()和::EnumDesktopWindows()
  这些API可以查找所有正在允许的窗口。不过在.NET 2.0仍然找不到相应功能。

5、EnumCalendarInfoEx()
  这个API可以查找所有系统可用的CALENDAR信息。在.NET 2.0仍然找不到相应功能。不过.NET 2.0在名字空间System.Globalization中又增加了一些Calendar类,包括大陆和台湾的农历等,微软索性把全世界用到的日历全部写好了。

6、Console Application
  有关对于文字模式应用程序的支持,在.NET 1.X作的非常少。在.NET 2.0增加了console window, console buffer area, encoding, cursor和文字颜色的控制等。的确前进了一大步,但是比起WIN32 API 还是有些不足之处。比如通过GetConsoleDisplayMode()可用取得CONSOLE目前是否全屏显示的状态,比如::ScrollConsoleScreenBuffer()可用快速移动CONSOLE BUFFER中的一个区块,还比如::CreateConsoleScreenBuffer()和::SetConsoleActiveScreenBuffer()可以支持多个CONSOLE BUFFERS等。

……

7、取得操作系统版本
  在.NET可用通过ENVIRONMENT的OSVERSION属性来取得OPERATINGSYSTEM,虽然在.NET 2.0对OPERATINGSYSTEM增加了SERVICEPACK属性,但仍然无法取得诸如到底是XP HOME 还是XP PRO之类的东西。还是要通过::GetVersionEx()来获取。

8、应用程序“快捷方式(SHORTCUT)”
  在.NET 2.0中仍查无对于创建快捷方式的支持。仍然只能使用IShellLink COM interface或是使用Windows Scripting Host中的WSHShell.CreateShortcut()。

……
9、声音播放
  在.NET 1.X里竟然没有播放WAVE的功能,……现在.NET 2.0增加了一个名字空间System.Media,你可以通过其中的SoundPlayer来播放WAVE文件了。不过如果要做到更细节的控制--比如暂停(PAUSE)声音的播放--还是办不到。Microsoft.VisualBasic.Devices.Audio也是类同。

10、Microsoft Management Console(MMC) Snap-In
  我们知道MMC对于WINDOWS来说是个很重要的管理工具框架和容器,但是目前看来.NET仍然缺乏对它的支持,也就是说还是无法撰写纯.NET的MMC Snap-In。

11、DirectX
  ……但是.NET 2.0只在MOBILE环境下支持了DirectX,也就是说只有在.NET CF中才支持,这个举动显然是冲着JAVA的MOBILE GAME的市场来的,请看Microsoft.WindowsMobile.DirectX和Microsoft.WindowsMobile.DirectX.Direct3D这两个名字空间。

…………

以上是节选的部分文字,以解答有些网友的疑惑……呵呵……

TOP

发新话题