可以根据滚动条的调整,从而改变static的颜色背景
预期结果:
窗口左边有3个滚动条,右边有个static控件。
可以根据滚动条的调整,从而改变这个static的颜色背景。
说明:
hwndScroll------------3个滚动条
hwndRect--------------窗口右边的static控件
没有达到预期的结果.
代码:
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static COLORREF crPrim[3] = { RGB (255, 0, 0), RGB (0, 255, 0),
RGB (0, 0, 255) } ;
static HBRUSH hBrush[3] ;
static HWND hwndScroll[3], hwndLabel[3], hwndRect ;
static int color[3], cyChar ;
static RECT rcColor ;
static TCHAR * szColorLabel[] = { TEXT ("Red"), TEXT ("Green"),
TEXT ("Blue") } ;
HINSTANCE hInstance ;
int i, cxClient, cyClient ;
TCHAR szBuffer[10] ;
switch (message)
{
case WM_CREATE :
{
hInstance=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
hwndRect=CreateWindow("static",NULL,WS_VISIBLE|WS_CHILD,0,0,0,0,hwnd,(HMENU)9,hInstance,NULL);
//hwndScrollhwndLabel
for(i=0;i<3;i++)
{
hwndScroll[i]=CreateWindow("scrollbar",NULL,WS_VISIBLE|WS_CHILD|WS_TABSTOP|SBS_VERT,0,0,0,0,hwnd,(HMENU)i,hInstance,NULL);
hwndLabel[i]=CreateWindow("static",szColorLabel[i],WS_VISIBLE|WS_CHILD|SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+3),hInstance,NULL);
hBrush[i]=CreateSolidBrush(crPrim[i]);
}
cyChar=HIWORD(GetDialogBaseUnits());
SetScrollRange(hwndScroll[i],SB_CTL,0,255,FALSE);
SetScrollPos(hwndScroll[i],SB_CTL,0,FALSE);
return 0 ;
}
break;
case WM_VSCROLL:
{
i=GetWindowLong(hwnd,GWL_ID);
switch (LOWORD(wParam))
{
case SB_PAGEDOWN:
color[i]+=15;
break;
case SB_PAGEUP:
color[i]-=15;
break;
case SB_LINEDOWN:
color[i]=max(0,color[i]-1);
break;
case SB_LINEUP:
color[i]=min(255,color[i]-1);
break;
case SB_TOP:
color[i]=0;
break;
case SB_BOTTOM:
color[i]=255;
break;
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
color[i]=HIWORD(wParam);
break;
default:
break;
}//end switch
//修改
SetScrollPos(hwndScroll[i],SB_CTL,color[i],TRUE);
DeleteObject((HBRUSH)SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)CreateSolidBrush(RGB(color[0],color[1],color[2]))));
InvalidateRect(hwnd,&rcColor,TRUE);
return 0;
}
break;
case WM_SIZE :
{
cxClient=LOWORD(lParam);
cyClient=HIWORD(lParam);
SetRect(&rcColor,cxClient/2,0,cxClient,cyClient);
MoveWindow(hwndRect,cxClient/2,0,cxClient/2,cyClient,TRUE);
//hwndLabelhwndScroll
for(i=0;i<3;i++)
{
MoveWindow(hwndLabel[i],(2*i+1)*cxClient/14,cyChar/2,cxClient/14,cyClient/15,TRUE);
MoveWindow(hwndScroll[i],(2*i+1)*cxClient/14,cyChar+cyClient/15,cxClient/14,cyClient*12/15,TRUE);
}
return0;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
break;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
for(i=0;i<3;i++)
{
hwndScroll[i]=CreateWindow("scrollbar",NULL,WS_VISIBLE
[解决办法]
WS_CHILD
[解决办法]
WS_TABSTOP
[解决办法]
SBS_VERT,0,0,0,0,hwnd,(HMENU)i,hInstance,NULL);
hwndLabel[i]=CreateWindow("static",szColorLabel[i],WS_VISIBLE
[解决办法]
WS_CHILD
[解决办法]
SS_CENTER,0,0,0,0,hwnd,(HMENU)(i+3),hInstance,NULL);
hBrush[i]=CreateSolidBrush(crPrim[i]);
SetScrollRange(hwndScroll[i],SB_CTL,0,255,FALSE);
SetScrollPos(hwndScroll[i],SB_CTL,0,FALSE);
}