Click here to Skip to main content
15,885,546 members
Articles / Desktop Programming / WTL

Create a Convenient Toolbar Assistant Using WTL

Rate me:
Please Sign up or sign in to vote.
4.88/5 (30 votes)
11 Mar 2008GPL33 min read 61K   2.5K   58  
A more easy to generate toolbar images.
// MainDlg.cpp : implementation of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "resource.h"

#include "aboutdlg.h"
#include "MainDlg.h"

#include <atlpath.h>
#include "DlgEffect.h"

BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
{
	return CWindow::IsDialogMessage(pMsg);
}

BOOL CMainDlg::OnIdle()
{
	return FALSE;
}

LRESULT CMainDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	// Init the CDialogResize code
	DlgResize_Init();

	// center the dialog on the screen
	CenterWindow();

	DoDataExchange(FALSE);

	if (NULL == m_hIcoUndo)
	{
		m_hIcoUndo = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_UNDO));
	}

	if (NULL == m_hIcoRedo)
	{
		m_hIcoRedo = LoadIcon(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDI_REDO));
	}

	m_btnBGColor.SubclassWindow(GetDlgItem(IDC_BTNBGCOLOR));
	m_btnBGColor.SetColor(COLBTN_DEFAULTCOL);
	m_btnBGColor.SetDefaultColor(COLBTN_DEFAULTCOL);
	m_btnBGColor.SetDefaultText(_T("Default"));

	m_wndCbInterpolation.Clear();
	m_wndCbInterpolation.SetDroppedWidth(150);
	m_wndCbInterpolation.AddString(_T("Nearest neighbour"));
	m_wndCbInterpolation.AddString(_T("Bilinear (pixel corner)"));
	m_wndCbInterpolation.AddString(_T("Bilinear 2 (pixel center)"));
	m_wndCbInterpolation.AddString(_T("Bicubic (hard)"));
	m_wndCbInterpolation.AddString(_T("Bicubic 2 (soft)"));
	m_wndCbInterpolation.AddString(_T("BSpline (blur)"));
	m_wndCbInterpolation.AddString(_T("Lanzcos (sharp)"));
	m_wndCbInterpolation.AddString(_T("Hermite"));
	m_wndCbInterpolation.SetCurSel(3);

	m_wndListCtrl.SubclassWindow(GetDlgItem(IDC_LIST_MAIN));
	m_wndListCtrl.SetImageList( m_ilItemImages );
	m_wndListCtrl.SetFocusSubItem( TRUE );
	// m_wndListCtrl.SetSingleSelect(TRUE);
	// m_wndListCtrl.SetDragDrop(TRUE);

	// m_wndListCtrl.Initialise();
	m_wndListCtrl.InitColumns();

	// set icons
	HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
		IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
	SetIcon(hIcon, TRUE);
	HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
		IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
	SetIcon(hIconSmall, FALSE);

	// register object for message filtering and idle updates
	CMessageLoop* pLoop = _Module.GetMessageLoop();
	ATLASSERT(pLoop != NULL);
	pLoop->AddMessageFilter(this);
	pLoop->AddIdleHandler(this);

	UIAddChildWindowContainer(m_hWnd);

	return TRUE;
}

CxImage::InterpolationMethod CMainDlg::GetIpMethod()
{
	int nCurSel = m_wndCbInterpolation.GetCurSel();
	switch(nCurSel)
	{
	case 0:
		return CxImage::IM_NEAREST_NEIGHBOUR;
	case 1:
		return CxImage::IM_BILINEAR;
	case 2:
		return CxImage::IM_BILINEAR;
	case 3:
		return CxImage::IM_BICUBIC;
	case 4:
		return CxImage::IM_BICUBIC2;
	case 5:
		return CxImage::IM_BSPLINE;
	case 6:
		return CxImage::IM_LANCZOS;
	case 7:
		return CxImage::IM_HERMITE;
	default:
		return CxImage::IM_BICUBIC;
	}
}

LRESULT CMainDlg::OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
	// unregister message filtering and idle updates
	CMessageLoop* pLoop = _Module.GetMessageLoop();
	ATLASSERT(pLoop != NULL);
	pLoop->RemoveMessageFilter(this);
	pLoop->RemoveIdleHandler(this);

	if (NULL != m_hIcoUndo)
	{
		DestroyIcon(m_hIcoUndo);
		m_hIcoUndo = NULL;
	}

	if (NULL != m_hIcoRedo)
	{
		DestroyIcon(m_hIcoRedo);
		m_hIcoRedo = NULL;
	}

	return 0;
}

