在处理WM_CREATE讯息处理期间,OWNDRAW建立了两个BS_OWNERDRAW样式的按钮;按钮的宽度是系统字体的8倍,高度是系统字体的4倍(在使用预先定义好的点阵图绘制按钮时,这些尺寸在VGA上建立的按钮为64图素宽64图素高,知道这些资料将非常有用)。这些按钮尚未就定位,在处理WM_SIZE讯息处理期间,通过呼叫MoveWindow函式,OWNDRAW将按钮位置放在显示区域的中心。
按下这些按钮时,它们就会产生WM_COMMAND讯息。为了处理这些WM_COMMAND讯息,OWNDRAW呼叫GetWindowRect,将整个视窗(不只是显示区域)的位置和尺寸存放在RECT(矩形)结构中,这个位置是相对於萤幕的。然後,根据按下的是左边还是右边的按钮,OWNDRAW调节这个矩形结构的各个栏位值。程式再通过呼叫MoveWindow来重新确定位置和尺寸。这将产生另一个WM_SIZE讯息,按钮被重新定位在显示区域的中央。
如果这是程式所做的全部处理,那么这完全可以,只不过按钮是不可见的。使用BS_OWNERDRAW样式建立的按钮会在需要重新著色的任何时候都向它的父视窗发送一个WM_DRAWITEM讯息。这出现在以下几种情况中:当按钮被建立时,当按钮被按下或被放开时,当按钮得到或者失去输入焦点时,以及当按钮需要重新著色的任何时候。
在处理WM_DRAWITEM讯息处理期间,lParam讯息参数是指向型态DRAWITEMSTRUCT结构的指标,OWNDRAW程式将这个指标储存在pdis变数中,这个结构包含了画该按钮时程式所必需的讯息(这个结构也可以让自绘清单方块和功能表使用)。对按钮而言非常重要的结构栏位有hDC (按钮的装置内容)、rcItem(提供按钮尺寸的RECT结构)、CtlID(控制项视窗ID)和itemState (它说明按钮是否被按下,或者按钮是否拥有输入焦点)。
呼叫FillRect用白色画刷抹掉按钮的内面,呼叫FrameRect在按钮的周围画上黑框,由此