16,472
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInst;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,
int iCmdShow)
{
MSG msg;
HWND hwnd;
WNDCLASS wc;
wc.lpszClassName = TEXT("GenericAppClass");
wc.lpfnWndProc = WndProc;
wc.style = CS_VREDRAW | CS_HREDRAW;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 );
wc.lpszMenuName = TEXT("GenericAppMenu");
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
if(! RegisterClass( &wc ))
{
MessageBox(NULL,TEXT("必须运行在Windows NT 系统下!"),TEXT("错误"),MB_OK);
return 0;
}
hwnd = CreateWindow( TEXT("GenericAppClass"),
TEXT("Generic Application"),
WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
CW_USEDEFAULT,
CW_USEDEFAULT,
300,
400,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow( hwnd, iCmdShow);
while(GetMessage(&msg,0,0,0))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam ,LPARAM lParam)
{
static HGLOBAL hResource;
static char *pText; //这个声明为WCHAR 的话. 滚动条就不能用了.
HDC hdc;
PAINTSTRUCT ps;
static int iNumLines,ivos;
TEXTMETRIC tm;
static int cxChar,cyChar,cxClient,cyClient,xScroll;
RECT rect;
static HWND hScroll;
switch(message)
{
case WM_CREATE:
hdc = GetDC (hwnd) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth ;
cyChar = tm.tmHeight + tm.tmExternalLeading ;
ReleaseDC (hwnd, hdc) ;
xScroll = GetSystemMetrics (SM_CXVSCROLL) ;
hScroll = CreateWindow (TEXT ("scrollbar"), NULL,
WS_CHILD | WS_VISIBLE | SBS_VERT,
0, 0, 0, 0,
hwnd, (HMENU) 1, hInst, NULL) ;
SetScrollRange (hScroll, SB_CTL, 0, 100, FALSE) ;
SetScrollPos (hScroll, SB_CTL, 0, FALSE) ;
return 0 ;
case WM_SIZE:
MoveWindow (hScroll, LOWORD (lParam) - xScroll, 0,
xScroll, cyClient = HIWORD (lParam), TRUE) ;
SetFocus (hwnd) ;
return 0 ;
case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
rect.left += cxChar ;
rect.top += cyChar * (1 - ivos) ;
DrawTextA (hdc, TEXT("test...............\
.........................\
...........................\
......................\
.........................\
............."), -1, &rect, DT_EXTERNALLEADING) ;
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_VSCROLL :
switch (wParam)
{
case SB_TOP :
ivos = 0 ;
break ;
case SB_BOTTOM :
ivos = 100 ;
break ;
case SB_LINEUP :
ivos -= 1 ;
break ;
case SB_LINEDOWN :
ivos += 1 ;
break ;
case SB_PAGEUP :
ivos -= cyClient / cyChar ;
break ;
case SB_PAGEDOWN :
ivos += cyClient / cyChar ;
break ;
case SB_THUMBPOSITION :
ivos = LOWORD (lParam) ;
break ;
}
ivos = max (0, min (ivos, 100)) ;
if (ivos != GetScrollPos (hScroll, SB_CTL))
{
SetScrollPos (hScroll, SB_CTL, ivos, TRUE) ;
InvalidateRect (hwnd, NULL, TRUE) ;
}
return 0 ;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}