www.gusucode.com > VC++指定区域抓图、截屏小程序-源码程序 > VC++指定区域抓图、截屏小程序-源码程序/code/ResizeDlg.cpp
//Download by http://www.NewXing.com /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 文件:ResizeDlg.cpp 类CResizeDlg的执行文件 版权:Firebird Software Workroom 保留 声明:本源程序的版权受《中华人民共和国著作权法》以及其 它相关法律和条约的保护。任何有机会得到本源程序的 个人和机构,未经作者明确授权,不得将本源程序用于 任何商业目的(直接的或间接的)。对于非商业目的的使 用 (包括复制、传播、编译和修改), 原则上没有特别 的限制条款,但请在相关文档中说明其来源,并尊重原 作者的署名权。 编写:秦传安(chings) 2000.5 联络:Tel:(0792)6323086 E_mail:chings@163.net @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ #include "fclstd.h" #include "ScreenCap.h" #include "resource.h" #include "MainWnd.h" #include "ResizeDlg.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CResizeDlg::CResizeDlg() { m_pImg = NULL; m_hBmpTemp = NULL; } CResizeDlg::~CResizeDlg() { } //#################################################################### LRESULT CResizeDlg::WindowProc(UINT msg,WPARAM wParam,LPARAM lParam) { if(msg == WM_HSCROLL) { HWND hwnd = GetDlgItem(m_hWnd,IDC_SLIDER1); if(hwnd == (HWND)lParam && m_pImg) { if((LOWORD(wParam) == TB_ENDTRACK) || (LOWORD(wParam) == TB_THUMBPOSITION)) OnHScroll(HIWORD(wParam)); } return 0; } else if(msg == WM_DESTROY && m_pImg) { LPIMAGE_INFO pii = m_pImg->GetImageInfo(); memcpy(pii,&img,sizeof(IMAGE_INFO)); } return CModalDlg::WindowProc(msg,wParam,lParam); } //#################################################################### void CResizeDlg::OnInitDialog() { if(!m_pImg) { CMainWnd* pFrame = (CMainWnd*)GetApp()->m_pMainWnd; if(pFrame) m_pImg = pFrame->GetCurrentImage(); if(!m_pImg) EndDialog(m_hWnd,IDCANCEL); } LPIMAGE_INFO pii = m_pImg->GetImageInfo(); memcpy(&img,pii,sizeof(IMAGE_INFO)); memset(pii,0,sizeof(IMAGE_INFO)); cx = img.cx; cy = img.cy; scale = 100; HWND hwnd = GetDlgItem(m_hWnd,IDC_SLIDER1); if(hwnd) SendMessage(hwnd,TBM_SETRANGE,(WPARAM)TRUE,MAKELPARAM(0,200)); RECT rc,rcOwner; GetWindowRect(m_hWnd,&rc); GetWindowRect(m_pOwner->m_hWnd,&rcOwner); int x = rcOwner.right - (rc.right - rc.left); int y = rcOwner.bottom - (rc.bottom - rc.top); SetWindowPos(m_hWnd,NULL,x,y,0,0,SWP_NOZORDER|SWP_NOSIZE); UpdateControl(); } //#################################################################### void CResizeDlg::UpdateControl() { if(!m_hWnd)return; char str[16]; HWND hwnd = GetDlgItem(m_hWnd,IDC_EDIT_SCALE); if(hwnd) { ltoa(scale,str,10); SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)str); } hwnd = GetDlgItem(m_hWnd,IDC_EDIT_WIDTH); if(hwnd) { ltoa(cx,str,10); SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)str); } hwnd = GetDlgItem(m_hWnd,IDC_EDIT_HEIGHT); if(hwnd) { ltoa(cy,str,10); SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)str); } hwnd = GetDlgItem(m_hWnd,IDC_SLIDER1); if(hwnd) SendMessage(hwnd,TBM_SETPOS,(WPARAM)TRUE,(LPARAM)scale); } //#################################################################### void CResizeDlg::OnHScroll(int nNewPos) { HDC hdc = NULL, hBmpDC = NULL,hImgDC = NULL; HBITMAP hbmp = NULL; int pos; HWND hwnd = GetDlgItem(m_hWnd,IDC_SLIDER1); if(hwnd) pos = SendMessage(hwnd,TBM_GETPOS,0,0); if(pos == scale) return; scale = pos; cx = (int)(img.cx*scale)/100; cy = (int)(img.cy*scale)/100; UpdateControl(); hImgDC = GetDC(m_pImg->m_hWnd); hdc = CreateCompatibleDC(hImgDC); if(!hdc)return; SelectObject(hdc,img.hBmp); hBmpDC = CreateCompatibleDC(hImgDC); if(!hBmpDC) goto Done; hbmp = CreateCompatibleBitmap(hdc,cx,cy); if(!hbmp) goto Done; SelectObject(hBmpDC,hbmp); StretchBlt(hBmpDC,0,0,cx,cy,hdc,0,0,img.cx,img.cy,SRCCOPY); if(m_hBmpTemp) DeleteObject(m_hBmpTemp); m_hBmpTemp = hbmp; m_pImg->LoadFromHandle(hbmp); m_pImg->Invalidate(); Done: if(hdc) DeleteDC(hdc); if(hBmpDC) DeleteDC(hBmpDC); if(hImgDC) ReleaseDC(m_hWnd,hImgDC); }