Anyone have an example I can go off of?
Code:
// Resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by PROPERTY.RC
//
#define IDR_MAIN_MENU 101
#define IDD_BUTTONS 102
#define IDD_COMBOBOXES 103
#define IDC_BUTTON2 1001
#define IDC_RADIO1 1002
#define IDC_RADIO2 1003
#define IDC_RADIO3 1004
#define IDC_CHECK1 1005
#define IDC_CHECK2 1006
#define IDC_CHECK3 1007
#define IDC_COMBO1 1008
#define IDC_COMBO2 1009
#define IDC_COMBO3 1010
#define IDM_EXIT 2001
#define IDM_PROPERTYSHEET 2002
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 107
#define _APS_NEXT_COMMAND_VALUE 2006
#define _APS_NEXT_CONTROL_VALUE 1015
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Code:
#pragma comment( lib, "user32.lib" )
#pragma comment( lib, "comctl32.lib" )
#include <windows.h>
#include "resource.h"
BOOL InitApplication(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
int CreatePropertySheet(HWND);
LRESULT CALLBACK ButtonsDlgProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ComboDlgProc(HWND, UINT, WPARAM, LPARAM);
void CALLBACK PropSheetCallback(HWND, UINT, LPARAM);
HINSTANCE g_hInst;
HWND g_hwndPropSheet,g_hwndMain;
TCHAR g_szClassName[] = TEXT("PropSheetClass");
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
g_hInst = hInstance;
if(!hPrevInstance)
if(!InitApplication(hInstance))
return FALSE;
if (!InitInstance(hInstance, nCmdShow))
return FALSE;
while(GetMessage(&msg, NULL, 0x00, 0x00))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
ZeroMemory(&wcex, sizeof(wcex));
wcex.cbSize = sizeof(wcex);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)MainWndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDR_MAIN_MENU);
wcex.lpszClassName = g_szClassName;
return RegisterClassEx(&wcex);
}
BOOL InitInstance( HINSTANCE hInstance,
int nCmdShow)
{
g_hwndMain = CreateWindowEx( 0,
g_szClassName,
TEXT("Property Sheet"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
if (!g_hwndMain)
{
return FALSE;
}
ShowWindow(g_hwndMain, nCmdShow);
UpdateWindow(g_hwndMain);
return TRUE;
}
LRESULT CALLBACK MainWndProc( HWND hWnd,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
switch (uMessage)
{
case WM_CREATE:
break;
case WM_CLOSE:
if(IsWindow(g_hwndPropSheet))
DestroyWindow(g_hwndPropSheet);
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(wParam)
{
case IDM_PROPERTYSHEET:
CreatePropertySheet(hWnd);
break;
case IDM_EXIT:
PostMessage(hWnd, WM_CLOSE, 0, 0);
break;
}
return TRUE;
default:
break;
}
return DefWindowProc(hWnd, uMessage, wParam, lParam);
}
int CreatePropertySheet(HWND hwndOwner)
{
PROPSHEETPAGE psp[2];
PROPSHEETHEADER psh;
psp[0].dwSize = sizeof(PROPSHEETPAGE);
psp[0].dwFlags = PSP_USETITLE;
psp[0].hInstance = g_hInst;
psp[0].pszTemplate = MAKEINTRESOURCE(IDD_BUTTONS);
psp[0].pszIcon = NULL;
psp[0].pfnDlgProc = (DLGPROC)ButtonsDlgProc;
psp[0].pszTitle = TEXT("Buttons");
psp[0].lParam = 0;
psp[1].dwSize = sizeof(PROPSHEETPAGE);
psp[1].dwFlags = PSP_USETITLE;
psp[1].hInstance = g_hInst;
psp[1].pszTemplate = MAKEINTRESOURCE(IDD_COMBOBOXES);
psp[1].pszIcon = NULL;
psp[1].pfnDlgProc = (DLGPROC) ComboDlgProc;
psp[1].pszTitle = TEXT("Combo Boxes");
psp[1].lParam = 0;
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_USECALLBACK;
psh.hwndParent = hwndOwner;
psh.hInstance = g_hInst;
psh.pszCaption = TEXT("My Property Sheet");
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.ppsp = (LPCPROPSHEETPAGE) &psp;
psh.pfnCallback = (PFNPROPSHEETCALLBACK)PropSheetCallback;
return PropertySheet(&psh);
}
LRESULT CALLBACK ButtonsDlgProc( HWND hdlg,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
LPNMHDR lpnmhdr;
switch (uMessage)
{
case WM_COMMAND:
PropSheet_Changed(GetParent(hdlg), hdlg);
break;
case WM_NOTIFY:
lpnmhdr = (NMHDR FAR *)lParam;
switch (lpnmhdr->code)
{
case PSN_APPLY: //sent when OK or Apply button pressed
break;
case PSN_RESET: //sent when Cancel button pressed
break;
case PSN_SETACTIVE:
//this will be ignored if the property sheet is not a wizard
PropSheet_SetWizButtons(GetParent(hdlg), PSWIZB_NEXT);
break;
default:
break;
}
break;
default:
break;
}
return FALSE;
}
LRESULT CALLBACK ComboDlgProc( HWND hdlg,
UINT uMessage,
WPARAM wParam,
LPARAM lParam)
{
LPNMHDR lpnmhdr;
switch (uMessage)
{
case WM_COMMAND:
PropSheet_Changed(GetParent(hdlg), hdlg);
break;
case WM_NOTIFY:
lpnmhdr = (NMHDR FAR *)lParam;
switch (lpnmhdr->code)
{
case PSN_APPLY: //sent when OK or Apply button pressed
break;
case PSN_RESET: //sent when Cancel button pressed
break;
case PSN_SETACTIVE:
//this will be ignored if the property sheet is not a wizard
PropSheet_SetWizButtons(GetParent(hdlg), PSWIZB_BACK | PSWIZB_FINISH);
return FALSE;
default:
break;
}
break;
default:
break;
}
return FALSE;
}
void CALLBACK PropSheetCallback(HWND hwndPropSheet, UINT uMsg, LPARAM lParam)
{
switch(uMsg)
{
//called before the dialog is created, hwndPropSheet = NULL, lParam points to dialog resource
case PSCB_PRECREATE:
{
LPDLGTEMPLATE lpTemplate = (LPDLGTEMPLATE)lParam;
if(!(lpTemplate->style & WS_SYSMENU))
{
lpTemplate->style |= WS_SYSMENU;
}
}
break;
//called after the dialog is created
case PSCB_INITIALIZED:
break;
}
}
Code:
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include <windows.h>
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_BUTTONS DIALOG DISCARDABLE 0, 0, 206, 70
STYLE WS_CHILD | WS_VISIBLE | WS_BORDER
FONT 8, "MS Sans Serif"
BEGIN
GROUPBOX "Pushbuttons",IDC_STATIC,5,5,60,60
PUSHBUTTON "Pushbutton",IDC_BUTTON2,10,20,49,14
GROUPBOX "Radio Buttons",IDC_STATIC,70,5,60,60
CONTROL "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,75,20,50,10
CONTROL "Radio2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,75,36,50,
10
CONTROL "Radio3",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,75,50,50,
10
GROUPBOX "Check Boxes",IDC_STATIC,135,5,60,60
CONTROL "Check1",IDC_CHECK1,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,140,20,50,10
CONTROL "Check2",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,140,36,50,10
CONTROL "Check3",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,140,50,50,10
END
IDD_COMBOBOXES DIALOG DISCARDABLE 0, 0, 230, 94
STYLE WS_CHILD | WS_VISIBLE | WS_BORDER
FONT 8, "MS Sans Serif"
BEGIN
COMBOBOX IDC_COMBO1,10,15,60,70,CBS_SIMPLE | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
GROUPBOX "Simple",IDC_STATIC,5,0,70,90
COMBOBOX IDC_COMBO2,85,15,60,75,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
GROUPBOX "Drop Down",IDC_STATIC,80,0,70,90
COMBOBOX IDC_COMBO3,160,15,60,75,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
GROUPBOX "Drop List",IDC_STATIC,155,0,70,90
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include <winuser.h>\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MAIN_MENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM SEPARATOR
MENUITEM "E&xit", IDM_EXIT
END
POPUP "&Test Property Sheet"
BEGIN
MENUITEM "My Property Sheet", IDM_PROPERTYSHEET
END
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED