MFC如何把一张图片显示在一个单文档内??

MFC如何把一张图片显示在一个单文档内??,第1张

能载入bmp格式的图像

、你用VC++建立一个MFC(exe)工程,命名为“My”,在d出的“MFC应用程序向导-步骤1”

中选“单文档”,然后点“完成”->“确定”。

2、在“MyView.h”文件中找到代码“CMyDoc*

GetDocument()”在其下方添加如下代码:

LPBITMAPINFO

bmi

LPBYTE

pBits

BOOL

Read(char*

s)

3、然后打开“MyView.cpp”文件,在最下面写如下代码:

BOOL

CMyView::Read(char*

s)

{

CFile

file

BITMAPFILEHEADER

bmfh

//打开文件

if(!file.Open(s,CFile::modeRead))

{

AfxMessageBox("File

cannot

open!")

return

FALSE

}

//读文件信息头

file.Read(

(LPVOID)&bmfh,

sizeof(bmfh)

)

if(bmfh.bfType

!=

0x4d42)

{

AfxMessageBox("This

is

not

a

bmp

file!")

return

FALSE

}

//读位图信息头

int

infoSize

=

bmfh.bfOffBits

-

sizeof(bmfh)

bmi

=

(LPBITMAPINFO)new

BYTE[infoSize]

file.Read(

(LPVOID)bmi,

infoSize)

if(bmi->bmiHeader.biBitCount!=1

&&

bmi->bmiHeader.biBitCount!=4

&&

bmi->bmiHeader.biBitCount!=8

&&

bmi->bmiHeader.biBitCount!=24)

{

AfxMessageBox("The

number

of

colors

is

not

valid!")

return

FALSE

}

//读图像数据

pBits

=

new

BYTE[bmi->bmiHeader.biSizeImage]

file.Read(

(LPVOID)pBits,

bmi->bmiHeader.biSizeImage)

return

TRUE

}

往上找,找到构造函数:CMyView::CMyView()

在其中添加代码:

Read("d:\\picture\\图片.bmp")

往下找,找到OnDraw函数,在该函数的第三行添加代码:

if(bmi

&&

pBits)

{

::StretchDIBits(pDC->GetSafeHdc(),0,0,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,0,0,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,pBits,bmi,DIB_RGB_COLORS,SRCCOPY)

}

一、建立MFC单文档,定义View类的成员变量CButton

m_button,在***View类中添加OnCreate

或OnInitialUpdate

函数,并在函数中加入

CRect

rect_button(40,10,200,60)

//控制按钮大小、位置

m_button.Create("hello",WS_CHILD|WS_VISIBLE|WS_BORDER,rect_button,this,IDC_DYNAMICBUTTON)

m_button.ShowWindow(SW_SHOWNORMAL)

这样按钮应该都可以显示出来了。

二、然后添加消息响应函数。头文件中加入afx_msg

void

OnBtnDown()

BEGIN_MESSAGE_MAP

END_MESSAGE_MAP

之间加入ON_BN_CLICKED(IDC_DYNAMICBUTTON,OnBtnDown)

关联按钮变量;

最后加入定义

void

***View::OnBtnDown()

//读物txt文件

{

CFileDialog

dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.txt)|*.txt||",NULL)

if(dlg.DoModal()==IDOK)

{

CString

text_addr

text_addr=dlg.GetPathName()

CStdioFile

file

file.Open(text_addr,CFile::modeRead)

///////////////////////////

..........这个过程你就读一行画一行就行了

/////////////////////////

file.Close()

}

}

onDraw是在文档document更新之后调用的方法,你可以设计一个线段的类,定义一个对像在document中,你在onDraw中通过document对象得到线段对象,然后将它画出,而在view中设计对话框得到线段长度, 数据写入 document对象中,然后调用update,validate 之类的方法,我有段时间不用了,记不太清了.这种方法比较规范.便于你以后把线段的数据存档.其实如果只是想画出来,在onDraw或onPaint中放个静态变量就行.flag之类的东西都可以的.

关于学习MFC你应好好考虑一下,现在.net功能更大一些.如果你C++好的话,深入浅出mfc会比较好.还有要说的想学好mfc应了解点win32编程的知识,许多人用mfc用不好,不全是因为对mfc不了解,而是对windows程序开发不了解.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11781646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存