dlgabout.c
来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 294 行
C
294 行
// Description:
// By Sarah Dean
// Email: sdean12@sdean12.org
// WWW: http://www.FreeOTFE.org/
//
// -----------------------------------------------------------------------------
//
#include "main.h"
#include "dlgAbout.h"
#include "FreeOTFEDebug.h"
#include "FreeOTFEGUIlib.h"
#include "DriverInterface.h"
#include "resource.h"
#include "SDUGeneral.h"
#include <stdio.h> // Required for _snwprintf_s
#include <winuser.h> // Required for IDOK, etc
#include <WindowsX.h> // Required for WM_CTLCOLOR
#include <aygshell.h> // Required for SH... functions/definitions/etc
#pragma comment(lib, "aygshell") // Link in aygshell.lib
// Local to this file...
HWND G_dlgAbout_MenuBar = NULL;
HBRUSH G_URLBrush = NULL;
// =========================================================================
// Forward declarations...
BOOL CALLBACK dlgAbout_Proc(
HWND hDlg,
WORD message,
WPARAM wParam,
LPARAM lParam
);
// =========================================================================
void DisplayDlgAbout(HWND hWnd)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("DisplayDlgAbout\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Displaying \"About...\" dialog\n")));
DialogBox(
G_hInstance,
MAKEINTRESOURCE(IDD_ABOUT),
hWnd,
(DLGPROC)dlgAbout_Proc
);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("DisplayDlgAbout\n")));
}
// =========================================================================
BOOL CALLBACK dlgAbout_HandleMsg_WM_INITDIALOG(HWND hDlg)
{
LPWSTR strVersion;
SHINITDLGINFO shidi;
DWORD driverVersion;
WCHAR driverVersionStr[256]; // 256 pretty arbitary; just needs to be big
// enough to store the formatted version
// string
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgAbout_HandleMsg_WM_INITDIALOG\n")));
shidi.dwMask = SHIDIM_FLAGS;
shidi.dwFlags = (
SHIDIF_DONEBUTTON |
SHIDIF_SIPDOWN |
SHIDIF_SIZEDLGFULLSCREEN
);
shidi.hDlg = hDlg;
SHInitDialog(&shidi);
G_dlgAbout_MenuBar = SetupMenu(hDlg, IDR_MENU_NULL);
G_URLBrush = CreateSolidBrush(RGB(255, 0, 255));
// App title...
SDUTextSetBold(hDlg, IDC_APP_TITLE, TRUE);
SetStaticText(hDlg, IDC_APP_TITLE, APP_TITLE);
// Meeeee!
SetStaticText(hDlg, IDC_APP_AUTHORCREDIT, APP_AUTHOR_CREDIT);
// App version...
if (SDUGetVersionInfoShortFmtAlloc(
NULL,
&strVersion
))
{
SetStaticText(hDlg, IDC_APP_VERSION, strVersion);
free(strVersion);
}
if (APP_BETA_FLAG)
{
AppendStaticText_ResizeToText(hDlg, IDC_APP_VERSION, TEXT(" BETA"));
}
// Driver version...
SetStaticText(
hDlg,
IDC_DRIVER_VERSION,
TEXT("Unable to determine driver version")
);
if (driver_VersionID(&driverVersion))
{
if (_snwprintf(
driverVersionStr,
//(sizeof(driverVersionStr) * sizeof(driverVersionStr[0])),
(sizeof(driverVersionStr) / sizeof(driverVersionStr[0])),
TEXT("v%d.%0.2d.%0.4d"),
(driverVersion & 0xFF000000) / 0x00FF0000,
(driverVersion & 0x00FF0000) / 0x0000FF00,
(driverVersion & 0x0000FFFF)
) >= 0)
{
SetStaticText(hDlg, IDC_DRIVER_VERSION, driverVersionStr);
}
}
// Tappable URL...
SetStaticText(hDlg, IDC_STATIC_URL, APP_URL);
SDUTextSetUnderline(hDlg, IDC_STATIC_URL, TRUE);
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgAbout_HandleMsg_WM_INITDIALOG\n")));
return TRUE;
}
// =========================================================================
BOOL CALLBACK dlgAbout_HandleMsg_WM_CLOSE(HWND hWnd)
{
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgAbout_HandleMsg_WM_CLOSE\n")));
if (G_dlgAbout_MenuBar != NULL)
{
DestroyWindow(G_dlgAbout_MenuBar);
G_dlgAbout_MenuBar = NULL;
}
if (G_URLBrush != NULL)
{
DeleteObject(G_URLBrush);
G_URLBrush = NULL;
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgAbout_HandleMsg_WM_CLOSE\n")));
return TRUE;
}
// =========================================================================
HBRUSH _dlgAbout_HandleMsg_WM_CTLCOLORSTATIC(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
// Put URL in blue
if ((HWND)lParam == GetDlgItem(hDlg, IDC_STATIC_URL))
{
SetTextColor((HDC)wParam, COLOR_URL);
}
return (GetStockObject(WHITE_BRUSH));
}
// =========================================================================
BOOL CALLBACK dlgAbout_HandleMsg_WM_COMMAND(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
BOOL retval = FALSE;
DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgAbout_HandleMsg_WM_COMMAND\n")));
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: %d\n"), LOWORD(wParam)));
switch(LOWORD(wParam))
{
case IDC_STATIC_URL:
{
SHELLEXECUTEINFO seInfo;
// Launch WWW browser
// We use ShellExecuteEx, rather than by using the executable's
// filename and CreateProcess(...)
seInfo.cbSize = sizeof(seInfo);
seInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
seInfo.hwnd = NULL;
seInfo.lpVerb = TEXT("open");
seInfo.lpFile = APP_URL;
seInfo.lpParameters = NULL;
seInfo.lpDirectory = NULL;
seInfo.nShow = SW_SHOWNORMAL;
seInfo.hInstApp = G_hInstance;
// Optional fields
seInfo.lpIDList = 0;
seInfo.lpClass = 0;
seInfo.hkeyClass = NULL;
seInfo.dwHotKey = 0;
seInfo.hIcon = NULL;
seInfo.hProcess = NULL;
ShellExecuteEx(&seInfo);
/*
This will also do the same thing, but ties it to a specific
executable:
CreateProcess(
EXE_MSIE,
APP_URL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
NULL,
NULL
);
*/
retval = TRUE;
break;
}
case IDOK:
{
EndDialog(hDlg, TRUE);
retval = TRUE;
break;
}
}
DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgAbout_HandleMsg_WM_COMMAND\n")));
return retval;
}
// =========================================================================
BOOL CALLBACK dlgAbout_Proc(
HWND hDlg,
WORD msg,
WPARAM wParam,
LPARAM lParam
)
{
BOOL retval = FALSE;
switch(msg)
{
case WM_INITDIALOG:
{
retval = dlgAbout_HandleMsg_WM_INITDIALOG(hDlg);
break;
}
case WM_CLOSE:
{
DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_CLOSE\n")));
retval = dlgAbout_HandleMsg_WM_CLOSE(hDlg);
break;
}
case WM_COMMAND:
{
retval = dlgAbout_HandleMsg_WM_COMMAND(hDlg, wParam, lParam);
break;
}
//case WM_CTLCOLOR:
case WM_CTLCOLORSTATIC:
//case WM_CTLCOLOREDIT:
//case WM_CTLCOLORLISTBOX:
//case WM_CTLCOLORBTN:
//case WM_CTLCOLORDLG:
//case WM_CTLCOLORSCROLLBAR:
//case WM_CTLCOLORMSGBOX:
{
retval = (BOOL)_dlgAbout_HandleMsg_WM_CTLCOLORSTATIC(hDlg, wParam, lParam);
break;
}
}
return retval;
}
// =========================================================================
// =========================================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?