LRESULT CMainDlg::OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	CAboutDlg dlg;
	dlg.DoModal();
	return 0;
}

LRESULT CMainDlg::OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	// TODO: Add validation code 
	// CloseDialog(wID);
	UpdateImageList();

	return 0;
}

LRESULT CMainDlg::OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	CloseDialog(wID);
	return 0;
}

void CMainDlg::CloseDialog(int nVal)
{
	DestroyWindow();
	::PostQuitMessage(nVal);
}

BOOL CMainDlg::AddPathToList(LPCTSTR lpszPath)
{
	CPath filePath(lpszPath);
	if (!filePath.FileExists())
		return FALSE;

	// int nNewItem = m_wndListCtrl.AddItem( _T("1"), ITEM_IMAGE_NONE );
	// m_wndListCtrl.SetItemCheck( nNewItem, 0, 1 );
	// m_wndListCtrl.SetItemText( nNewItem, 2, filePath.m_strPath );

	filePath.StripPath();
	filePath.RemoveExtension();
	filePath.m_strPath.MakeUpper();
	filePath.m_strPath = _T("CMD_") + filePath.m_strPath;

	m_wndListCtrl.AddImg(TRUE, filePath.m_strPath, lpszPath);

	// m_wndListCtrl.SetItemText(nNewItem, 1, filePath.m_strPath);

	return TRUE;
}

BOOL CMainDlg::HandleImage(CxImage *pimgIn)
{
	if (NULL == pimgIn)
		return FALSE;

	pimgIn->ShiftRGB(-20, +30, -20);
	return TRUE;
}

#define LST_IMG_CX	24
#define LST_IMG_CY	24

BOOL CMainDlg::UpdateImageList()
{
	CWaitCursor curWait;

	int nItemCount = m_wndListCtrl.GetItemCount();
	if (nItemCount <= 0)
		return FALSE;

	CxImage *pimgIn = NULL;
	CxImage *pimgOut = NULL;
	CStringType strOutName = _T("");
	CStringType strTemp = _T("");
	int nSuccess = 0;
	DWORD dwImgType = CXIMAGE_FORMAT_UNKNOWN;

	TCHAR path_buffer[_MAX_PATH];
	TCHAR drive[_MAX_DRIVE];
	TCHAR dir[_MAX_DIR];
	TCHAR fname[_MAX_FNAME];
	TCHAR ext[_MAX_EXT];

	ATLTRACE(_T("\r\nStart Processing in %d files ..."), nItemCount);
	for (int i=0; i<nItemCount; i++)
	{
		CStringType strPath = m_wndListCtrl.GetItemText(i, 2);
		ATLTRACE(_T("\r\n(%d|%d)Processing %s"), i, nItemCount, strPath);

		dwImgType = GetImageType(strPath);
		pimgIn = new CxImage(strPath, dwImgType);
		if (!pimgIn->IsValid())
		{
			delete pimgIn;
			pimgIn = NULL;

			continue;
		}

		long lNumFrames = pimgIn->GetNumFrames();
		if (lNumFrames > 1)
		{
			for (long j=0; j<lNumFrames; j++)
			{
				CxImage *pimgInTemp = new CxImage();
				pimgInTemp->SetFrame(j);
				pimgInTemp->Load(strPath, dwImgType);
				if (pimgInTemp->IsValid())
				{
					_tcsncpy(path_buffer, strPath, _MAX_PATH);
					_tsplitpath( path_buffer, drive, dir, fname, ext );

					strTemp.Format(_T("%s%s%lu-%lu_%ld-%s.png"),
						drive, dir,
						pimgInTemp->GetWidth(), pimgInTemp->GetHeight(), j,
						fname);

					HandleImage(pimgInTemp);
					if (pimgInTemp->Save(strTemp, CXIMAGE_FORMAT_PNG))
					{
						nSuccess ++;
					}
				}

				delete pimgInTemp;
				pimgInTemp = NULL;
			}
		}
		else
		{
			_tcsncpy(path_buffer, strPath, _MAX_PATH);
			_tsplitpath( path_buffer, drive, dir, fname, ext );

			strTemp.Format(_T("%s%s%lu-%lu-%s.png"),
				drive, dir,
				pimgIn->GetWidth(), pimgIn->GetHeight(),
				fname);

			HandleImage(pimgIn);
			if (pimgIn->Save(strTemp, CXIMAGE_FORMAT_PNG))
			{
				nSuccess ++;
			}
		}

		delete pimgIn;
		pimgIn = NULL;
	}
	ATLTRACE(_T("\r\nComplete Process\r\n"));

	return TRUE;
}

