Wizard / Property Sheets на VB реально сделать?
Формулировка задачи:
Ну то что через API это понятно.
How to Create Wizards
About Property Sheets
При первичном чтении меня смущают фразы про Dialog Box Templates.
В VB6 обычно формы/диалоги в ресурсы не запихиваются.
Хотя подобный ресурс полагаю легко сварганить в VC++ 6.0 и засунуть в res файл.
В любом случае опыта здесь нет.
Направьте мысли.
М.б. примеры какие?
How to Create Wizards
About Property Sheets
При первичном чтении меня смущают фразы про Dialog Box Templates.
В VB6 обычно формы/диалоги в ресурсы не запихиваются.
Хотя подобный ресурс полагаю легко сварганить в VC++ 6.0 и засунуть в res файл.
В любом случае опыта здесь нет.
Направьте мысли.
М.б. примеры какие?
Решение задачи: «Wizard / Property Sheets на VB реально сделать?»
textual
Листинг программы
Public Const PSH_USECALLBACK = &H100 'Calls the function specified by the pfnCallback member 'Dialog Box Structures Public Type DLGTEMPLATE style As Long dwExtendedStyle As Long cdit As Integer x As Integer y As Integer cx As Integer cy As Integer End Type Public Type DLGTEMPLATEEX dlgVer As Integer signature As Integer ' If signature is 0xFFFF, this is an extended dialog box template helpID As Long exStyle As Long style As Long cDlgItems As Integer x As Integer y As Integer cx As Integer cy As Integer '...ХЗ End Type 'PropSheetProc callback function 'uMsg -Message being received. Public Const PSCB_INITIALIZED = 1 Public Const PSCB_PRECREATE = 2 'not applicable if Aero wizard ... Dim psh As PROPSHEETHEADER With psh ... If sys_WinVista Then .dwFlags = PSH_WIZARD Or PSH_AEROWIZARD Or PSH_USEICONID Or PSH_USECALLBACK ... Else .dwFlags = PSH_WIZARD97 Or PSH_HEADER Or PSH_WATERMARK Or PSH_USECALLBACK ... End If .pfnCallback = FARPROC(AddressOf PropSheetProc) ... End With PropertySheet psh End Sub Private Function PropSheetProc(ByVal hwndDlg As Long, ByVal uMsg As Long, _ ByVal lParam As Long) As Long Dim IntSignature As Integer 'pDlgTemplateEx->signature Dim pDlgTemplate As DLGTEMPLATE Dim dwStyle As Long Debug.Print uMsg Select Case uMsg Case PSCB_PRECREATE 'способ #1:это не работает на PSH_AEROWIZARD!!! 'Debug.Print "PSCB_PRECREATE" Call CopyMemory(IntSignature, ByVal (lParam + 2), 2) Debug.Print IntSignature If IntSignature <> &HFFFF Then 'if (pDlgTemplateEx->signature != 0xFFFF) Call CopyMemory(pDlgTemplate, ByVal lParam, Len(pDlgTemplate)) pDlgTemplate.style = pDlgTemplate.style And Not WS_SYSMENU Call CopyMemory(ByVal lParam, pDlgTemplate, Len(pDlgTemplate)) 'Call CopyMemory(dwStyle, ByVal lParam, 4) 'pDlgTemplate->style 'dwStyle = dwStyle And Not WS_SYSMENU 'Call CopyMemory(ByVal lParam, dwStyle, 4) Else 'хотя это вряд ли понадобится Call CopyMemory(dwStyle, ByVal (lParam + 12), 4) 'pDlgTemplateEx->style dwStyle = dwStyle And Not WS_SYSMENU Call CopyMemory(ByVal (lParam + 12), dwStyle, 4) End If Case PSCB_INITIALIZED 'способ #2:а вот это работает и на PSH_AEROWIZARD, и на PSH_WIZARD97 'Debug.Print "PSCB_INITIALIZED" If sys_WinVista Then 'ну не дважды же его устанавливать (для PSH_WIZARD97) Call SetWindowLong(hwndDlg, GWL_STYLE, GetWindowLong(hwndDlg, GWL_STYLE) And Not WS_SYSMENU) End If Case Else End Select End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д