1 前言
作为和delphi类似的rad(rapid application development)工具,c++ builder的强大功能不仅体现在数据库开发方面,也凸现于应用程序开发上(令人称绝的是这两方面结合得非常好)。仅就应用程序而言,要真正体现c++ builder的优势,开发出高质量的软件,则在拖拉拽放之外,尚需用到一些进阶技术。如消息处理、dll、ole、线程、sdk编程。c++ builder在这些方面都或多或少有独到的优势。此外,可以方便地制作自定义控件,也是c++ builder的一大特色和高级功能。本文将通过制作一个标题棒在窗口左边的对话框控件,来示范一些c++ builder中关于控件制作和消息处理的概念,同时涉及到一点sdk编程。我们将要制作的是一个对话框,就如同opendialog等一样,一调用其execute()方法,就弹出一个如图一所示的窗口。这个窗口的标题棒位于左方,绿色,文字走向为由下而上的90度字形,其功能和一般的标题棒相同,可以將鼠标移至该处来移动该窗口。
首先来完成这个窗口,然后用它来制作对话框控件。
2 利用wm_nchittest消息制作竖直标题的窗口
.wm_nchittest消息
c++builder将某些windows消息封装于事件(event)中,但无法囊括所有消息,如wm_nc**** 系列消息。wm_nchittest消息发生于游标(cursor)移动或鼠标按下、释放时,返回值指示目前游标所在位置,如返回hthscroll表示处于水平滚动条内,返回htcaption表示处于标题棒内(参见win32 sdk help)。其参数xpos、ypos分别表示游标的x、y坐标(相对于屏幕左上角),分别对应于lparam的低字和高字。如果拦截wm_nchittest消息,使得当鼠标在窗口左边按下时,人为地将返回值设为htcaption,则系统将以为是在标题棒内,于是将可以移动窗口,完成了标题棒的功能,至于颜色和文字,则与消息无关,将在下面叙述其原理。