LRESULT CMainDlg::OnBtnaddBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CMultiFileDialog dlgFile(NULL, NULL,
		OFN_ENABLESIZING | OFN_EXPLORER | OFN_ALLOWMULTISELECT | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST,
		_T("Images Support (*.bmp;*.gif;*.jpg;...)\0*.bmp;*.gif;*.jpg;*.jpeg;*.png;*.ico;*.mng;*.jng;*.tiff;*.tif;*.tga;*.pcx;*.wbmp;*.wmf;*.emf;*.j2k;*.jp2;*.jbg;*.jpc;*.j2c;*.pgx;*.ras;*.pnm;*.pgm;*.ppm\0All Files (*.*)\0*.*\0"), m_hWnd);
	if (dlgFile.DoModal() == IDOK)
	{
		TCHAR szFile[MAX_PATH] = _T("\0");
		int nRet = dlgFile.GetFirstPathName(szFile, MAX_PATH);
		while (0 != nRet)
		{
			AddPathToList(szFile);
			nRet = dlgFile.GetNextPathName(szFile, MAX_PATH);
		}

		m_wndListCtrl.AdjustColumnWidth();
	}

	return 0;
}

LRESULT CMainDlg::OnBtndelBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CListArray <int> aSelectedItems;
	m_wndListCtrl.GetSelectedItems(aSelectedItems);
	int nCount = aSelectedItems.GetSize() - 1;
	ATLTRACE(_T("%d items selected."), nCount);

	for (int i=nCount; i>=0; i--)
	{
		ATLTRACE(_T("Del item %d ..."), aSelectedItems[i]);
		m_wndListCtrl.DeleteItem(aSelectedItems[i]);
	}

	return 0;
}

LRESULT CMainDlg::OnBtnfirstBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CListArray <int> aSelectedItems;
	m_wndListCtrl.GetSelectedItems(aSelectedItems);
	int nCount = aSelectedItems.GetSize();
	ATLTRACE(_T("\n\n%d items selected.\n"), nCount);

	if (nCount <= 0)
		return 0;

	int nItemCount = m_wndListCtrl.GetItemCount();
	if (nItemCount <= 1)
		return 0;

	m_wndListCtrl.ResetSelected();

	int nRet = 0;
	CImgListItem *pItem = NULL;
	for (int i=nCount - 1; (i>=0); i--)
	{
		ATLTRACE(_T("Processing at %d / %d\n"), aSelectedItems[i], nItemCount);

		if ((aSelectedItems[i] > 0) && (aSelectedItems[i] < nItemCount))
		{
			pItem = new CImgListItem(m_wndListCtrl.m_aImg[aSelectedItems[i]]);
			if (NULL == pItem)
				return 0;

			if (m_wndListCtrl.m_aImg.InsertAt(0, *pItem))
			{
				m_wndListCtrl.SelectItem(nRet, NULL_SUBITEM, MK_CONTROL);
				nRet += 1;
				m_wndListCtrl.m_aImg.RemoveAt(aSelectedItems[i] + 1);
			}
			delete pItem;
		}
	}

	m_wndListCtrl.Invalidate();

	return 0;
}

LRESULT CMainDlg::OnBtnupBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CListArray <int> aSelectedItems;
	m_wndListCtrl.GetSelectedItems(aSelectedItems);
	int nCount = aSelectedItems.GetSize();
	ATLTRACE(_T("%d items selected."), nCount);

	if (nCount <= 0)
		return 0;

	int nItemCount = m_wndListCtrl.GetItemCount();
	if (nItemCount <= 1)
		return 0;

	m_wndListCtrl.ResetSelected();

	int nRet = 0;
	CImgListItem *pItem = NULL;
	for (int i=0; (i<nCount); i++)
	{
		if (aSelectedItems[i] > nItemCount)
			continue;

		if ((aSelectedItems[i] - 1) >= 0)
		{
			pItem = new CImgListItem(m_wndListCtrl.m_aImg[aSelectedItems[i]]);
			if (NULL == pItem)
				return 0;

			if (m_wndListCtrl.m_aImg.InsertAt(aSelectedItems[i] - 1, *pItem))
			{
				m_wndListCtrl.SelectItem(aSelectedItems[i] - 1, NULL_SUBITEM, MK_CONTROL);
				m_wndListCtrl.m_aImg.RemoveAt(aSelectedItems[i] + 1);
			}
			delete pItem;
		}
		else
		{
			m_wndListCtrl.SelectItem(aSelectedItems[i], NULL_SUBITEM, MK_CONTROL);
		}
	}

	m_wndListCtrl.Invalidate();

	return 0;
}

