c = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rc) ; wsprintf (szBuffer, TEXT (" %02X %02X %02X "), GetRValue (cr), GetGValue (cr), GetBValue (cr)) ; DrawText (hdc, szBuffer, -1, &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: DeleteDC (hdcScreen) ; KillTimer (hwnd, ID_TIMER) ; PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
WHATCLR在WinMain中做了一点与以往不同的事。因为WHATCLR的视窗只需要显示十六进位RGB值那么大,所以它在CreateWindow函式中使用WS_BORDER视窗样式建立了一个不能改变大小的视窗。要计算视窗的大小,WHATCLR通过先呼叫CreateIC再呼叫GetSystemMetrics以取得用於视讯显示的装置内容资讯。计算好的视窗宽度和高度值被传递给CreateWindow。
WHATCLR的视窗讯息处理程式在处理WM_CREATE讯息处理期间,呼叫CreateDC建立了用於整个视讯显示的装置内容。这个装置内容在程式的生命周期内都有效。在处理WM_TIMER讯息处理期间,程式取得目前滑鼠游标位置的图素。在处理WM_PAINT讯息处理期间显示RGB颜色。
您可能想知道,从CreateDC函式中取得的装置内容代号是否能让您在萤幕的任意位置显示一些东西,而不光只是取得图素颜色。答案是可以的,一般而言,让一个应用程式在另一个程式控制的画面区域上画图是不好的,但在某些特殊情况下,这可能会非常有用。
|