首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

可以依据滚动条的调整,从而改变static的颜色背景

2013-01-12 
可以根据滚动条的调整,从而改变static的颜色背景预期结果:窗口左边有3个滚动条,右边有个static控件。可以根

可以根据滚动条的调整,从而改变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) ;
}


[解决办法]
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
[解决办法]
SetScrollRange 没放到循环里,循环结束后i变成了3

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);
}

热点排行