📄 strview.cpp
字号:
#include"StrView.h"
//const int WM_MOUSEWHEEL=522;
//((int)(sizeof devcaps/sizeof devcaps[0]))
extern HWND hTree;
extern int numline;
extern LPCTSTR TmpStr;
extern BOOL ScrollCheck;
extern HMENU hRMenu;
int CALLBACK WndProcStr(HWND hWnd, unsigned wMessage,WPARAM wParam, LPARAM lParam)
{
static int cxChar,cxCaps,cyChar,cyClient,iVscrollPos,cxClient;
static int iDeltaPerLine, iAccumDelta ;
static int iMaxWidth;
POINT stPos;
ULONG ulScrollLines ; // for mouse wheel logic
HDC hdc;
// int i,y;
int iVertPos;
PAINTSTRUCT ps;
// TCHAR szBuffer[10];
TEXTMETRIC tm;
SCROLLINFO si;
switch (wMessage)
{
case WM_CREATE:
hdc=GetDC(hWnd);
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
//cxCaps=(tm.tmPitchAndFamily)*cxChar/2;
cxCaps=(tm.tmPitchAndFamily&1?3:2)*cxChar/2;
cyChar=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hWnd,hdc);
iMaxWidth=40*cxChar+22*cxCaps;
// SetScrollRange(hWnd,SB_VERT,0,numline-1,FALSE);
// SetScrollPos(hWnd,SB_VERT,iVscrollPos,TRUE);
return 0;
/* case WM_SETTINGCHANGE:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&ulScrollLines,0);
if(ulScrollLines)
iDeltaPerLine=WHEEL_DELTA/ulScrollLines;
else
iDeltaPerLine=0;
return 0;*/
case WM_SIZE:
cyClient=HIWORD(lParam);
cxClient=LOWORD(lParam);
SetScrollLength();
/* si.cbSize=sizeof(si);
si.fMask=SIF_RANGE|SIF_PAGE;
si.nMin=0;
si.nMax=numline-1;
si.nPage=cyClient/cyChar;
SetScrollInfo(hWnd,SB_VERT,&si,TRUE);*/
return 0;
case WM_VSCROLL:
si.cbSize=sizeof(si);
si.fMask=SIF_ALL;
GetScrollInfo(hWnd,SB_VERT,&si);
iVertPos=si.nPos;
switch(LOWORD(wParam))
{
case SB_TOP:
si.nPos=si.nMin;
break;
case SB_BOTTOM:
si.nPos=si.nMax;
break;
case SB_LINEUP:
si.nPos-=1;
break;
case SB_LINEDOWN:
si.nPos+=1;
break;
case SB_PAGEUP:
si.nPos-=si.nPage;
break;
case SB_PAGEDOWN:
si.nPos+=si.nPage;
break;
case SB_THUMBTRACK:
si.nPos=si.nTrackPos;
break;
default:
break;
}
si.fMask=SIF_POS;
SetScrollInfo(hWnd,SB_VERT,&si,TRUE);
GetScrollInfo(hWnd,SB_VERT,&si);
if(si.nPos!=iVertPos)
{
// ScrollWindow(hWnd,0,cyChar*(iVertPos-si.nPos),NULL,NULL);
// UpdateWindow(hWnd);
InvalidateRect(hWnd, NULL, TRUE);
}
return 0;
case WM_TIMER:
SendMessage(hWnd,WM_VSCROLL,SB_LINEDOWN,0);
break;
// case WM_LBUTTONDBLCLK:
// SetTimer(hWnd,ID_TIMER,1000,NULL);
// break;
case WM_LBUTTONDOWN:
// KillTimer(hWnd,ID_TIMER);
// break;
// SetForegroundWindow(hWnd);
// //MessageBox(hWnd,"","",MB_OK);
if(ScrollCheck=!ScrollCheck)
SetTimer(hWnd,ID_TIMER,1000,NULL);
else
KillTimer(hWnd,ID_TIMER);
break;
case WM_RBUTTONDOWN:
GetCursorPos(&stPos);
TrackPopupMenu(hRMenu,TPM_LEFTALIGN,stPos.x,stPos.y,NULL,GetParent(hWnd),NULL);
break;
// case WM_RBUTTONDOWN://LBUTTONDBLCLK:
// MessageBox(hWnd,"","",MB_OK);
// KillTimer(hWnd,ID_TIMER);
// break;
case WM_MOUSEMOVE:
SetFocus(hWnd);
// SetCapture(hWnd);
return DefWindowProc(hWnd, wMessage, wParam, lParam);
case WM_MOUSEWHEEL:
// MessageBox(hWnd,"","",MB_OK);
SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&ulScrollLines,0);
if(ulScrollLines)
iDeltaPerLine=WHEEL_DELTA/ulScrollLines;
else
iDeltaPerLine=0;
if (iDeltaPerLine == 0)
break ;
//MessageBox(hWnd,"","",MB_OK);
iAccumDelta += (short) HIWORD (wParam) ; // 120 or -120
while (iAccumDelta >= iDeltaPerLine)
{
SendMessage (hWnd, WM_VSCROLL, SB_LINEUP, 0) ;
iAccumDelta -= iDeltaPerLine ;
}
while (iAccumDelta <= -iDeltaPerLine)
{
SendMessage (hWnd, WM_VSCROLL, SB_LINEDOWN, 0) ;
iAccumDelta += iDeltaPerLine ;
}
return 0;
case WM_ERASEBKGND:
//PrintStr();
return TRUE;
case WM_PAINT:
hdc = BeginPaint (hWnd, &ps);
PrintStr();
// HDC hStrDC=GetDC(hWnd);
// SetBkColor( hStrDC, RGB(0,0,0));
// SetTextColor(hStrDC, RGB(255,255,255));
// ReleaseDC(hWnd,hStrDC);
EndPaint (hWnd, &ps);
return 0;
case WM_KEYDOWN:
switch(wParam)
{
case VK_HOME:
SendMessage(hWnd,WM_VSCROLL,SB_TOP,0);
break;
case VK_END:
SendMessage(hWnd,WM_VSCROLL,SB_BOTTOM,0);
break;
case VK_PRIOR:
SendMessage(hWnd,WM_VSCROLL,SB_PAGEUP,0);
break;
case VK_NEXT:
SendMessage(hWnd,WM_VSCROLL,SB_PAGEDOWN,0);
break;
case VK_UP:
SendMessage(hWnd,WM_VSCROLL,SB_LINEUP,0);
break;
case VK_DOWN:
SendMessage(hWnd,WM_VSCROLL,SB_LINEDOWN,0);
break;
case VK_LEFT:
SendMessage(hWnd,WM_HSCROLL,SB_PAGEUP,0);
break;
case VK_RIGHT:
SendMessage(hWnd,WM_HSCROLL,SB_PAGEDOWN,0);
break;
}
return 0;
case WM_DROPFILES:
char lpszFile[ 80 ];
char szBuff[ 1024 ];
SHFILEINFO sfi;
HDROP hDropInfo;
hDropInfo = ( HDROP )wParam;
WORD cFiles = DragQueryFile( hDropInfo,( UINT )0xFFFFFFFF,( LPTSTR )NULL,( UINT )NULL );
if(cFiles==1)
{
DragQueryFile( hDropInfo,0,lpszFile,sizeof( lpszFile ) );
if( SHGetFileInfo( lpszFile,0,&sfi,sizeof( SHFILEINFO ),SHGFI_DISPLAYNAME | SHGFI_TYPENAME ) )
{
memset( szBuff,0,sizeof( szBuff ) );
wsprintf( szBuff,"Name: %s Type: %s",sfi.szDisplayName,sfi.szTypeName );
AddStr(hTree,lpszFile);
// InvalidateRect(hWnd,NULL,FALSE);
// MessageBox(hWnd,lpszFile,"",MB_OK);
}
}
DragFinish( hDropInfo );
break;
/*
case WM_VSCROLL:
// if((HWND)lParam!=hStr)
// break;
switch(LOWORD(wParam))
{
case SB_LINEUP:
iVscrollPos -= 1;
break;
case SB_LINEDOWN:
iVscrollPos += 1;
break;
case SB_PAGEUP:
iVscrollPos -= cyClient/cyChar;
break;
case SB_PAGEDOWN:
iVscrollPos += cyClient/cyChar;
break;
case SB_THUMBPOSITION:
iVscrollPos = HIWORD(wParam);
break;
default:
return(DefWindowProc(hWnd, wMessage, wParam, lParam));
}
iVscrollPos = max(0, min(iVscrollPos, numline-1));
if(iVscrollPos != GetScrollPos(hWnd, SB_VERT))
{
SetScrollPos(hWnd, SB_VERT, iVscrollPos, TRUE);
InvalidateRect(hWnd, NULL, TRUE);
}
SetScrollPos(hWnd, SB_VERT, iVscrollPos, TRUE);
return 0;
*/
}
return (DefWindowProc(hWnd, wMessage, wParam, lParam));
}
HWND InitStrView( HINSTANCE hInst, HWND hWndParent)
{
RECT stClRect;
UINT cx,cy;
//HIMAGELIST hFace;
HWND hStr;
CHAR szStrName[] = "MyReaderView";
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = (WNDPROC) WndProcStr;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject (WHITE_BRUSH) ;//(HBRUSH)(COLOR_BTNFACE+1);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szStrName;
if (!RegisterClass (&wndclass)) return NULL;
GetClientRect( hWndParent, &stClRect);
cx = stClRect.right - stClRect.left;
cy = stClRect.bottom -stClRect.top;
// WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR|WS_EX_TOOLWINDOW|WS_EX_STATICEDGE
// RegisterWndClass(NULL,TEXT("MyReaderView"));
hStr = CreateWindowEx( WS_EX_ACCEPTFILES|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR|WS_EX_TOOLWINDOW|WS_EX_STATICEDGE,
szStrName, //"STATIC",//
NULL,
WS_CHILD | WS_VISIBLE|WS_OVERLAPPED|WS_VSCROLL,
cx/3,
0,
2*cx/3,
cy,
hWndParent,
(HMENU)IDD_STR,
hInst,
NULL);
/* RECT rc;
GetClientRect(hStr,&rc);
HDC hStrDC=GetDC(hStr);
SetTextColor(hStrDC, RGB(255,255,255));
SetBkColor( hStrDC, RGB(0,0,0));
//hStrDC.FillSolidRect(rc,RGB(255,255,255));
TextOut(hStrDC,0,0,TEXT("ok"),2);
ReleaseDC(hStr,hStrDC);*/
// MessageBox(hWndParent,"","",MB_OK);
return (hStr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -