|
态。例如,Windows程式经常使用Shift与游标键的组合键来扩大文书处理里选中的范围。Ctrl键常用於修改游标键的意义。例如,Ctrl与右箭头键相组合可以表示游标右移一个字。
决定您的程式中使用键盘方式的最佳方法之一是了解现有的Windows程式使用键盘的方式。如果您不喜欢那些定义,当然可以对其加以修改,但是这样做不利於其他人很快地学会使用您的程式。
为SYSMETS加上键盘处理功能
在编写第四章中三个版本的SYSMETS程式时,我们还不了解键盘,只能使用卷动列和滑鼠来卷动文字。现在我们知道了处理键盘讯息的方法,那么不妨在程式中加入键盘介面。显然,这是处理游标移动键的工作。我们将大多数游标键(Home、End、Page
Up、Page Down、Up Arrow和Down Arrow)用於垂直卷动,左箭头键和右箭头键用於不太重要的水平卷动。
建立键盘介面的一种简单方法是在视窗讯息处理程式中加入与WM_VSCROLL和WM_HSCROLL处理方式相仿,而且本质上相同的WM_KEYDOWN处理方法。不过这样子做是不聪明的,因为如果要修改卷动列的做法,就必须相对应地修改WM_KEYDOWN。
为什么不简单地将每一种WM_KEYDOWN讯息都翻译成同等效用的WM_VSCROLL或者WM_HSCROLL讯息呢?通过向视窗讯息处理程式发送假冒讯息,我们可能会让WndProc认为它获得了卷动资讯。
在Windows中,这种方法是可行的。发送讯息的函式叫做SendMessage,它所用的参数与传递到视窗讯息处理程式的参数是相同的:
SendMessage
(hwnd, message, wParam, lParam) ;
在呼叫SendMessage时,Windows呼叫视窗代号为hwnd的视窗讯息处理程式,并把这四个参数传给它。当视窗讯息处理程式完成讯息处理之後,Windows把控制传回到SendMessage呼叫之後的下一道叙述。您发送讯息过去的视窗讯息处理程式,可以是同一个视窗讯息处理程式、同一程式中的其他视窗讯息处理程式或者其他应用程式,中的视窗讯息处理程式。
下面说明在SYSMETS程式中使用SendMessage处理WM_KEYDOWN代码的方法:
|