b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

bitblt函数怎么用_bitblt c#_bitblt

电脑杂谈  发布时间:2017-01-20 00:03:14  来源:网络整理

用VC++如何浏览大图片呢?本文向初学者介绍一款基于VC++编写的图片浏览器,即使图片的大小超过窗口的大小,也能够通过拖动滚动条看到图片的每个部位。bitblt这里我们通过BitBlt 函数和有滚动条的视图类CScrollView 来实现浏览大图的功能。具体的程序代码+步骤:

(1)通过AppWizard 生成一个MDI 的应有程序PicSee,并且视的基类选择为CScrollView。bitblt

(2)为了使新建文档的功能失效,将ID_FILE_NEW 消息响应,使其响应函数不执行任何操作:

void CPicSeeDoc::OnFileNew()
{
//不做任何工作
}

(3)通过ClassWizard 响应文档类的DeleteContents 函数,清除位图对象。代码如下:

void CPicSeeDoc::DeleteContents()
{
//清除位图资源
if (m_Bitmap.m_hObject != NULL)
m_Bitmap.DeleteObject();
CDocument::DeleteContents();
}

(4)在文档类的OnOpenDocument 函数中打开位图文件,并初始化位图对象,其代码如下:

BOOL CPicSeeDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (IsModified())
TRACE0("Warning: OnOpenDocument replaces an unsaved document\n");
DeleteContents();
//设置等待鼠标
BeginWaitCursor();
//打开位图文件
HBITMAP hImage = (HBITMAP)LoadImage(NULL, lpszPathName, IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
EndWaitCursor();
if (!hImage) {
DWORD LastError = GetLastError();
AfxMessageBox("LoadImage failed");
return FALSE;
}
//构造位图对象
if (!m_Bitmap.Attach(hImage)) {
AfxMessageBox("Bitmap could not be attached");
return FALSE;
}
SetModifiedFlag(FALSE);
//更新所有视图
UpdateAllViews(NULL);
return TRUE;
}

(5)在文档类的头问件中加入如下代码:

public:
HBITMAP GetHandle() const {return (HBITMAP)m_Bitmap.m_hObject;};
void SelectOldBitmap(CDC *pDCMem) {pDCMem->SelectObject(m_pOldBitmap);};
void SelectBitmap(CDC *pDCMem)
{m_pOldBitmap=pDCMem->SelectObject(&m_Bitmap);};
int GetBitmap(BITMAP* pBitMap) {return m_Bitmap.GetBitmap(pBitMap);};
protected:
CBitmap m_Bitmap;
CBitmap* m_pOldBitmap;


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27467-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...