、你用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类的成员变量CButtonm_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程序开发不了解.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)