⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myprop.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
字号:
// MyProp.cpp : CMyProp 的实现

#include "stdafx.h"
#include "MyProp.h"

extern HINSTANCE g_hInstance;
extern UINT g_cDllRefCount;
extern CMyProp* g_pMainDlg;

void DrawThumbnailImage(HWND,HDC);

// CMyProp
HRESULT CMyProp::Initialize(LPCITEMIDLIST pIdlFolder,IDataObject* pDataObj,HKEY hKeyProgID)
{
	FORMATETC fe={CF_HDROP,0,DVASPECT_CONTENT,-1,TYMED_HGLOBAL};
	STGMEDIUM medium={TYMED_HGLOBAL};
	UINT count;
	HRESULT hr;
	
	if(pDataObj)
	{
		hr=pDataObj->GetData(&fe,&medium);
		if(SUCCEEDED(hr)) 
		{
			count=DragQueryFile((HDROP)medium.hGlobal,(UINT)-1,0,0);
			if(count) DragQueryFile((HDROP)medium.hGlobal,0,m_FileName,MAX_PATH);
		}
		ReleaseStgMedium(&medium);
	}
	
	return(S_OK);
}

BOOL CALLBACK PageDlgPreviewProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hDC;

	switch(message)
	{
	case WM_INITDIALOG:
		g_pMainDlg=(CMyProp*)(((LPPROPSHEETPAGE)lParam)->lParam);
		return(1);
	case WM_PAINT:
		hDC=BeginPaint(hWnd,&ps);
		g_pMainDlg->DrawThumbnailImage(hWnd,hDC);
		EndPaint(hWnd,&ps);
		return(1);
	case WM_NOTIFY:
		SetWindowLong(hWnd,DWL_MSGRESULT,0);
		return(1);
	case WM_COMMAND:
		return(1);
	}

	return(0);
}

void CMyProp::DrawThumbnailImage(HWND hWnd,HDC hDC)
{
	Graphics graph(hDC);
	graph.SetInterpolationMode(InterpolationModeHighQualityBicubic);

	int wWin,hWin,wPic,hPic,xOri,yOri;
	float vxWin,vyWin,vxPic,vyPic;
	RECT rect;

	USES_CONVERSION;

	GetClientRect(hWnd,&rect);
	wWin=rect.right-rect.left;
	hWin=rect.bottom-rect.top;
	
	Image img(A2W(g_pMainDlg->m_FileName));
	wPic=img.GetWidth();
	hPic=img.GetHeight();
	xOri=yOri=0;
	vxWin=1.0f*wWin/hWin;
	vyWin=1.0f*hWin/wWin;
	vxPic=1.0f*wPic/hPic;
	vyPic=1.0f*hPic/wPic;
	if(wPic<hPic) //长形
	{
		if(vyWin<vyPic)
		{			
			wPic=(int)(1.0f*hWin/hPic*wPic);
			hPic=hWin;
			xOri+=(wWin-wPic)/2;
		}
		else //(vyWin>=vyPic)
		{
			hPic=(int)(1.0f*wWin/wPic*hPic);
			wPic=wWin;
			yOri+=(hWin-hPic)/2;
		}
	}
	else if(wPic>=hPic)//扁形
	{
		if(vxWin<vxPic)
		{
			hPic=(int)(1.0f*wWin/wPic*hPic);
			wPic=wWin;
			yOri+=(hWin-hPic)/2;
		}
		else //(vxWin>=vxPic)
		{
			
			wPic=(int)(1.0f*hWin/hPic*wPic);
			hPic=hWin;
			xOri+=(wWin-wPic)/2;
		}
	}
	graph.DrawImage(&img,xOri,yOri,wPic,hPic);
}

BOOL CALLBACK PageDlgEditProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	LPTSTR pFileName;
	PAINTSTRUCT ps;
	HDC hDC;

	switch(message)
	{
	case WM_INITDIALOG:
		g_pMainDlg=(CMyProp*)(((LPPROPSHEETPAGE)lParam)->lParam);
		return(1);
	case WM_PAINT:
		hDC=BeginPaint(hWnd,&ps);
		pFileName=g_pMainDlg->m_FileName;
		TextOut(hDC,10,10,pFileName,lstrlen(pFileName));
		EndPaint(hWnd,&ps);
		return(1);
	case WM_NOTIFY:
		SetWindowLong(hWnd,DWL_MSGRESULT,0);
		return(1);
	case WM_COMMAND:
		if(IDC_BUTTON1==LOWORD(wParam))
		{
			pFileName=g_pMainDlg->m_FileName;
			ShellExecute(hWnd,"open",pFileName,0,0,SW_SHOWMAXIMIZED);
		}
		return(1);
	}

	return(0);
}

HRESULT CMyProp::AddPages(LPFNSVADDPROPSHEETPAGE lpfnAddPage,LPARAM lParam)
{
	LPTSTR pFileExt;
	HRESULT hr;

	pFileExt=PathFindExtension(m_FileName);
	CharLowerBuff(pFileExt,lstrlen(pFileExt));
	if(!(0==lstrcmp(".jpg",pFileExt)||0==lstrcmp(".bmp",pFileExt)||
		0==lstrcmp(".gif",pFileExt)||0==lstrcmp(".png",pFileExt)||
		0==lstrcmp(".tif",pFileExt)||0==lstrcmp(".wmf",pFileExt)||
		0==lstrcmp(".emf",pFileExt)||0==lstrcmp(".ico",pFileExt))) return(E_FAIL);

	hr=AddPropPage(lpfnAddPage,lParam,PageDlgPreviewProc,_T("预览"),IDD_PROPPAGE_LARGE);
	hr=AddPropPage(lpfnAddPage,lParam,PageDlgEditProc,_T("处理"),IDD_PROPPAGE_LARGE1);
		
	return(hr);
}

HRESULT CMyProp::AddPropPage(LPFNSVADDPROPSHEETPAGE lpfnAddPage,LPARAM lParam,
							 DLGPROC pfnProc,LPCTSTR pTitle,WORD PageID)
{
	HPROPSHEETPAGE hPage;
	PROPSHEETPAGE psp;
	HRESULT	hr=E_FAIL;

	ZeroMemory(&psp,sizeof(PROPSHEETPAGE));
	psp.dwSize=sizeof(PROPSHEETPAGE);
	psp.dwFlags=PSP_USEREFPARENT|PSP_USETITLE;
	psp.hInstance=g_hInstance;
	psp.pszTemplate=MAKEINTRESOURCE(PageID);
	psp.pszTitle=pTitle;
	psp.pfnDlgProc=pfnProc;
	psp.pcRefParent=&g_cDllRefCount;
	psp.lParam=(LPARAM)this;
	hPage=CreatePropertySheetPage(&psp);

	if(hPage)
	{
		if(lpfnAddPage(hPage,lParam))
		{
			this->AddRef();
			hr=S_OK;
		}
		else DestroyPropertySheetPage(hPage);
	}
    else hr=E_OUTOFMEMORY;

	return(hr);
}

HRESULT CMyProp::ReplacePage(UINT uPageID,LPFNSVADDPROPSHEETPAGE lpfnReplaceWith,LPARAM lParam)
{
	return(E_FAIL);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -