预期结果:
窗口左边有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); //hwndScroll hwndLabel 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); //hwndLabel hwndScroll 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); } return 0; } break; case WM_DESTROY: PostQuitMessage(0); return 0; break; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
3个滚动条代表 RGB,(0-》255)
static 的背景颜色是 这3个滚动条的: RGB(滚动条1,滚动条2,滚动条3)
i=GetWindowLong(hwnd,GWL_ID);
你这是返回的窗口ID啊,而color[i]中i只能取0,1,2,你调试下看看i是取的多少,
但是我想即使取的[0,2],那也是固定不变的,因为你始终获取的是窗口的ID,而不是滚动条的ID 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); }