149 lines
3.7 KiB
C++
149 lines
3.7 KiB
C++
|
// MainWnd.cpp: implementation of the CMainWnd class.
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "pch.h"
|
||
|
#include "resource.h"
|
||
|
#include "Page1.h"
|
||
|
#include "MainWnd.h"
|
||
|
#include "pagefact.h"
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
// CMainWnd
|
||
|
//////////////////////////////////////////////////////////////////////
|
||
|
CMainWnd::CMainWnd(void)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
CMainWnd::~CMainWnd(void)
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void CMainWnd::OnFinalMessage(HWND /*hwnd*/)
|
||
|
{
|
||
|
CloseTaskSheet();
|
||
|
PostQuitMessage(0);
|
||
|
}
|
||
|
|
||
|
LRESULT CMainWnd::OnInitMenuPopup(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
|
||
|
{
|
||
|
const UINT uEnable = MF_BYCOMMAND | MF_ENABLED;
|
||
|
const UINT uDisable = MF_BYCOMMAND | MF_DISABLED | MF_GRAYED;
|
||
|
|
||
|
if (0 == LOWORD(lParam))
|
||
|
{
|
||
|
HMENU hMenu = (HMENU)wParam;
|
||
|
BOOL bSheetOpen = m_spTaskSheet ? TRUE : FALSE;
|
||
|
EnableMenuItem(hMenu, ID_TEST_DOMODAL, bSheetOpen ? uDisable : uEnable);
|
||
|
EnableMenuItem(hMenu, ID_TEST_DOMODELESS, bSheetOpen ? uDisable : uEnable);
|
||
|
EnableMenuItem(hMenu, ID_TEST_CLOSEMODELESS, bSheetOpen ? uEnable : uDisable);
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CMainWnd::OnDoModal(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||
|
{
|
||
|
CreateTaskSheet(FALSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CMainWnd::OnDoModeless(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||
|
{
|
||
|
CreateTaskSheet(TRUE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CMainWnd::OnCloseModeless(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||
|
{
|
||
|
CloseTaskSheet();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
LRESULT CMainWnd::OnExit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
|
||
|
{
|
||
|
SendMessage(WM_CLOSE);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
HRESULT CMainWnd::CreateTaskSheet(BOOL bModeless)
|
||
|
{
|
||
|
HRESULT hr;
|
||
|
|
||
|
// For sanity
|
||
|
CloseTaskSheet();
|
||
|
|
||
|
hr = m_spTaskSheet.CoCreateInstance(__uuidof(TaskSheet));
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
CComPtr<IPropertyBag> spProps = NULL;
|
||
|
|
||
|
hr = m_spTaskSheet->GetPropertyBag(IID_IPropertyBag, (void**)&spProps);
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
CComVariant var(L"Task Sheet Test");
|
||
|
spProps->Write(TS_PROP_TITLE, &var);
|
||
|
|
||
|
var = 600;
|
||
|
spProps->Write(TS_PROP_WIDTH, &var);
|
||
|
|
||
|
var = 400;
|
||
|
spProps->Write(TS_PROP_HEIGHT, &var);
|
||
|
|
||
|
var = 400;
|
||
|
spProps->Write(TS_PROP_MINWIDTH, &var);
|
||
|
|
||
|
var = 250;
|
||
|
spProps->Write(TS_PROP_MINHEIGHT, &var);
|
||
|
|
||
|
WCHAR szTemp[MAX_PATH];
|
||
|
wnsprintfW(szTemp, ARRAYSIZE(szTemp), L"res://taskapp.exe/%d/%d", RT_BITMAP, IDB_WATERMARK);
|
||
|
var = szTemp;
|
||
|
//var = L"file://c:\\windows\\ua_bkgnd.bmp";
|
||
|
spProps->Write(TS_PROP_WATERMARK, &var);
|
||
|
|
||
|
// Note: Make modeless be resizable and modal not-resizable,
|
||
|
// just to exercise both resizable and not.
|
||
|
// Ditto for showing the statusbar.
|
||
|
var = bModeless;
|
||
|
spProps->Write(TS_PROP_MODELESS, &var);
|
||
|
spProps->Write(TS_PROP_RESIZABLE, &var);
|
||
|
spProps->Write(TS_PROP_STATUSBAR, &var);
|
||
|
|
||
|
ITaskPageFactory *pPageFactory = NULL;
|
||
|
hr = CPageFactory::CreateInstance(&pPageFactory);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = m_spTaskSheet->Run(pPageFactory, CLSID_CPage1, m_hWnd);
|
||
|
pPageFactory->Release();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!bModeless)
|
||
|
m_spTaskSheet.Release();
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
HRESULT CMainWnd::CloseTaskSheet()
|
||
|
{
|
||
|
HRESULT hr = E_UNEXPECTED;
|
||
|
|
||
|
if (m_spTaskSheet)
|
||
|
{
|
||
|
hr = m_spTaskSheet->Close();
|
||
|
m_spTaskSheet.Release();
|
||
|
}
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|