程序设计之路[Road of Programming]
小学时便知道计算机,认为是一个神秘莫测的东西,只有高智商的人才知道如何与显示器“说话”;
初中时知道了程序员,一个很神圣的工作,需要很高的学历和智商;
高中时第一次摸了摸计算机的键盘,说不出的感觉;
大学开始真正接触计算机,在Dos下使用Borland Turbo Pascal写下了人生第一个程序;
在今时今日,计算机已经很普通了,小学生也熟练的操作着计算机(十几岁就写下天才程序的神童
们更是让我汗颜)。程序员也很普通了,Visual Basic把程序设计带入了普通大众的工作学习甚至娱乐
中(Microsof 功不可没)。尽管如此,还是有很多朋友想成为一名程序员(不管你的目的是什么,炫耀
或是成就自我),在RAD开发工具的带动下,你写程序的愿望得到最快速的实现,你的“成绩”让你不止一
次的欢呼雀跃。
在RAD开发工具中,如Visual Basic,你不需要写一行代码就可以生成一个Windows环境下标准的窗体(
当然它什么也不做),而在没有RAD工具和RAD工具刚刚开始萌芽的时候,程序员为了在Windows下面创建这样
一个窗体颇费周折,更早的时候,程序员为了在Dos下面写一个类似Turbo C 或 Turbo Pascal 的IDE(只是生成
一个什么也不做的IDE,就需要1000-2000行代码)。程序设计是一个艰苦的过程(求伯君设计WPS的过程
就是一个例证),在今天很多朋友热衷于去追逐最新的技术、技巧,这本是没有错的,但需要你有扎实的
基本功。比如,将程序图标最小化到系统托盘是一个常用的技巧,一般来讲,你不会只是为了这样做而这样做,
你还会在实现这一功能的同时实现鼠标双击、单击该图标(左键或右键)调出指定窗体、弹出菜单等操作。实现这
一功能的最简便方法应该是使用他人已经写好的组件,但不够灵活。更多的时候,我们是自己调用 Windows API
来实现这一功能的,灵活但麻烦一些。在C#中这个问题得到了较好的解决。在C#中,有一个NotifyIcon控件和
NotifyIcon类(System.Windows.Fomrs.NotifyIcon),使用它们可以轻松的满足你的要求。那么在此之前程序员
是如何完成这一功能的呢?在 Windows SDK 下,程序员用到了Shell_NotifyIcon()这个API函数(其原型为:
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage, // message identifier
PNOTIFYICONDATA pnid // pointer to structure
);),
并且要为此函数的pnid参数进行赋值(其原型为:
typedef struct _NOTIFYICONDATA { // nid
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
),然后你才可以在你的程序中成功调用此API,完成你的功能。为了能够响应你的鼠标事件(实现鼠标双击、
单击该图标(左键或右键)调出指定窗体、弹出菜单等操作),你要映射鼠标相应的消息,然后在其中加入你
想要它执行的操作。这样就完成了一个简单的系统托盘程序。相比较而言,使用C#要简单一些。
我们不是为了追逐最新的流行的技术才写程序的,学习最新的技术可以使我们的程序设计的理念得到提高,
使程序在更为广泛的领域得到应用,让我们的付出得到最大的收获。当然不是为了向别人炫耀。
学习的过程不是一蹴而就的,它需要长期的历练、积累和沉淀,特别是软件开发。心浮气躁、急功近利是
万万不可取的。当我们在学习新的技术时我们应该更深的去理解该技术的原理,当我们应用一种技巧时应当不
仅知其然也要知其所以然。C#中实现系统托盘技巧之所以简单是因为 NotifyIcon类中封装了大部分在此之前需要
自己手工完成的东西,微软为我们做的越多,我们使用起来也就越方便。不知其所以然,你也可以完成一定的
功能,但不会成为一名合格的程序员,合格的程序员必须知其所以然。
新的开发工具(语言)大大提高了我们的工作效率,但要在实际中应用好它们是不容易的。学以致用是软件开
发不变的宗旨。
程序设计之路一定不平坦,需要你有足够的耐心和毅力。