LRESULT CMainDlg::OnBtndownBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CListArray <int> aSelectedItems;
	m_wndListCtrl.GetSelectedItems(aSelectedItems);
	int nCount = aSelectedItems.GetSize();
	ATLTRACE(_T("%d items selected."), nCount);

	if (nCount <= 0)
		return 0;

	int nItemCount = m_wndListCtrl.GetItemCount();
	if (nItemCount <= 1)
		return 0;

	m_wndListCtrl.ResetSelected();

	int nRet = 0;
	CImgListItem *pItem = NULL;
	for (int i=nCount - 1; i>=0; i--)
	{
		if (aSelectedItems[i] > nItemCount)
			continue;

		if ((aSelectedItems[i] + 2) <= nItemCount)
		{
			pItem = new CImgListItem(m_wndListCtrl.m_aImg[aSelectedItems[i]]);
			if (NULL == pItem)
				return 0;
			if (m_wndListCtrl.m_aImg.InsertAt(aSelectedItems[i] + 2, *pItem))
			{
				m_wndListCtrl.SelectItem(aSelectedItems[i] + 1, NULL_SUBITEM, MK_CONTROL);
				m_wndListCtrl.m_aImg.RemoveAt(aSelectedItems[i]);
			}
			delete pItem;
		}
	}

	m_wndListCtrl.Invalidate();

	return 0;
}

LRESULT CMainDlg::OnBtnbottomBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	CListArray <int> aSelectedItems;
	m_wndListCtrl.GetSelectedItems(aSelectedItems);
	int nCount = aSelectedItems.GetSize();
	ATLTRACE(_T("%d items selected."), nCount);

	if (nCount <= 0)
		return 0;

	int nItemCount = m_wndListCtrl.GetItemCount();
	if (nItemCount <= 1)
		return 0;

	m_wndListCtrl.ResetSelected();

	int nRet = 0;
	CImgListItem *pItem = NULL;
	for (int i=nCount - 1; (i>=0); i--)
	{
		if (aSelectedItems[i] > nItemCount)
			continue;

		if ((aSelectedItems[i] + 1) < nItemCount)
		{
			pItem = new CImgListItem(m_wndListCtrl.m_aImg[aSelectedItems[i]]);
			if (NULL == pItem)
				return 0;
			CImgListItem imgItem(m_wndListCtrl.m_aImg[aSelectedItems[i]]);
			if (m_wndListCtrl.m_aImg.Add(imgItem))
			{
				m_wndListCtrl.SelectItem(nItemCount - 1, NULL_SUBITEM, MK_CONTROL);
				m_wndListCtrl.m_aImg.RemoveAt(aSelectedItems[i]);
			}
			delete pItem;
		}
	}

	m_wndListCtrl.Invalidate();

	return 0;
}

// #define _DEBUG_STEP_

#ifdef _DEBUG_STEP_
int nTestCount = 0;
#endif

