避免使用整体变数
在ABOUT2中使用整体变数可能会、也可能不会影响您。一些程式写作者(包括我自己)较喜欢少用整体变数。ABOUT2中的整体变数iCurrentColor和iCurrentFigure看来使用得完全合法,因为它们必须同时在视窗讯息处理程式和对话方块程序中使用。不过,在一个有一大堆对话方块的程式中,每个对话方块都可能改变一堆变数的值,使整体变数的数量容易用得过多。
您可能更喜欢将程式中的对话方块与资料结构相联系,该资料结构含有对话方块可以改变的所有变数。您将在typedef叙述中定义这些结构。例如,在ABOUT2中,可以定义与「About」方块相联系的结构:
在WndProc中,您可以依据此结构来定义并初始化一个静态变数:
在WndProc中也是这样,用ad.iColor和ad.iFigure替换了所有的iCurrentColor和iCurrentFigure。呼叫对话方块时,使用DialogBoxParam而不用DialogBox。此函式的第五个参数可以是任意的32位元值。一般来说,此值设定为指向一个结构的指标,在这里是WndProc中的ABOUTBOX_DATA结构。
这是关键:DialogBoxParam的最後一个参数是作为WM_INITDIALOG讯息中的lParam传递给对话方块程序的。
对话方块程序有两个ABOUTBOX_DATA结构型态的静态变数(一个结构和一个指向结构的指标):
在AboutDlgProc中,此定义代替了iColor和iFigure的定义。在WM_INITDIALOG讯息的开始部分,对话方块程序根据lParam设定了这两个变数的值: