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
|
/*
These are the IDs of the standard Property Sheet buttons.
They are disabled and hidden since AOKTS uses essentially
a hack of a Property Sheet. (The menu covers these
functions, instead.)
*/
const WORD PropSheetButtons[] =
{ IDOK, IDCANCEL, IDHELP };
/* Each editor's property page proc (in order of Dialog ID). */
DLGPROC procs[NUM_PAGES] =
{
&IMsgsDlgProc,
&PlyDlgProc,
&VictDlgProc,
&DisDlgProc,
&MapDlgProc,
&UnitDlgProc,
&TrigDlgProc
};
....
int CALLBACK PropSheetProc(HWND sheet, UINT msgid, LPARAM lParam)
{
switch (msgid)
{
case PSCB_PRECREATE:
{
DLGTEMPLATE *templ = (DLGTEMPLATE*)lParam;
templ->cy += 5;
//add a minimize box
templ->style |= WS_MINIMIZEBOX;
}
break;
case PSCB_INITIALIZED:
{
HWND tooltip;
HICON icon;
/* Add Menu. */
propdata.menu = LoadMenu(aokts, (LPCSTR)IDM_MAIN);
SetMenu(sheet, propdata.menu);
SetSaveState(sheet, MF_GRAYED);
/* Enable appropriate recent file items. */
UpdateRecentMenu(propdata.menu);
/* Remove unused buttons. */
for (int i = 0; i < sizeof(PropSheetButtons) / sizeof(WORD); i++)
{
HWND hWnd = GetDlgItem(sheet, PropSheetButtons[i]);
if (hWnd != NULL)
{
ShowWindow(hWnd, SW_HIDE);
EnableWindow(hWnd, FALSE);
}
}
/* Add a tooltip window */
tooltip = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, "AOKTS Tooltip", WS_POPUP,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
sheet, NULL, aokts, NULL);
TooltipInit(tooltip);
/* Set the big icon */
icon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_LOGO));
Window_SetIcon(sheet, ICON_BIG, icon);
}
break;
}
return 0;
}
....
HWND MakeSheet(HINSTANCE app)
{
PROPSHEETHEADER header;
HPROPSHEETPAGE pages[NUM_PAGES];
PROPSHEETPAGE pg; //used to create each page
HWND sheet;
//create pages
pg.dwSize = sizeof(PROPSHEETPAGE);
pg.dwFlags = PSP_DEFAULT;
pg.hInstance = app;
for (int i = 0; i < NUM_PAGES; i++)
{
pg.pszTemplate = MAKEINTRESOURCE(IDD_MSGS + i); //template IDs are in display order
pg.pfnDlgProc = procs[i];
pg.lParam = 0;
pages[i] = CreatePropertySheetPage(&pg);
}
//create sheet
header.dwSize = sizeof(header);
header.dwFlags = PSH_MODELESS | PSH_USECALLBACK |
PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP | PSH_USEICONID;
header.hwndParent = NULL;
header.hInstance = app;
header.pszIcon = MAKEINTRESOURCE(IDI_LOGO);
header.pszCaption = szTitle;
header.nPages = NUM_PAGES;
header.nStartPage = 0;
header.phpage = pages;
header.pfnCallback = &PropSheetProc;
sheet = (HWND)PropertySheet(&header);
//add status bar here (can't be done in PropertySheetProc)
propdata.statusbar = CreateWindow(STATUSCLASSNAME, welcome,
WS_CHILD | WS_VISIBLE, 0, 0, 0, 0,
sheet, (HMENU)IDS_MAIN, aokts, NULL);
return sheet;
}
|