📄 cabwoman.c
字号:
BYTE abCaption1 [MAX_MESSAGE];
BYTE abCaption2 [MAX_MESSAGE];
DWORD dOffset;
if ((wParam >> 16) == LBN_SELCHANGE)
{
SelectListBoxItem (hWnd,
IDL_CABINETS,
GetListBoxData (hWnd, IDL_FILES));
if (GetListBoxText (hWnd,
IDL_CABINETS,
abCabinet,
MAX_PATH)
&&
GetListBoxText (hWnd,
IDL_FILES,
abEntry,
MAX_PATH)
&&
((dOffset =
GetListBoxData (hWnd, IDL_CABINETS)) != MAXDWORD)
&&
FindCabinetEntry (abCabinet, abEntry, dOffset, &ce))
{
DosDateTimeToFileTime (ce.date, ce.time, &ft);
FileTimeToSystemTime (&ft, &st);
printfDlgItem (hWnd,
IDT_SIZE,
"%lu",
ce.cbFile);
printfDlgItem (hWnd,
IDT_DATE,
"%02lu-%02lu-%04lu",
st.wMonth,
st.wDay,
st.wYear);
printfDlgItem (hWnd,
IDT_TIME,
"%02lu:%02lu:%02lu",
st.wHour,
st.wMinute,
st.wSecond);
printfDlgItem (hWnd,
IDT_ATTRIBUTES,
"%c %c %c %c %c %c",
(ce.attribs & CAB_ATTRIB_ARCHIVE
? 'a'
: '-'),
(ce.attribs & CAB_ATTRIB_DIRECTORY
? 'd'
: '-'),
(ce.attribs & CAB_ATTRIB_VOLUME
? 'v'
: '-'),
(ce.attribs & CAB_ATTRIB_SYSTEM
? 's'
: '-'),
(ce.attribs & CAB_ATTRIB_HIDDEN
? 'h'
: '-'),
(ce.attribs & CAB_ATTRIB_READONLY
? 'r'
: '-'));
}
else
{
ClearDlgItem (hWnd, IDT_SIZE);
ClearDlgItem (hWnd, IDT_DATE);
ClearDlgItem (hWnd, IDT_TIME);
ClearDlgItem (hWnd, IDT_ATTRIBUTES);
}
return (LRESULT) TRUE;
}
if ((wParam >> 16) == LBN_DBLCLK)
{
SelectListBoxItem (hWnd,
IDL_CABINETS,
GetListBoxData (hWnd, IDL_FILES));
if (GetListBoxText (hWnd,
IDL_CABINETS,
abCabinet,
MAX_PATH)
&&
GetListBoxText (hWnd,
IDL_FILES,
abEntry,
MAX_PATH))
{
GetWindowText (hWnd, abCaption1, MAX_MESSAGE);
wsprintf (abCaption2,
"%s - %s \"%s\"",
abCaption1,
abExtracting,
abEntry);
SetWindowText (hWnd, abCaption2);
ExtractFileFromCabinet (hWnd,
abCabinet,
abEntry,
GetFileName (abIniFile),
abSectionDefaults,
abKeyDestination);
SetWindowText (hWnd, abCaption1);
}
return (LRESULT) TRUE;
}
return (LRESULT) FALSE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainCmdExtract (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
DoubleClickListBox (hWnd, IDL_FILES);
return (LRESULT) TRUE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainCmdAbout (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
DialogBox (hInst, ABOUT_DIALOG, hWnd, AboutDlgProc);
return (LRESULT) TRUE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainCmdExit (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
EndDialog (hWnd, (WORD) wParam);
return (LRESULT) TRUE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainCmdOk (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
HWND hFocus;
DWORD i;
int aiDlgItem [] = {IDL_VOLUMES,
IDL_DIRECTORIES,
IDL_CABINETS,
IDL_FILES,
0};
hFocus = GetFocus ();
if (hFocus != NULL)
{
i = 0;
while (aiDlgItem [i++])
{
if (hFocus == GetDlgItem (hWnd, aiDlgItem [i-1]))
{
DoubleClickListBox (hWnd, aiDlgItem [i-1]);
break;
}
}
}
return (LRESULT) TRUE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainCmdCancel (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
PostMessage (hWnd,
WM_NEXTDLGCTL,
(WPARAM) TRUE,
(LPARAM) FALSE);
return (LRESULT) TRUE;
}
// -----------------------------------------------------------------
DISPATCH MainCmd [] = {IDL_VOLUMES, MainCmdVolumes,
IDL_DIRECTORIES, MainCmdDirectories,
IDL_CABINETS, MainCmdCabinets,
IDL_FILES, MainCmdFiles,
IDB_EXTRACT, MainCmdExtract,
IDB_ABOUT, MainCmdAbout,
IDB_EXIT, MainCmdExit,
IDOK, MainCmdOk,
IDCANCEL, MainCmdCancel,
DEFAULT_RESULT, FALSE};
LRESULT CALLBACK MainDlgCommand (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
return Dispatcher (MainCmd, (WORD) wParam,
hWnd, uMsg, wParam, lParam);
}
// -----------------------------------------------------------------
DISPATCH MainDlg [] = {WM_INITDIALOG, MainDlgInitDialog,
WM_PAINT, MainDlgPaint,
WM_CTLCOLOREDIT, MainDlgCtlColorEdit,
WM_CTLCOLORLISTBOX, MainDlgCtlColorListBox,
WM_CLOSE, MainDlgClose,
WM_COMMAND, MainDlgCommand,
DEFAULT_RESULT, FALSE};
LRESULT CALLBACK MainDlgProc (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
return Dispatcher (MainDlg, uMsg,
hWnd, uMsg, wParam, lParam);
}
// =================================================================
// MAIN WINDOW
// =================================================================
LRESULT CALLBACK MainWndInit (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
DialogBox (hInst, MAIN_DIALOG, hWnd, MainDlgProc);
PostMessage (hWnd, WM_CLOSE, (WPARAM) NULL, (LPARAM) NULL);
return (LRESULT) NULL;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainWndQueryOpen (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
DialogBox (hInst, ABOUT_DIALOG, hWnd, AboutDlgProc);
return (LRESULT) FALSE;
}
// -----------------------------------------------------------------
LRESULT CALLBACK MainWndDestroy (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
WNDCLASS WndClass;
GetClassInfo (hInst, abMainClass, &WndClass);
if (WndClass.hbrBackground != NULL)
{
DeleteObject (WndClass.hbrBackground);
}
PostQuitMessage (0);
return (LRESULT) NULL;
}
// -----------------------------------------------------------------
DISPATCH MainWnd [] = {WMU_INIT, MainWndInit,
WM_QUERYOPEN, MainWndQueryOpen,
WM_DESTROY, MainWndDestroy,
DEFAULT_HANDLER, DefWindowProc};
LRESULT CALLBACK MainWndProc (HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
return Dispatcher (MainWnd, uMsg,
hWnd, uMsg, wParam, lParam);
}
// =================================================================
// MAIN PROGRAM
// =================================================================
HWND WINAPI CreateMainWindow (HINSTANCE hInstance,
PWNDCLASS pWndClass)
{
HWND hWndMain;
pWndClass->style = CS_HREDRAW | CS_VREDRAW;
pWndClass->lpfnWndProc = MainWndProc;
pWndClass->cbClsExtra = 0;
pWndClass->cbWndExtra = 0;
pWndClass->hInstance = hInstance;
pWndClass->hIcon = LoadIcon (hInstance, abMainIcon);
pWndClass->hCursor = LoadCursor (NULL, IDC_ARROW);
pWndClass->lpszMenuName = NULL;
pWndClass->lpszClassName = abMainClass;
pWndClass->hbrBackground = CreateSolidBrush
(GetSysColor (COLOR_WINDOW));
hWndMain = (RegisterClass (pWndClass)
? CreateWindow (abMainClass,
abMainCaption,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL)
: NULL);
return hWndMain;
}
// -----------------------------------------------------------------
BOOL WINAPI Initialize (HINSTANCE hInstance,
int iCmdShow,
PWNDCLASS pWndClass)
{
OSVERSIONINFO ovi;
BOOL fOK = FALSE;
hInst = hInstance;
ovi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
if (GetVersionEx (&ovi) &&
(ovi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
(ovi.dwMajorVersion < 4))
{
if (LoadSystemDll (&hCtl3d32, "CTL3D32.dll",
3,
&Ctl3dRegister, "Ctl3dRegister",
&Ctl3dAutoSubclass, "Ctl3dAutoSubclass",
&Ctl3dUnregister, "Ctl3dUnregister"))
{
Ctl3dRegister (hInstance);
Ctl3dAutoSubclass (hInstance);
}
else
{
UnloadSystemDll (&hCtl3d32);
}
}
if (GetModuleFileName (hInstance, abExeFile, MAX_PATH) &&
GetFile (abExeFile, ".ini", abIniFile, MAX_PATH))
{
hWndMain = CreateMainWindow (hInstance, pWndClass);
if (hWndMain != NULL)
{
ShowWindow (hWndMain, iCmdShow);
UpdateWindow (hWndMain);
fOK = TRUE;
}
}
return fOK;
}
// -----------------------------------------------------------------
BOOL WINAPI CleanUp (HINSTANCE hInstance)
{
BOOL fOK = TRUE;
if (hCtl3d32 != NULL)
{
Ctl3dUnregister (hInstance);
UnloadSystemDll (&hCtl3d32);
}
return fOK;
}
// -----------------------------------------------------------------
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR psCmdLine,
int iShowCmd)
{
WNDCLASS WndClass;
MSG Msg;
Msg.wParam = 0;
if ((Initialize (hInstance, SW_SHOWMINIMIZED, &WndClass)) &&
(PostMessage (hWndMain,
WMU_INIT,
(WPARAM) GetEnvironmentStrings(),
(LPARAM) psCmdLine)))
{
while (GetMessage (&Msg, NULL, 0, 0))
{
TranslateMessage (&Msg);
DispatchMessage (&Msg);
}
}
CleanUp (hInstance);
return Msg.wParam;
}
// =================================================================
// END OF PROGRAM
// =================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -