SDK下求对控件颜色操作清楚的高手解答,该如何处理

SDK下求对控件颜色操作清楚的高手解答
SDK编程:使用控件,想对一个static控件做一些操作,使用了SetWindowLong将其的WNDPROC修改成自己调用的一个函数,在这个函数里面如果对WM_PAINT进行操作,那么这时在对于其父窗口的WM_CTLCOLORSTATIC所进行的颜色修改就没有作用了,如果不处理WM_PAINT就没有问题。另外一点也很奇怪,如果在创建这个static时其属性中如果增加了颜色特征,WM_CTLCOLORSTATIC也会失去作用。所以很想知道static控件的颜色是如何控制的,修改它的HBRBKGROUDBRUSH没有任何用处。盼高手解答,越详细越好

测试程序如下:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
TCHAR szBuffer[200];
HINSTANCE hInstance;
static HWND hstatic;
static HBRUSH hBrushStatic, hBrushStatic2;
LONG style;

switch(message)
{
case WM_CREATE:
hInstance = (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE);
hstatic = CreateWindow( TEXT("STATIC"), TEXT("LIST is joke"), 
WS_CHILD|WS_VISIBLE|SS_CENTER|SS_GRAYRECT,//如果有了SS_GRAYRECT,WM_CTLCOLORSTATIC就无效了

100, 100, 200, 200, 
hwnd, (HMENU)1, hInstance, NULL);

OldStatic = (WNDPROC) SetWindowLong (hstatic, GWL_WNDPROC, (LONG) StaticProc );
hBrushStatic2 = (HBRUSH)GetStockObject(DKGRAY_BRUSH); 
SetClassLong(hstatic, GCL_HBRBACKGROUND, hBrushStatic2);
hBrushStatic = (HBRUSH)GetStockObject(BLACK_BRUSH);

return 0;

case WM_CTLCOLORSTATIC:
SetTextColor((HDC)wParam, RGB(70, 0, 80));
SetBkColor((HDC)wParam, RGB(0, 90, 130));
return (LRESULT)hBrushStatic;


case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
  }
  return DefWindowProc (hwnd, message, wParam, lParam) ;
}

LRESULT CALLBACK StaticProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch(message)
{
case WM_PAINT://如果处理了此消息,WM_CTLCOLORSTATIC也无效了
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 10, 10, "This is a Test", 14);
EndPaint(hwnd, &ps);
break;
}
return CallWindowProc( OldStatic, hwnd, message, wParam, lParam );
}

------解决方案--------------------
使用SetWindowLong修改指定函数后,原来的static text控件当然就不起作用的,可能你要在指定的函数中设置消息。你把代码贴完整,大家才能仔细看。
------解决方案--------------------
简单的说要这样:
WNDPROC OldStatic;
//
LRESULT CALLBACK StaticProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hparentwnd;
PAINTSTRUCT ps;
HDC hdc;
HBRUSH brsh;
switch(message)
{
case WM_PAINT: //如果处理了此消息,WM_CTLCOLORSTATIC也无效了
// OutputDebugString("StaticProc3\n");
// return CallWindowProc(OldStatic, hwnd, message, wParam, lParam );
hparentwnd=GetParent(hwnd);
//OutputDebugString("Before BeginPaint\n");
hdc = BeginPaint(hwnd, &ps);
//OutputDebugString("After BeginPaint\n");
//!!!
brsh=(HBRUSH) SendMessage(hparentwnd,WM_CTLCOLORSTATIC,(WPARAM)hdc,(LPARAM)hwnd);
::FillRect(hdc,&ps.rcPaint,brsh);
//!!!
TextOut(hdc, 10, 10, "Color Red", 9);
EndPaint(hwnd, &ps);
return 0;