#define VC_EXTRALEAN// Exclude rarely-used stuff from Windows headers #ifndef WINVER #define WINVER 0x0400// 0x0400 == Windows 98 and Windows NT 4.0 (because of '_WIN32_WINDOWS=0x0410') #endif#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0400// 0x0400 == Windows NT 4.0 #endif#ifndef _WIN32_WINDOWS #define _WIN32_WINDOWS 0x0410 // 0x0410 == Windows 98 #endif#ifndef _WIN32_IE #define _WIN32_IE 0x0400// 0x0400 == Internet Explorer 4.0 -> Comctl32.dll v4.71 #endif #define NUMLINES ((int)(sizeof(sysmetrics)/sizeof(sysmetrics[0]))) struct { int Index; TCHAR * szLabel; TCHAR * szDesc; } sysmetrics[]= { SM_CXSCREEN,TEXT("SM_CXSCREEN"),TEXT("Screen Width in pixels"), SM_CYSCREEN,TEXT("SM_CYSCREEN"),TEXT("Screen height in pixels"), SM_CXVSCROLL,TEXT("SM_CXVSCROLL"),TEXT("Vertical scroll width"), SM_CYHSCROLL,TEXT("SM_CYHSCROLL"),TEXT("Horizontal scroll height"), SM_CYCAPTION,TEXT("SM_CYCAPTION"),TEXT("Caption bar height"), SM_CXBORDER,TEXT("SM_CXBORDER"),TEXT("Window Border width"), SM_CYBORDER,TEXT("SM_CYBORDER"),TEXT("Window Border height"), SM_CXFIXEDFRAME,TEXT("SM_CXFIXEDFRAME"),TEXT("Dialog window frame width"), SM_CYFIXEDFRAME,TEXT("SM_CYFIXEDFRAME"),TEXT("Dialog window frame height"), SM_CYVTHUMB,TEXT("SM_CYVTHUMB"),TEXT("Horizontal scroll thumb height"), SM_CXHTHUMB,TEXT("SM_CXHTHUMB"),TEXT("Horizontal scroll thumb width"), SM_CXICON,TEXT("SM_CXICON"),TEXT("Icon width"), SM_CYICON,TEXT("SM_CYICON"),TEXT("Icon height"), SM_CXCURSOR,TEXT("SM_CXCURSOR"),TEXT("Cursor width"), SM_CYCURSOR,TEXT("SM_CYCURSOR"),TEXT("Cursor height"), SM_CYMENU,TEXT("SM_CYMENU"),TEXT("Menu bar height"), SM_CXFULLSCREEN,TEXT("SM_CXFULLSCREEN"),TEXT("Full screen client area width"), SM_CYFULLSCREEN,TEXT("SM_CYFULLSCREEN"),TEXT("Full screen client area height"), SM_CYKANJIWINDOW,TEXT("SM_CYKANJIWINDOW"),TEXT("Kanji window height"), SM_MOUSEPRESENT,TEXT("SM_MOUSEPRESENT"),TEXT("Mouse present flag"), SM_CYVSCROLL,TEXT("SM_CYVSCROLL"),TEXT("Vertical scroll arrow height"), SM_CXHSCROLL,TEXT("SM_CXHSCROLL"),TEXT("Horizontal scroll arrow width"), SM_DEBUG,TEXT("SM_DEBUG"),TEXT("Debug version flag"), SM_SWAPBUTTON,TEXT("SM_SWAPBUTTON"),TEXT("Mouse buttons swapped flag"), SM_CXMIN,TEXT("SM_CXMIN"),TEXT("Minimum window width"), SM_CYMIN,TEXT("SM_CYMIN"),TEXT("Minimum window height"), SM_CXSIZE,TEXT("SM_CXSIZE"),TEXT("Min/Max/Close button width"), SM_CYSIZE,TEXT("SM_CYSIZE"),TEXT("Min/Max/Close button height"), SM_CXSIZEFRAME,TEXT("SM_CXSIZEFRAME"),TEXT("window sizing frame width"), SM_CYSIZEFRAME,TEXT("SM_CYSIZEFRAME"),TEXT("window sizint frame height"), SM_CXMINTRACK,TEXT ("SM_CXMINTRACK"),TEXT ("Minimum window tracking width"), SM_CYMINTRACK,TEXT ("SM_CYMINTRACK"),TEXT ("Minimum window tracking height"), SM_CXDOUBLECLK, TEXT ("SM_CXDOUBLECLK"), TEXT ("Double click x tolerance"), SM_CYDOUBLECLK, TEXT ("SM_CYDOUBLECLK"), TEXT ("Double click y tolerance"), SM_CXICONSPACING,TEXT ("SM_CXICONSPACING"), TEXT ("Horizontal icon spacing"), SM_CYICONSPACING,TEXT ("SM_CYICONSPACING"), TEXT ("Vertical icon spacing"), SM_MENUDROPALIGNMENT, TEXT ("SM_MENUDROPALIGNMENT"), TEXT ("Left or right menu drop"), SM_PENWINDOWS, TEXT ("SM_PENWINDOWS"), TEXT ("Pen extensions installed"), SM_DBCSENABLED, TEXT ("SM_DBCSENABLED"), TEXT ("Double-Byte Char Set enabled"), SM_CMOUSEBUTTONS, TEXT ("SM_CMOUSEBUTTONS"), TEXT ("Number of mouse buttons"), SM_SECURE, TEXT ("SM_SECURE"), TEXT ("Security present flag"), SM_CXEDGE, TEXT ("SM_CXEDGE"), TEXT ("3-D border width"), SM_CYEDGE, TEXT ("SM_CYEDGE"), TEXT ("3-D border height"), SM_CXMINSPACING, TEXT ("SM_CXMINSPACING"), TEXT ("Minimized window spacing width"), SM_CYMINSPACING, TEXT ("SM_CYMINSPACING"), TEXT ("Minimized window spacing height"), SM_CXSMICON, TEXT ("SM_CXSMICON"), TEXT ("Small icon width"), SM_CYSMICON, TEXT ("SM_CYSMICON"), TEXT ("Small icon height"), SM_CYSMCAPTION, TEXT ("SM_CYSMCAPTION"), TEXT ("Small caption height"), SM_CXSMSIZE, TEXT ("SM_CXSMSIZE"), TEXT ("Small caption button width"), SM_CYSMSIZE, TEXT ("SM_CYSMSIZE"), TEXT ("Small caption button height"), SM_CXMENUSIZE, TEXT ("SM_CXMENUSIZE"), TEXT ("Menu bar button width"), SM_CYMENUSIZE, TEXT ("SM_CYMENUSIZE"), TEXT ("Menu bar button height"), SM_ARRANGE, TEXT ("SM_ARRANGE"), TEXT ("How minimized windows arranged"), SM_CXMINIMIZED, TEXT ("SM_CXMINIMIZED"), TEXT ("Minimized window width"), SM_CYMINIMIZED, TEXT ("SM_CYMINIMIZED"), TEXT ("Minimized window height"), SM_CXMAXTRACK, TEXT ("SM_CXMAXTRACK"), TEXT ("Maximum draggable width"), SM_CYMAXTRACK, TEXT ("SM_CYMAXTRACK"), TEXT ("Maximum draggable height"), SM_CXMAXIMIZED, TEXT ("SM_CXMAXIMIZED"), TEXT ("Width of maximized window"), SM_CYMAXIMIZED, TEXT ("SM_CYMAXIMIZED"), TEXT ("Height of maximized window"), SM_NETWORK, TEXT ("SM_NETWORK"), TEXT ("Network present flag"), SM_CLEANBOOT, TEXT ("SM_CLEANBOOT"), TEXT ("How system was booted"), SM_CXDRAG, TEXT ("SM_CXDRAG"), TEXT ("Avoid drag x tolerance"), SM_CYDRAG, TEXT ("SM_CYDRAG"), TEXT ("Avoid drag y tolerance"), SM_SHOWSOUNDS, TEXT ("SM_SHOWSOUNDS"), TEXT ("Present sounds visually"), SM_CXMENUCHECK, TEXT ("SM_CXMENUCHECK"), TEXT ("Menu check- width"), SM_CYMENUCHECK, TEXT ("SM_CYMENUCHECK"), TEXT ("Menu check- height"), SM_SLOWMACHINE, TEXT ("SM_SLOWMACHINE"), TEXT ("Slow processor flag"), SM_MIDEASTENABLED, TEXT ("SM_MIDEASTENABLED"),TEXT ("Hebrew and Arabic enabled flag"), SM_MOUSEWHEELPRESENT,TEXT ("SM_MOUSEWHEELPRESENT"),TEXT ("Mouse wheel present flag"), SM_XVIRTUALSCREEN,TEXT ("SM_XVIRTUALSCREEN"),TEXT ("Virtual screen x origin"), SM_YVIRTUALSCREEN,TEXT ("SM_YVIRTUALSCREEN"),TEXT ("Virtual screen y origin"), SM_CXVIRTUALSCREEN, TEXT ("SM_CXVIRTUALSCREEN"), TEXT ("Virtual screen width"), SM_CYVIRTUALSCREEN, TEXT ("SM_CYVIRTUALSCREEN"), TEXT ("Virtual screen height"), SM_CMONITORS, TEXT ("SM_CMONITORS"), TEXT ("Number of monitors"), SM_SAMEDISPLAYFORMAT, TEXT ("SM_SAMEDISPLAYFORMAT"), TEXT ("Same color format flag") } ;
{ if(zDelta == 120)
向上滚动
if(zDelta == -120)
向下滚动
case WM_MOUSEWHEEL:
这个消息,下面应该怎么做?怎样把鼠标滚轮消息与滚动条消息联系起来?
呵呵~
#ifndef WINVER
#define WINVER 0x0400// 0x0400 == Windows 98 and Windows NT 4.0 (because of '_WIN32_WINDOWS=0x0410')
#endif#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400// 0x0400 == Windows NT 4.0
#endif#ifndef _WIN32_WINDOWS
#define _WIN32_WINDOWS 0x0410 // 0x0410 == Windows 98
#endif#ifndef _WIN32_IE
#define _WIN32_IE 0x0400// 0x0400 == Internet Explorer 4.0 -> Comctl32.dll v4.71
#endif
#define NUMLINES ((int)(sizeof(sysmetrics)/sizeof(sysmetrics[0])))
struct
{
int Index;
TCHAR * szLabel;
TCHAR * szDesc;
}
sysmetrics[]=
{
SM_CXSCREEN,TEXT("SM_CXSCREEN"),TEXT("Screen Width in pixels"),
SM_CYSCREEN,TEXT("SM_CYSCREEN"),TEXT("Screen height in pixels"),
SM_CXVSCROLL,TEXT("SM_CXVSCROLL"),TEXT("Vertical scroll width"),
SM_CYHSCROLL,TEXT("SM_CYHSCROLL"),TEXT("Horizontal scroll height"),
SM_CYCAPTION,TEXT("SM_CYCAPTION"),TEXT("Caption bar height"),
SM_CXBORDER,TEXT("SM_CXBORDER"),TEXT("Window Border width"),
SM_CYBORDER,TEXT("SM_CYBORDER"),TEXT("Window Border height"),
SM_CXFIXEDFRAME,TEXT("SM_CXFIXEDFRAME"),TEXT("Dialog window frame width"),
SM_CYFIXEDFRAME,TEXT("SM_CYFIXEDFRAME"),TEXT("Dialog window frame height"),
SM_CYVTHUMB,TEXT("SM_CYVTHUMB"),TEXT("Horizontal scroll thumb height"),
SM_CXHTHUMB,TEXT("SM_CXHTHUMB"),TEXT("Horizontal scroll thumb width"),
SM_CXICON,TEXT("SM_CXICON"),TEXT("Icon width"),
SM_CYICON,TEXT("SM_CYICON"),TEXT("Icon height"),
SM_CXCURSOR,TEXT("SM_CXCURSOR"),TEXT("Cursor width"),
SM_CYCURSOR,TEXT("SM_CYCURSOR"),TEXT("Cursor height"),
SM_CYMENU,TEXT("SM_CYMENU"),TEXT("Menu bar height"),
SM_CXFULLSCREEN,TEXT("SM_CXFULLSCREEN"),TEXT("Full screen client area width"),
SM_CYFULLSCREEN,TEXT("SM_CYFULLSCREEN"),TEXT("Full screen client area height"),
SM_CYKANJIWINDOW,TEXT("SM_CYKANJIWINDOW"),TEXT("Kanji window height"),
SM_MOUSEPRESENT,TEXT("SM_MOUSEPRESENT"),TEXT("Mouse present flag"),
SM_CYVSCROLL,TEXT("SM_CYVSCROLL"),TEXT("Vertical scroll arrow height"),
SM_CXHSCROLL,TEXT("SM_CXHSCROLL"),TEXT("Horizontal scroll arrow width"),
SM_DEBUG,TEXT("SM_DEBUG"),TEXT("Debug version flag"),
SM_SWAPBUTTON,TEXT("SM_SWAPBUTTON"),TEXT("Mouse buttons swapped flag"),
SM_CXMIN,TEXT("SM_CXMIN"),TEXT("Minimum window width"),
SM_CYMIN,TEXT("SM_CYMIN"),TEXT("Minimum window height"),
SM_CXSIZE,TEXT("SM_CXSIZE"),TEXT("Min/Max/Close button width"),
SM_CYSIZE,TEXT("SM_CYSIZE"),TEXT("Min/Max/Close button height"),
SM_CXSIZEFRAME,TEXT("SM_CXSIZEFRAME"),TEXT("window sizing frame width"),
SM_CYSIZEFRAME,TEXT("SM_CYSIZEFRAME"),TEXT("window sizint frame height"),
SM_CXMINTRACK,TEXT ("SM_CXMINTRACK"),TEXT ("Minimum window tracking width"),
SM_CYMINTRACK,TEXT ("SM_CYMINTRACK"),TEXT ("Minimum window tracking height"),
SM_CXDOUBLECLK, TEXT ("SM_CXDOUBLECLK"),
TEXT ("Double click x tolerance"),
SM_CYDOUBLECLK, TEXT ("SM_CYDOUBLECLK"),
TEXT ("Double click y tolerance"),
SM_CXICONSPACING,TEXT ("SM_CXICONSPACING"),
TEXT ("Horizontal icon spacing"),
SM_CYICONSPACING,TEXT ("SM_CYICONSPACING"),
TEXT ("Vertical icon spacing"),
SM_MENUDROPALIGNMENT, TEXT ("SM_MENUDROPALIGNMENT"),
TEXT ("Left or right menu drop"),
SM_PENWINDOWS, TEXT ("SM_PENWINDOWS"),
TEXT ("Pen extensions installed"),
SM_DBCSENABLED, TEXT ("SM_DBCSENABLED"),
TEXT ("Double-Byte Char Set enabled"),
SM_CMOUSEBUTTONS, TEXT ("SM_CMOUSEBUTTONS"),
TEXT ("Number of mouse buttons"),
SM_SECURE, TEXT ("SM_SECURE"),
TEXT ("Security present flag"),
SM_CXEDGE, TEXT ("SM_CXEDGE"),
TEXT ("3-D border width"),
SM_CYEDGE, TEXT ("SM_CYEDGE"),
TEXT ("3-D border height"),
SM_CXMINSPACING, TEXT ("SM_CXMINSPACING"),
TEXT ("Minimized window spacing width"),
SM_CYMINSPACING, TEXT ("SM_CYMINSPACING"),
TEXT ("Minimized window spacing height"),
SM_CXSMICON, TEXT ("SM_CXSMICON"),
TEXT ("Small icon width"),
SM_CYSMICON, TEXT ("SM_CYSMICON"),
TEXT ("Small icon height"),
SM_CYSMCAPTION, TEXT ("SM_CYSMCAPTION"),
TEXT ("Small caption height"),
SM_CXSMSIZE, TEXT ("SM_CXSMSIZE"),
TEXT ("Small caption button width"),
SM_CYSMSIZE, TEXT ("SM_CYSMSIZE"),
TEXT ("Small caption button height"),
SM_CXMENUSIZE, TEXT ("SM_CXMENUSIZE"),
TEXT ("Menu bar button width"),
SM_CYMENUSIZE, TEXT ("SM_CYMENUSIZE"),
TEXT ("Menu bar button height"),
SM_ARRANGE, TEXT ("SM_ARRANGE"),
TEXT ("How minimized windows arranged"),
SM_CXMINIMIZED, TEXT ("SM_CXMINIMIZED"),
TEXT ("Minimized window width"),
SM_CYMINIMIZED, TEXT ("SM_CYMINIMIZED"),
TEXT ("Minimized window height"),
SM_CXMAXTRACK, TEXT ("SM_CXMAXTRACK"),
TEXT ("Maximum draggable width"),
SM_CYMAXTRACK, TEXT ("SM_CYMAXTRACK"),
TEXT ("Maximum draggable height"),
SM_CXMAXIMIZED, TEXT ("SM_CXMAXIMIZED"),
TEXT ("Width of maximized window"),
SM_CYMAXIMIZED, TEXT ("SM_CYMAXIMIZED"),
TEXT ("Height of maximized window"),
SM_NETWORK, TEXT ("SM_NETWORK"),
TEXT ("Network present flag"),
SM_CLEANBOOT, TEXT ("SM_CLEANBOOT"),
TEXT ("How system was booted"),
SM_CXDRAG, TEXT ("SM_CXDRAG"),
TEXT ("Avoid drag x tolerance"),
SM_CYDRAG, TEXT ("SM_CYDRAG"),
TEXT ("Avoid drag y tolerance"),
SM_SHOWSOUNDS, TEXT ("SM_SHOWSOUNDS"),
TEXT ("Present sounds visually"),
SM_CXMENUCHECK, TEXT ("SM_CXMENUCHECK"),
TEXT ("Menu check- width"),
SM_CYMENUCHECK, TEXT ("SM_CYMENUCHECK"),
TEXT ("Menu check- height"),
SM_SLOWMACHINE, TEXT ("SM_SLOWMACHINE"),
TEXT ("Slow processor flag"),
SM_MIDEASTENABLED, TEXT ("SM_MIDEASTENABLED"),TEXT ("Hebrew and Arabic enabled flag"),
SM_MOUSEWHEELPRESENT,TEXT ("SM_MOUSEWHEELPRESENT"),TEXT ("Mouse wheel present flag"),
SM_XVIRTUALSCREEN,TEXT ("SM_XVIRTUALSCREEN"),TEXT ("Virtual screen x origin"),
SM_YVIRTUALSCREEN,TEXT ("SM_YVIRTUALSCREEN"),TEXT ("Virtual screen y origin"),
SM_CXVIRTUALSCREEN, TEXT ("SM_CXVIRTUALSCREEN"),
TEXT ("Virtual screen width"),
SM_CYVIRTUALSCREEN, TEXT ("SM_CYVIRTUALSCREEN"),
TEXT ("Virtual screen height"),
SM_CMONITORS, TEXT ("SM_CMONITORS"),
TEXT ("Number of monitors"),
SM_SAMEDISPLAYFORMAT, TEXT ("SM_SAMEDISPLAYFORMAT"),
TEXT ("Same color format flag")
} ;
上面的是 sysmets.h
#include <windows.h>
#include "sysmets.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SysMets") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox ( NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow ( szAppName, TEXT ("Get System Metrics"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc ( HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
static int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth ;
HDC hdc;
TEXTMETRIC tm;
static int iDeltaPerLine, iAccumDelta ;
ULONG ulScrollLines ;
PAINTSTRUCT ps ;
SCROLLINFO si ;
TCHAR szBuffer[10] ;
int i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd ;
switch (message)
{
case WM_CREATE:
hdc=GetDC(hwnd);
GetTextMetrics(hdc,&tm); cxChar=tm.tmAveCharWidth ;
cyChar=tm.tmExternalLeading +tm.tmHeight ; cxCaps=(tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ; ReleaseDC(hwnd,hdc); iMaxWidth = 40 * cxChar + 22 * cxCaps ;
return 0;case WM_SETTINGCHANGE:
return 0;
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar,cyChar; // 用于记录字符的宽度和高度
static int cyClient; // 用于记录窗口用户区的高度
static int nVScrollPos; // 用于记录滚动块当前的位置
static int cLineNumber; // 用于记录源文件总行数
int nCurrentLineNumber; // 用于记录当前所在行数
TCHAR szBuff[256]; // 用于存放读入的字符
HDC hdc; // 显示设备句柄
PAINTSTRUCT ps; // 绘图信息结构体
TEXTMETRIC tm; // 字符信息结构体
FILE *fp; // 文件指针,用于打开、读写、关闭文件等操作 switch( message )
{
case WM_CREATE:
// 获得设备句柄
hdc = GetDC( hwnd ); // 获得字符信息,并确定字符宽度和字符高度
GetTextMetrics( hdc, &tm );
cxChar = tm.tmAveCharWidth;
cyChar = tm.tmHeight + tm.tmExternalLeading; // 释放设备句柄
ReleaseDC( hwnd, hdc ); /******* 获得源文件DisplayWithScrollBar.c的总行数 *******/
cLineNumber = 0;
// 以只读方式打开源文件DisplayWithScrollBar.c
if( (fp=fopen("DisplayWithScrollBar.cpp", "r")) != NULL )
{
while( !feof(fp) )
{
char ch;
// 一次读入一个字符,直到一行的结尾
while( (ch=fgetc(fp)) != '\n' && ch != EOF )
;
cLineNumber++;
}
// 关闭打开的文件
fclose(fp);
}
/*******************************************************/ // 设置垂直滚动条的范围
SetScrollRange( hwnd, SB_VERT, 0, cLineNumber-1, FALSE );
// 设置垂直滚动条的初始位置
SetScrollPos( hwnd, SB_VERT, 0, TRUE );
return 0; case WM_SIZE:
// 设置窗口用户区的高度
cyClient = HIWORD(lParam);
return 0;
case WM_VSCROLL:
switch( LOWORD(wParam) )
{
case SB_LINEUP: // 向上一行
nVScrollPos-= 1;
break;
case SB_LINEDOWN: // 向下一行
nVScrollPos += 1;
break;
case SB_PAGEUP: // 向上一屏
nVScrollPos-= cyClient / cyChar;
break;
case SB_PAGEDOWN: // 向下一屏
nVScrollPos += cyClient / cyChar;
break;
case SB_THUMBTRACK: //muhahahahaha~~~
nVScrollPos = HIWORD(wParam);
break;
case SB_THUMBPOSITION: // 停止拖动滚动块
nVScrollPos = HIWORD(wParam);
break;
default:
break;
} // 设置当前滚动块位置,min及max函数用于确保该位置在滚动条范围以内
nVScrollPos = min( cLineNumber-1, max(nVScrollPos,0) ); // 如果滚动块位置改变,则重新设置滚动块,并重绘
if( nVScrollPos != GetScrollPos(hwnd, SB_VERT) )
{
SetScrollPos( hwnd, SB_VERT, nVScrollPos, TRUE );
InvalidateRect( hwnd, NULL, TRUE );
}
return 0; case WM_PAINT:
hdc = BeginPaint( hwnd, &ps ); // 以只读方式打开源文件DisplayWithScrollBar.c
if( (fp=fopen("DisplayWithScrollBar.cpp", "r")) != NULL )
{
for(nCurrentLineNumber=0;nCurrentLineNumber<cLineNumber; nCurrentLineNumber++ )
{
int j=0,k;
char ch; // 从文件中读取字符,一次一个,直到一行结束或文件结束
while( (ch=fgetc(fp)) != '\n' && ch != EOF )
if( ch == '\t' ) // 以4个空格代替一个制表符
for( k=0; k<4; k++ )
szBuff[j++] = ' ';
else
szBuff[j++] = ch; TextOut( hdc, cxChar, cyChar*( nCurrentLineNumber-nVScrollPos), szBuff, j);
}
} EndPaint( hwnd, &ps );
return 0; case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hwnd, message, wParam, lParam );
}
谢谢大虾们指点,小妹感激不尽~