📄 myprop.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 + -