int CMainDlg::SaveToFile(LPCTSTR lpszFile, bool bSaveItems)
{
	DoDataExchange(TRUE);

	int nItemCount = m_wndListCtrl.GetItemCount();
	int nUsedCount = m_wndListCtrl.GetUsedCount();
	if ((nItemCount <= 0) || (nUsedCount <= 0))
	{
		MessageBox(_T("No item used to save to file!"), _T("Error"), MB_OK | MB_ICONINFORMATION);

		return 0;
	}

	DWORD dwType = GetImageType(lpszFile);
	if (CXIMAGE_FORMAT_UNKNOWN == dwType)
	{
		MessageBox(_T("Unknown format found!"), _T("Error"), MB_OK | MB_ICONINFORMATION);
		return 0;
	}

	TCHAR path_buffer[_MAX_PATH];
	TCHAR drive[_MAX_DRIVE];
	TCHAR dir[_MAX_DIR];
	TCHAR fname[_MAX_FNAME];
	TCHAR ext[_MAX_EXT];
	_tcsncpy(path_buffer, lpszFile, _MAX_PATH);
	_tsplitpath( path_buffer, drive, dir, fname, ext );

	long lHeight = m_outCy;
	long lWide = m_outCx * nItemCount;
	CxImage imgOutput(m_outCx * nUsedCount, m_outCy, m_dwBpp, dwType);

	COLORREF colBG = m_btnBGColor.GetColor();
	// COLORREF colBG = RGB(225, 222, 212);
	// COLORREF colBG = RGB(255, 0, 255);

	// CxImage imgOutput(dwType);
	// imgOutput.Expand(0, 0, m_outCx * nItemCount, m_outCy, imgOutput.RGBtoRGBQUAD(m_btnBGColor.GetColor()));

	imgOutput.SetTransColor(imgOutput.RGBtoRGBQUAD(colBG));
	for(long lY=0;lY<lHeight;lY++)
	{
		for(long lX=0;lX<lWide;lX++)
		{
			imgOutput.SetPixelColor(lX, lY, colBG);
		}
	}

// 	if (!imgOutput.AlphaIsValid())
// 	{
        imgOutput.AlphaCreate();
// 	}

#ifdef _DEBUG_STEP_
	_sntprintf(path_buffer, _MAX_PATH, _T("%s%s%05d-%s%s"), drive, dir, nTestCount, _T("Debug01"), ext);
	imgOutput.Save(path_buffer, dwType);
#endif

	int nOutput = 0;
	DWORD dwOffsetX = 0;
	CImgListItem *pItem = NULL;
	CxImage::InterpolationMethod ipMethod = GetIpMethod();
	for (int i=0; i<nItemCount; i++)
	{
		if (!m_wndListCtrl.m_aImg[i].m_bUsed)
			continue;

		pItem = new CImgListItem(m_wndListCtrl.m_aImg[i]);
		if (NULL == pItem)
			return 0;

		if (pItem->IsImgValid())
		{
			pItem->m_pImg->Resample2(m_outCx, m_outCy, ipMethod, CxImage::OM_TRANSPARENT);

			if (!pItem->m_pImg->AlphaIsValid())
			{
				pItem->m_pImg->AlphaCreate();
#ifndef CXIMAGE_V599C
                pItem->m_pImg->AlphaFromTransparency();
#endif //	#ifndef CXIMAGE_V599C
			}

			imgOutput.Mix(*(pItem->m_pImg), CxImage::OpDstCopy, dwOffsetX, 0, true);

			if (bSaveItems)
			{
				if (m_bChktransparent)
				{
					pItem->m_pImg->SetTransIndex(0);
				}
				else
				{
					pItem->m_pImg->SetTransColor(imgOutput.RGBtoRGBQUAD(colBG));
					pItem->m_pImg->SetTransIndex(-1);
#ifdef CXIMAGE_V599C
					pItem->m_pImg->AlphaStrip();
#endif //	#ifdef CXIMAGE_V599C
				}

				_sntprintf(path_buffer, _MAX_PATH, _T("%s%s%s%s"), drive, dir, m_wndListCtrl.m_aImg[i].m_strCmdID, ext);
				pItem->m_pImg->Save(path_buffer, dwType);
			}

#ifdef _DEBUG_STEP_
			_sntprintf(path_buffer, _MAX_PATH, _T("%s%s%05d-%s-%03d%s"), drive, dir, nTestCount, _T("Debug02-"), i, ext);
			imgOutput.Save(path_buffer, dwType);
#endif

			nOutput += 1;
		}

		delete pItem;
		dwOffsetX -= m_outCx;
	}

#ifdef _DEBUG_STEP_
	_sntprintf(path_buffer, _MAX_PATH, _T("%s%s%05d-%s%s"), drive, dir, nTestCount, _T("Debug03-"), ext);
	imgOutput.Save(path_buffer, dwType);
#endif

	if (nOutput > 0)
	{
		if (m_bChktransparent)
		{
			imgOutput.SetTransIndex(0);
		}
		else
		{
			imgOutput.SetTransIndex(-1);
			imgOutput.AlphaStrip();
		}

#ifdef _DEBUG_STEP_
		_sntprintf(path_buffer, _MAX_PATH, _T("%s%s%05d-%s%s"), drive, dir, nTestCount, _T("Debug04-"), ext);
		imgOutput.Save(path_buffer, dwType);

		nTestCount += 1;
#endif

		if (imgOutput.Save(lpszFile, dwType))
		{
			if (MessageBox(_T("Export successfully! Do you want open it?"), _T("Information"), MB_YESNO | MB_ICONINFORMATION) == IDYES)
			{
				ShellExecute(NULL, _T("Open"), lpszFile, NULL, NULL, SW_SHOWNORMAL);
				return 1;
			}
		}
		else
		{
			MessageBox(_T("Export failed!"), _T("Error"), MB_OK | MB_ICONERROR);
			return 0;
		}
	}
	{
		MessageBox(_T("Export failed!"), _T("Error"), MB_OK | MB_ICONERROR);
		return 0;
	}

	return 1;
}

