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 + -
显示快捷键?