社区
界面
帖子详情
我想在窗口中显示一张地图的一部分,然后移动鼠标,可以拖拉地图,该如何实现
f26511314
2003-11-16 07:45:03
我想在窗口中显示一张地图的一部分,然后移动鼠标,可以拖拉,可以旋转,该怎样做啊
...全文
97
5
打赏
收藏
我想在窗口中显示一张地图的一部分,然后移动鼠标,可以拖拉地图,该如何实现
我想在窗口中显示一张地图的一部分,然后移动鼠标,可以拖拉,可以旋转,该怎样做啊
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
crystal_heart
2003-11-16
打赏
举报
回复
up
yintongshun
2003-11-16
打赏
举报
回复
旋转:
http://www.copathway.com/vchelp/archive.asp?type_id=18&class_id=1&cata_id=12&article_id=248&search_term=
http://www.ittide.com/document/article/graphic/63.html(经典)
http://www.ittide.com/document/article/graphic/13.html
http://www.codeguru.com/bitmap/rotate_bitmap.shtml
f26511314
2003-11-16
打赏
举报
回复
谢谢这为朋友,能不能可以旋转这张位图啊
yintongshun
2003-11-16
打赏
举报
回复
// put the HBITMAP info into the CBitmap (but not the bitmap itself)
else{
GetClientRect( &rectStaticClient );
rectStaticClient.NormalizeRect();
m_size.cx = rectStaticClient.Width(); // zero based
m_size.cy = rectStaticClient.Height(); // zero based
// Convert to screen coordinates using static as base,
// then to DIALOG (instead of static) client coords
// using dialog as base
//ClientToScreen( &rectStaticClient );
//GetParent()->ScreenToClient( &rectStaticClient);
m_pt.x = rectStaticClient.left;
m_pt.y = rectStaticClient.top;
GetObject( m_hBmpNew , sizeof(BITMAP), &m_bmInfo );
VERIFY(m_hBmpOld = (HBITMAP)SelectObject(m_dcMem, m_hBmpNew ) );
offsetx= m_pt.x;
offsety=m_pt.y;
//m_vbar.MoveWindow(offsetx+m_size.cx,offsety,18,m_size.cy);
//m_hbar.MoveWindow(offsetx,offsety+m_size.cy,m_size.cx,18);
horz.cbSize = sizeof(SCROLLINFO);
horz.fMask = SIF_ALL;
horz.nMin = 0;
horz.nMax = m_bmInfo.bmWidth-m_size.cx;
horz.nPage =0;
horz.nPos = 0;
horz.nTrackPos=0;
if(m_bmInfo.bmWidth<=m_size.cx)
{
if((m_size.cx-m_bmInfo.bmWidth)==0)
offsetx= m_pt.x;
else
offsetx= m_pt.x+((m_size.cx-m_bmInfo.bmWidth)/2);
m_vbar.MoveWindow(offsetx+m_bmInfo.bmWidth,offsety,18,m_size.cy);
m_hbar.ShowWindow(false);
}
else
m_hbar.ShowWindow(true);
m_hbar.SetScrollInfo(&horz);
vert.cbSize = sizeof(SCROLLINFO);
vert.fMask = SIF_ALL;
vert.nMin = 0;
vert.nMax = m_bmInfo.bmHeight-(m_size.cy);
vert.nPage = 0;
vert.nTrackPos=0;
if(m_bmInfo.bmHeight<=m_size.cy)
{
if((m_size.cy-m_bmInfo.bmHeight)==0)
offsety= m_pt.y;
else
offsety= m_pt.y+((m_size.cy-m_bmInfo.bmHeight)/2);
m_hbar.MoveWindow(offsetx,offsety+m_bmInfo.bmHeight,m_size.cx,18);
m_vbar.ShowWindow(false);
}
else
m_vbar.ShowWindow(true);
m_vbar.SetScrollInfo(&vert);
InvalidateRect(&rectStaticClient);
return TRUE;
}
}
void CScrollBitmap::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
switch (nSBCode)
{
case SB_TOP:
sourcey = 0;
break;
case SB_BOTTOM:
sourcey = INT_MAX;
break;
case SB_THUMBTRACK:
sourcey = nPos;
break;
}
m_vbar.SetScrollPos(sourcey);
erase=true;
InvalidateRect(&rectStaticClient);
CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CScrollBitmap::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
switch (nSBCode)
{
case SB_TOP:
sourcex = 0;
break;
case SB_BOTTOM:
sourcex = INT_MAX;
break;
case SB_THUMBTRACK:
sourcex= nPos;
break;
}
m_hbar.SetScrollPos(sourcex);
//Invalidate();
erase=true;
InvalidateRect(&rectStaticClient);
CWnd::OnHScroll(nSBCode, nPos, pScrollBar);
}
BOOL CScrollBitmap::OnEraseBkgnd(CDC* pDC)
{
if(erase)
return false;
else
return CWnd::OnEraseBkgnd(pDC);
}
(4) 在对话框声名文件(.h),加入
#include "ScrollBitmap.h"
在窗体放置一个静态控件,将ID改成IDC_IMG,按鼠标右键选择”classWizard…”菜单进入MFC ClassWizard窗口,切换到”Member variables ”,给IDC_IMG添加一个控件变量m_bmp.
打开对话框声名文件,将
Cstatic m_bmp
替换成
CscrollBitmap m_bmp
在对话框的OnInitDialog ()过程里,初始化m_bmp
m_bmp.InitBmp();
在对话框添加一个打开按钮,由于选择图片:
CFileDialog *pFileDialog;
pFileDialog = new CFileDialog(TRUE,".bmp",NULL,OFN_HIDEREADONLY, "位图文件 (*.bmp)|*.bmp",this);
if (pFileDialog->DoModal() == IDOK )
{
m_bmp.LoadBmp(pFileDialog->GetFileName());
}
至此,你就可以演示一下了。
地址:
http://www.vchelp.net/vchelp/file2003_2/scrollbmpclass.asp?type_id=4&class_id=1&cata_id=1&article_id=996&search_term=
yintongshun
2003-11-16
打赏
举报
回复
一个可以滚动显示BMP的类
本文旨在讲述如何创建一个能够在以滚动方式显示图片的组件.同时VC入门用户还可以学习一下GDI的运用以及坐标点的转化.图1为应用软件的主界面.
下面,让我们来看看如何一步一步创建CscrollBitmap类,并如何使用之.
(1) 创建一个对话框应用程序.
(2) 然后,新建一个类CscrollBitmap,从Cstatic继承,此时VC自动为您创建了.h和.cpp文件,打开scrollBitmap.h文件,修改CscrollBitmap的继承类,也即改成CWnd.然后打开scrollBitmap.Cpp文件,将所有的Cstatic替换成CWnd.
(3) 下面列出CscrollBitmap类的源码
“ScrollBitmap.h”
#if !defined(AFX_SCROLLBITMAP_H__9DBF033E_05C7_4A94_A38F_3D3D865126C0__INCLUDED_)
#define AFX_SCROLLBITMAP_H__9DBF033E_05C7_4A94_A38F_3D3D865126C0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ScrollBitmap.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CScrollBitmap window
class CScrollBitmap : public CWnd
{
// Construction
public:
CScrollBitmap();
//...加载图片
BOOL LoadBmp(LPCTSTR lpszResourceName);
//...初始化
void InitBmp();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CScrollBitmap)
protected:
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CScrollBitmap();
// Generated message map functions
protected:
//{{AFX_MSG(CScrollBitmap)
afx_msg void OnPaint();
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CScrollBar m_vbar; //竖直滚动条
CScrollBar m_hbar; //水平滚动条
CDC m_dcMem; // Compatible Memory DC for dialog
HBITMAP m_hBmpOld; // 保存旧的Bitmap对象句柄
HBITMAP m_hBmpNew; // 保存新的Bitmap对象句柄
BITMAP m_bmInfo; // bmp位图信息结构
CPoint m_pt;
CSize m_size;
CRect rectStaticClient;
SCROLLINFO horz,vert;
BOOL flag, erase;
int sourcex, sourcey,offsetx,offsety;
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SCROLLBITMAP_H__9DBF033E_05C7_4A94_A38F_3D3D865126C0__INCLUDED_)
“ScrollBitmap.cpp”
// ScrollBitmap.cpp : implementation file
//
#include "stdafx.h"
#include "ScrollBmpControl.h"
#include "ScrollBitmap.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CScrollBitmap
CScrollBitmap::CScrollBitmap()
{
}
CScrollBitmap::~CScrollBitmap()
{
}
BEGIN_MESSAGE_MAP(CScrollBitmap, CWnd)
//{{AFX_MSG_MAP(CScrollBitmap)
ON_WM_PAINT()
ON_WM_VSCROLL()
ON_WM_HSCROLL()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScrollBitmap message handlers
void CScrollBitmap::InitBmp()
{
CClientDC dc(this);
m_dcMem.CreateCompatibleDC( &dc );
CRect tmpRect;
GetClientRect(tmpRect);
m_hbar.Create(SBS_HORZ | SBS_BOTTOMALIGN | WS_CHILD | WS_VISIBLE,
CRect(tmpRect.left,tmpRect.bottom-10,tmpRect.right, tmpRect.bottom), this, 100);
m_vbar.Create(SBS_VERT | SBS_RIGHTALIGN | WS_CHILD | WS_VISIBLE,
CRect(tmpRect.left-10,tmpRect.top,tmpRect.right, tmpRect.bottom), this, 101);
m_hbar.ShowWindow(false);
m_vbar.ShowWindow(false);
}
void CScrollBitmap::OnPaint()
{
CPaintDC dc(this); // device context for painting
dc.BitBlt(offsetx,offsety,m_size.cx-10,m_size.cy-10,
&m_dcMem, sourcex, sourcey,SRCCOPY);
erase=false;
// Do not call CWnd::OnPaint() for painting messages
}
BOOL CScrollBitmap::LoadBmp(LPCTSTR lpszResourceName)
{
CString file;
file = lpszResourceName;
if(m_hBmpNew != NULL )
DeleteObject(m_hBmpNew);
sourcex=sourcey=0;//
m_hBmpNew = (HBITMAP) LoadImage(
AfxGetInstanceHandle(), // handle to instance
file, // name or identifier of the image (root is where project is)
IMAGE_BITMAP, // image types
0, // desired width
0, // desired height
LR_LOADFROMFILE);
if( m_hBmpNew == NULL ){
AfxMessageBox("Load Image Failed");
return FALSE;
}
MFC解决
窗口
保存及重绘闪烁问题的一种比较好的方案 v1.0.5
直接运行demo里面的程序,在
窗口
上任意
拖拉
鼠标
画线,然后点击菜单栏的几个示范菜单项,然后
移动
窗口
、 改变
窗口
大小、最大最小化
窗口
、用其它
窗口
覆盖此
窗口
、
鼠标
放到任务栏。。。 以上种种操作观察
窗口
内的...
MFC解决
窗口
保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.3
直接运行demo里面的程序,在
窗口
上任意
拖拉
鼠标
画线,然后点击菜单栏的几个示范菜单项,然后
移动
窗口
、 改变
窗口
大小、最大最小化
窗口
、用其它
窗口
覆盖此
窗口
、
鼠标
放到任务栏。。。 以上种种操作观察
窗口
内的...
小程序云开发实战:通用企业产品信息展示小程序
1 课程目标 学会使用腾讯提供的云开发功能快速开发后台 数据接口,用于存储小程序
中
用到的数据 学会使用小程序
中
常见的一些API,比如:分享小程序,拨打手机电话,
地图
位置等 掌握快速上架一款小程序需要的步骤 前端...
MFC解决
窗口
保存及重绘闪烁问题的一种比较好的方案 SolveFlashingAndRedraw框架 v1.0.2
直接运行demo里面的程序,在
窗口
上任意
拖拉
鼠标
画线,然后点击菜单栏的几个示范菜单项,然后
移动
窗口
、 改变
窗口
大小、最大最小化
窗口
、用其它
窗口
覆盖此
窗口
、
鼠标
放到任务栏。。。 以上种种操作观察
窗口
内的...
flstudio20_specification.pdf
fl studio20 使用说明和入门方法教授
中
文版 共同功能 - 所有具有调节功能的按钮和...工具栏面板和下面一大片不是工具栏的
窗口
……本篇暂时不会对这两个部分以外的
窗口
做讨论~首先工具栏面板
中
。 以及其他详细内容介绍
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章