#include <windows.h>
#include <string.h>
#include "Scrllbar.h"int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG msg; if(!InitApplication(hInstance))
return (FALSE); if(!InitInstance(hInstance,nCmdShow))
return (FALSE); SendMessage(hWndMain,WM_COMMAND,IDM_DRAW,0L);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcexScrllBar;
wcexScrllBar.cbClsExtra=sizeof(WNDCLASSEX);
wcexScrllBar.style=0;
wcexScrllBar.lpfnWndProc=(WNDPROC)MainWndProc;
wcexScrllBar.cbClsExtra=0;
wcexScrllBar.cbWndExtra=0;
wcexScrllBar.hInstance=hInstance;
wcexScrllBar.hIcon=LoadIcon(hInstance,"ScrollBarIcon");
wcexScrllBar.hCursor=LoadCursor(NULL,IDC_ARROW);
wcexScrllBar.hbrBackground=GetStockObject(WHITE_BRUSH);
wcexScrllBar.lpszClassName="ScrollBarWClass";
wcexScrllBar.lpszMenuName="ScrollBarMenu";
wcexScrllBar.hIconSm=LoadIcon(hInstance,"SmallIcon"); return (RegisterClassEx(&wcexScrllBar));
}BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
hInst=hInstance; hWndMain=CreateWindow(
"ScrollBarWClass",
"滚动条控件的示范程序",
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
if(!hWndMain)
return (FALSE); crRGB[0]=0;
crRGB[1]=0;
crRGB[2]=0; ShowWindow(hWndMain,nCmdShow);
UpdateWindow(hWndMain);
return TRUE;
}LRESULT APIENTRY MainWndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HDC hDC;
HBRUSH hBrush;
static HWND hWndScrollBar;
static SCROLLINFO stScrollInfo;
static int nRectWidth; switch(message)
{
case WM_CREATE:
hWndScrollBar=CreateWindowEx(    0L,
"SCROLLBAR",
(LPSTR)NULL,
WS_CHILD | SBS_VERT,
10,
30-GetSystemMetrics(SM_CYVSCROLL),
19,
100+2*GetSystemMetrics(SM_CYVSCROLL),
hWnd,
(HMENU)NULL,
hInst,
(LPVOID)NULL);
stScrollInfo.cbSize=sizeof(SCROLLINFO);
stScrollInfo.fMask=SIF_POS | SIF_RANGE | SIF_PAGE;
stScrollInfo.nMin=1;
stScrollInfo.nMax=100;
stScrollInfo.nPos=1;
stScrollInfo.nPage=10; //设置滚动条控件的各方面的特性参数
SetScrollInfo(hWndScrollBar,SB_CTL,&stScrollInfo,FALSE);
ShowWindow(hWndScrollBar,TRUE); nRectWidth=100;
break; case WM_VSCROLL:
if((HWND)lParam!=hWndScrollBar)
break;
switch(LOWORD(wParam))
{
case SB_LINEUP:
nRectWidth+=1;
break; case SB_LINEDOWN:
nRectWidth-=1;
break; case SB_PAGEUP:
nRectWidth+=10;
break; case SB_PAGEDOWN:
nRectWidth-=10;
break; case SB_THUMBPOSITION:
nRectWidth=101-HIWORD(wParam);
break; default:
return (DefWindowProc(hWnd,message,wParam,lParam));
} if(nRectWidth<1)
nRectWidth=1;
else if(nRectWidth>100)
nRectWidth=100;
stScrollInfo.fMask=SIF_POS;
stScrollInfo.nPos=101-nRectWidth;
SetScrollInfo(hWndScrollBar,SB_CTL,&stScrollInfo,TRUE); SendMessage(hWndMain,WM_COMMAND,IDM_DRAW,0L);
break; case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_RGB:
DialogBox(hInst,"RGBDlg",hWnd,(DLGPROC)RGBDlgProc);
break; case IDM_DRAW:
hDC=GetDC(hWnd);
hBrush=CreateSolidBrush(RGB(255,255,255));
SelectObject(hDC,hBrush);
Rectangle(hDC,30,30,130,130); hBrush=CreateSolidBrush(RGB(crRGB[0],crRGB[1],crRGB[2]));
SelectObject(hDC,hBrush);
Rectangle(hDC,30,130-nRectWidth,30+nRectWidth,130);
ReleaseDC(hWnd,hDC);
break; case IDM_EXIT:
PostQuitMessage(0);
break; case IDM_ABOUT:
DialogBox(hInst,"AboutBos",hWnd,(DLGPROC)About);
break; default:
return(DefWindowProc(hWnd,message,wParam,lParam));
}
break; case WM_DESTROY:
PostQuitMessage(0);
break; default:
return(DefWindowProc(hWnd,message,wParam,lParam));
} return (0);
}BOOL APIENTRY RGBDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
static int CurrentVal[3],PrevVal[3];
static HWND hwScroll[3];
char szString[10];
int i; switch(message)
{
case WM_INITDIALOG:
for(i=0;i<3;i++)
{
CurrentVal[i]=crRGB[i];
PrevVal[i]=crRGB[i]; hwScroll[i]=GetDlgItem(hDlg,IDC_RED+i);
SetScrollRange(hwScroll[i],SB_CTL,0,255,FALSE);
SetScrollPos(hwScroll[i],SB_CTL,CurrentVal[i],TRUE);
SetDlgItemText(hDlg,IDC_VALRED+1,itoa(CurrentVal[i],szString,10));
}
SetFocus(hwScroll[0]);
break;
case WM_HSCROLL:
i=0;
while(hwScroll[i]!=(HWND)lParam)
i++;
switch (LOWORD(wParam))
{
case SB_LINEDOWN:
CurrentVal[i]++;
if(CurrentVal[i]>255)
CurrentVal[i]=255;
break; case SB_LINEUP:
CurrentVal[i]--;
if(CurrentVal[i]<0)
CurrentVal[i]=0;
break; case SB_PAGEDOWN:
CurrentVal[i]+=(255-CurrentVal[i])/2;
break; case SB_PAGEUP:
CurrentVal[i]-=CurrentVal[i]/2;
break; case SB_THUMBTRACK:
CurrentVal[i]=HIWORD(wParam);
break; case SB_TOP:
CurrentVal[i]=0;
break; case SB_BOTTOM:
CurrentVal[i]=255;
break;
}
//设定滚动条的位置及其相对应的文字
SetScrollPos(hwScroll[i],SB_CTL,CurrentVal[i],TRUE);
SetDlgItemText(hDlg,IDC_VALRED+1,itoa(CurrentVal[i],szString,10));
crRGB[i]=CurrentVal[i];
SendMessage(hWndMain,WM_COMMAND,IDM_DRAW,0L);
break; case WM_COMMAND:
switch(wParam)
{
case IDOK:
for(i=0;i<3;i++)
crRGB[i]=CurrentVal[i];
EndDialog(hDlg,TRUE);
return (TRUE); case IDCANCEL:
for(i=0;i<3;i++)
crRGB[i]=PrevVal[i]; SendMessage(hWndMain,WM_COMMAND,IDM_DRAW,0L);
EndDialog(hDlg,FALSE);
return (TRUE);
}
break;
}
return (FALSE);
}BOOL APIENTRY About(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
return(TRUE); case WM_COMMAND:
if(LOWORD(wParam)==IDOK || LOWORD(wParam)==IDCANCEL)
{
EndDialog(hDlg,TRUE);
return (TRUE);
}
break;
}
return (FALSE);
}程序有一个错误就是找不出来

解决方案 »

  1.   

    没办法看,有个头文件内容没贴出来,你到底报什么错啊?
    我用了一下你的代码,好像在int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)有个非法字符,应该是LPSTR后面的空格有问题,但是不知道是不是这个网面的问题
      

  2.   

    楼上的这个空格的问题找出来了,但还有一个错误提示:
    F:\工作区\Scrllbar\Scrllbar.cpp(35) : error C2440: '=' : cannot convert from 'void *' to 'struct HBRUSH__ *'
            Conversion from 'void*' to pointer to non-'void' requires an explicit cast
      

  3.   

    现在编译已经通过了,但是连接的时候有出现错误:
    Linking...
    CVTRES : fatal error CVT1100: duplicate resource -- type:GROUP_ICON, name:SCROLLBARSMALLICON, language:0x0804
    .\Debug\Scrllbar.res : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
    执行 link.exe 时出错.Scrllbar.exe - 1 error(s), 0 warning(s)