LRESULT CMainDlg::OnBtnsaveBnClicked(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
	TCHAR szFile[MAX_PATH] = _T("\0");

	OPENFILENAME ofn;
	memset( &(ofn), 0, sizeof(ofn));

	ofn.lStructSize = sizeof(ofn);
	ofn.hwndOwner = m_hWnd;
	ofn.lpstrFile = szFile;
	ofn.nMaxFile = MAX_PATH;
	ofn.lpstrFilter = _T("PNG File(*.png)\0*.png\0BMP File(*.bmp)\0*.bmp\0GIF File(*.gif)\0*.gif\0JPEG File(*.jpg)\0*.jpg\0ICON File(*.ico)\0*.ico\0");
	ofn.lpstrTitle = _T("Export Image List as ...");
	ofn.Flags = OFN_HIDEREADONLY | OFN_ENABLESIZING | OFN_EXPLORER;
	ofn.lpstrDefExt = _T(".png");

	if (GetSaveFileName(&ofn))
	{
		ATLTRACE(_T("CXNESecBitStream::SaveToFile: %s"), ofn.lpstrFile);

		if (MessageBox(_T("Application can save every items as a image file.\nPress 'Yse' to perform this, 'No' to disable this"),
			_T("Confirm"), MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			return SaveToFile(ofn.lpstrFile, true);
		}
		else
		{
			return SaveToFile(ofn.lpstrFile, false);
		}
	}


	return 0;
}


CMainDlg::CMainDlg(void)
: m_bChkcenter(TRUE)
, m_bChkresize(TRUE)
, m_outCx(24lu)
, m_outCy(24lu)
, m_hIcoUndo(NULL), m_hIcoRedo(NULL)
, m_dwBpp(24lu)
, m_bChktransparent(TRUE)
{
	m_wndListCtrl.RegisterClass();
}


LRESULT CMainDlg::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
// 	UINT state = (UINT)wParam;
// 	CSize Size = CSize(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));

	CDialogResize<CMainDlg>::OnSize(uMsg, wParam, lParam, bHandled);

	bHandled = TRUE;

	if (::IsWindow(m_hWnd) && ::IsWindow(m_wndListCtrl.m_hWnd) && (wParam != SIZE_MINIMIZED))
	{
// 		CRect rcClt;
// 		m_wndListCtrl.GetClientRect(&rcClt);
// 		m_wndListCtrl.SetColumnWidth(2, rcClt.Width() - 176);
		m_wndListCtrl.AdjustColumnWidth();
	}

	return 0;
}

LRESULT CMainDlg::OnBnClickedBtnclearall(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	m_wndListCtrl.DeleteAllItems();

	return 0;
}

LRESULT CMainDlg::OnBnClickedBtneffect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
	CDlgEffect dlgEffect;
	m_wndListCtrl.GetSelectedItems(dlgEffect.m_aSelectedItems);
	ATLTRACE(_T("%d items selected."), dlgEffect.m_aSelectedItems.GetSize());
	if (dlgEffect.m_aSelectedItems.GetSize() == 0)
		return 0;

	dlgEffect.DoModal();

	return 0;
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU General Public License (GPLv3)


Written By
Team Leader GreatStar Software Technology Development CO., Ltd
China China
Upcoming product - Roya LiveWorld
Integrate video, audio and data with powerful collaborative communication technologies.
Hope that we can let people around the world to communicate more convenient!

The wise choice of the 10 reasons
1, single server to support users far more than the general similar products
2, years of accumulation of professional video technology development, so that the effect of more realistic video
3, even if the dial-up Internet access, can also be smooth, clear, quality sound effects
4, adapt to the various complex network environment
5, the powerful, friendly interface, easy to operate
6, better stability and better, higher security
7, Universal Network File Sharing Technology (Global original) can be simple and efficient sharing of arbitrary files
8, close to the ordinary user's design
9, the hardware and software requirements are very low, server can even run in the virtual machine.
10, more personalized service

http://www.soft234.com

Comments and Discussions