对话框中显示图片有关问题

对话框中显示图片问题
现有一对话框,用来显示图片,在此对话框中要对图片进行缩放、移动处理,载入图片前大小未知,而对话框大小固定(600*400左右),当载入图片大于显示范围或放大图片到超出显示范围时,自动出现滚动条,请提供思路或DEMO,谢谢!

我现在载入图片时只能截取对话框大小的部分,超出部分被截除了,当拖动滚动条时,图片被拉得乱七八糟。

------解决方案--------------------
网上搜对话框中位图处理.....
------解决方案--------------------
在滚动之后你要调用UpdateWindow();
------解决方案--------------------
写得比较粗糙,那个pview也没有释放,仅供参考:

// testmfc2Dlg.h : 头文件
//

#pragma once
#include "afxwin.h "

class CMyScrollView : public CScrollView
{
public:
void OnDraw(CDC *pdc) {
pdc-> TextOut(0, 0, _T( "HELLO WORLD "));
}
DECLARE_DYNCREATE(CMyScrollView)
LPCTSTR GetIconWndClass(DWORD dwDefaultStyle, UINT nIDResource);
void OnInitialUpdate();
};


// Ctestmfc2Dlg 对话框
class Ctestmfc2Dlg : public CDialog
{
// 构造
public:
Ctestmfc2Dlg(CWnd* pParent = NULL);// 标准构造函数

// 对话框数据
enum { IDD = IDD_TESTMFC2_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持


// 实现
protected:
HICON m_hIcon;

// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
};

// testmfc2Dlg.cpp : 实现文件
//

#include "stdafx.h "
#include "testmfc2.h "
#include "testmfc2Dlg.h "

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Ctestmfc2Dlg 对话框


Ctestmfc2Dlg::Ctestmfc2Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Ctestmfc2Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()-> LoadIcon(IDR_MAINFRAME);
}

void Ctestmfc2Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(Ctestmfc2Dlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

IMPLEMENT_DYNCREATE(CMyScrollView, CScrollView)

// Ctestmfc2Dlg 消息处理程序

LPCTSTR CMyScrollView::GetIconWndClass(DWORD dwDefaultStyle, UINT nIDResource)
{
HINSTANCE hInst = AfxFindResourceHandle(
MAKEINTRESOURCE(nIDResource), RT_GROUP_ICON);
HICON hIcon = ::LoadIcon(hInst, MAKEINTRESOURCE(nIDResource));
if (hIcon != NULL)
{
CREATESTRUCT cs;
memset(&cs, 0, sizeof(CREATESTRUCT));
cs.style = dwDefaultStyle;
PreCreateWindow(cs);
// will fill lpszClassName with default WNDCLASS name
// ignore instance handle from PreCreateWindow.

WNDCLASS wndcls;
if (cs.lpszClass != NULL &&
GetClassInfo(AfxGetInstanceHandle(), cs.lpszClass, &wndcls) &&
wndcls.hIcon != hIcon)
{
// register a very similar WNDCLASS
return AfxRegisterWndClass(wndcls.style,
wndcls.hCursor, wndcls.hbrBackground, hIcon);
}
}
return NULL; // just use the default
}

void CMyScrollView::OnInitialUpdate()
{
SetScrollSizes(MM_TEXT, CSize(1000, 800));
CScrollView::OnInitialUpdate();
}

BOOL Ctestmfc2Dlg::OnInitDialog()
{
CDialog::OnInitDialog();

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE);// 设置大图标
SetIcon(m_hIcon, FALSE);// 设置小图标

// TODO: 在此添加额外的初始化代码
CMyScrollView *pView = (CMyScrollView *)RUNTIME_CLASS(CMyScrollView)-> CreateObject();
pView-> Create(
pView-> GetIconWndClass(WS_VISIBLE | WS_CHILD, IDR_MAINFRAME), _T( "TEST "), WS_VISIBLE | WS_CHILD,