是对话方块用来获得文字尺寸的函式。此函式传回一个32位元的值,其中低字组表示宽度,高字组表示高度。由於GetDialogBaseUnits传回的值与从GetTextMetrics获得的值大致上相同,但GetDialogBaseUnits有时使用起来会更方便些,而且能够与对话方块控制项更好地保持一致。
对每个子视窗,它的子视窗ID参数应该各不相同。在处理来自子视窗的WM_COMMAND讯息时,ID帮助您的视窗讯息处理程式识别出相应的子视窗。注意子视窗ID是作为CreateWindow的一个参数传递的,该参数通常用於指定程式的功能表,因此子视窗ID必须被强制转换为HMENU。
CreateWindow呼叫的执行实体代号看起来有点奇怪,但是它利用了如下的事实,亦即在处理WM_CREATE讯息的过程中,lParam实际上是指向CREATESTRUCT
(「建立结构」)结构的指标,该结构有一个hInstance成员。所以将lParam转换成指向CREATESTRUCT结构的一个指标,并取出hInstance。
(有些Windows程式使用名为hInst的整体变数,使视窗讯息处理程式能存取WinMain中的执行实体代号。在WinMain中,您只需在建立主视窗之前设定:
在第七章中的CHECKER3程式中,我们曾用GetWindowLong取得执行实体代号:
这几种方法都是正确的。)
在呼叫CreateWindow之後,我们不必再为这些子视窗做任何事情,由Windows中的按钮视窗讯息处理程式负责维护它们,并处理所有的重画工作(BS_OWNERDRAW样式的按钮例外,它要求程式绘制它,这些将在後面加以讨论)。在程式终止时,如果父视窗已经被清除,那么Windows将清除这些子视窗。
子视窗向父视窗发讯息
当您执行BTNLOOK时,将看到在显示区域的左边会显示出不同的按钮型态。我在前面已经提到过,用滑鼠单击按钮时,子视窗控制项就向其父视窗发送一个WM_COMMAND讯息。BTNLOOK拦截WM_COMMAND讯息并显示wParam和lParam的值,它们的含义如下:
LOWORD (wParam)
HIWORD
(wParam)
lPara |
|