📄 winhead.c
字号:
#include <windows.h>
#define ID_LIST 1
#define ID_TEXT 2
#define DIRATTR (DDL_READWRITE|DDL_READONLY|DDL_DRIVES|DDL_DIRECTORY|DDL_ARCHIVE|DDL_HIDDEN)
#define MAXREAD 8192
#define DTFLAGS (DT_WORDBREAK|DT_EXPANDTABS|DT_NOCLIP|DT_NOPREFIX)
LRESULT CALLBACK WndProc(HWND ,UINT ,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdline,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("WinHead");
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)(COLOR_BTNFACE+1);
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program must run in Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(
szAppName,
szAppName,
WS_OVERLAPPEDWINDOW,
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 BOOL bValidFile;
HDC hdc;
static HWND hwndList,hwndText;
static int cxChar,cyChar;
static int cxClient,cyClient;
int i;
static TCHAR *pVarName,*pVarValue,buffer[MAXREAD];
TCHAR szBuffer[MAX_PATH+1];
static TCHAR szFile[MAX_PATH+1];
static RECT rect;
PAINTSTRUCT ps;
HANDLE hFile;
switch (message)
{
case WM_CREATE:
cxChar=LOWORD(GetDialogBaseUnits());
cyChar=HIWORD(GetDialogBaseUnits());
rect.left=20*cxChar;
rect.top=3*cyChar;
hwndList=CreateWindow(
TEXT("listbox"),
NULL,
WS_CHILD|WS_VISIBLE|LBS_STANDARD,
cxChar,
cyChar*3,
cxChar*13,
cyChar*10,
hwnd,
(HMENU)ID_LIST,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
GetCurrentDirectory( MAX_PATH+1,szBuffer);
hwndText=CreateWindow(
TEXT("static"),
szBuffer,
WS_CHILD|WS_VISIBLE|SS_LEFT,
cxChar,cyChar,cxChar*MAX_PATH,cyChar,
hwnd,
(HMENU)ID_TEXT,
(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE),
NULL);
SendMessage(hwndList,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
return 0;
case WM_SIZE:
rect.right =LOWORD(lParam);
rect.bottom =HIWORD(lParam);
return 0;
case WM_COMMAND:
if(LOWORD(wParam)==ID_LIST&&HIWORD(wParam)==LBN_SELCHANGE)
{
if(LB_ERR==(i=SendMessage(hwndList,LB_GETCURSEL,0,0)))
break;
SendMessage(hwndList,LB_GETTEXT,i,(LPARAM)szBuffer);
if(INVALID_HANDLE_VALUE!=(hFile=CreateFile(szBuffer,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
CloseHandle(hFile);
bValidFile=1;
lstrcpy(szFile,szBuffer);
GetCurrentDirectory(MAX_PATH+1,szBuffer);
if(szBuffer[lstrlen(szBuffer)-1]!='\\')
lstrcat(szBuffer,TEXT("\\"));
SetWindowText(hwndText,lstrcat(szBuffer,szFile));
}
else
{
bValidFile=0;
szBuffer[lstrlen(szBuffer)-1]='\0';
if(!SetCurrentDirectory(szBuffer+1))
{
szBuffer[3]=':';
szBuffer[4]='\0';
SetCurrentDirectory(szBuffer+2);
}
GetCurrentDirectory(MAX_PATH,szBuffer);
SetWindowText(hwndText,szBuffer);
SendMessage(hwndList,LB_RESETCONTENT,0,0);
SendMessage(hwndList,LB_DIR,DIRATTR,(LPARAM)TEXT("*.*"));
}
InvalidateRect(hwnd,NULL,TRUE);
}
return 0;
case WM_PAINT:
if(!bValidFile)
break;
if(INVALID_HANDLE_VALUE==(hFile=CreateFile
(szFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL)))
{
bValidFile=FALSE;
break;
}
ReadFile(hFile,buffer,MAXREAD,&i,NULL);
CloseHandle(hFile);
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,GetStockObject(SYSTEM_FIXED_FONT));
SetTextColor(hdc,GetSysColor(COLOR_BTNTEXT));
SetBkColor(hdc,GetSysColor(COLOR_BTNFACE));
DrawTextA(hdc,buffer,i,&rect,DTFLAGS);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -