VC++ 怎么把编辑控件的值显示在视图中

就是单文档里有一个对话框,对话框上有个编辑控件,在控件输入内容,点按钮确定后,怎么把内容显示在CMyview,即视图上我的邮箱:962163420@qq.com... 就是单文档里有一个对话框,对话框上有个编辑控件,在控件输入内容,点按钮确定后,怎么把内容显示在CMyview,即视图上
我的邮箱:962163420@qq.com
展开
 我来答
匿名用户
2011-05-06
展开全部
首先在CBMPViewerDoc定义成员变量和函数:
BITMAPINFOHEADER bi; //信息头
RGBQUAD* quad; //调色板
BYTE* lpBuf; //图像数据
BITMAPINFO* pbi;
int flag; //标志表示是否打开了bmp文件
int numQuad; //调色板数目
BYTE* lpshowbuf; //用于显示的图像数据
int zoomfactor; //缩放比率
BOOL PrepareShowdata();

void CBMPViewerDoc::OnFileOpen()
{
// TODO: Add your command handler code here
// TODO: Add your command handler code here
LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|任何文件|*.*||";
CFileDialog dlg1(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,lpszFilter,NULL);
CString filename;
CFile file;
BITMAPFILEHEADER bf;

//打开文件对话框
if(dlg1.DoModal()==IDOK)
{
filename=dlg1.GetPathName();
if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
{
//读取文件失败
AfxMessageBox("无法打开文件!",MB_OK,0);
return;
}
//读取文件头
file.Read(&bf,sizeof(bf));
//判断是否是BMP文件
if(bf.bfType!=0x4d42)//'BM'
{
AfxMessageBox("非BMP文件!",MB_OK,0);
return;
}
//判断文件是否损坏
if(file.GetLength()!=bf.bfSize)
{
AfxMessageBox("文件已损坏,请检查!",MB_OK,0);
return;
}

//读文件信息头
file.Read(&bi,sizeof(bi));

//计算调色板数目
numQuad=0;
if(bi.biBitCount<24)
{
numQuad=1<<bi.biBitCount;
}

//为图像信息pbi申请空间
pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
memcpy(pbi,&bi,sizeof(bi));
quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));

//读取调色板
if(numQuad!=0)
{
file.Read(quad,sizeof(RGBQUAD)*numQuad);
}

//为图像数据申请空间
bi.biSizeImage=bf.bfSize-bf.bfOffBits;
lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
//读取图像数据
file.Read(lpBuf,bi.biSizeImage);

//图像读取完毕,关闭文件,设置标志
file.Close();
flag=1;
zoomfactor=1;
lpshowbuf=NULL;
PrepareShowdata();
UpdateAllViews(NULL,0,NULL);
}
}
void CBMPViewerView::OnPaint()
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
// TODO: Add your message handler code here
//得到文档指针
CBMPViewerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

//是否已打开某个BMP文件
if(pDoc->flag==1)
{
//指定是显示的颜色
SetDIBitsToDevice(dc.m_hDC,0,0,pDoc->pbi->bmiHeader.biWidth,
pDoc->pbi->bmiHeader.biHeight,0,0,0,
pDoc->pbi->bmiHeader.biHeight,pDoc->lpshowbuf,
pDoc->pbi,DIB_RGB_COLORS);
}
// Do not call CView::OnPaint() for painting messages
// Do not call CView::OnPaint() for painting messages
}
CBMPViewerDoc::~CBMPViewerDoc()
{
if(flag==1)
{
// 释放内存资源
HeapFree(GetProcessHeap(),0,pbi);
HeapFree(GetProcessHeap(),0,lpBuf);
}
}
BOOL CBMPViewerDoc::PrepareShowdata()
{
BYTE** image;
BYTE** originimage;
int i,j;
int linewidth;

if(lpshowbuf!=NULL)
HeapFree(GetProcessHeap(),0,lpshowbuf);
if(zoomfactor>=1)
{//放大
pbi->bmiHeader.biHeight=bi.biHeight*zoomfactor;
pbi->bmiHeader.biWidth=bi.biWidth*zoomfactor;

//每行四字节补齐,计算每行字节数:
linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;

//计算显示图像所需内存大小
pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;

//申请内存
lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage);

//生成对lpshowbuf的二维数组索引:
image=new BYTE*[pbi->bmiHeader.biHeight];
for(i=0;i<pbi->bmiHeader.biHeight;i++)
image[i]=lpshowbuf+i*linewidth;

originimage=new BYTE*[bi.biHeight];
for(i=0;i<bi.biHeight;i++)
originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;

//赋值
if(bi.biBitCount<24)
{
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<linewidth;j++)
image[i][j]=originimage[i/zoomfactor][j/zoomfactor];
}
else if(bi.biBitCount==24)
{//24位真彩色
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<pbi->bmiHeader.biWidth;j++)
{
image[i][j*3]=originimage[i/zoomfactor][(j/zoomfactor)*3];
image[i][j*3+1]=originimage[i/zoomfactor][(j/zoomfactor)*3+1];
image[i][j*3+2]=originimage[i/zoomfactor][(j/zoomfactor)*3+2];
}
}
else
{//32位色
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<pbi->bmiHeader.biWidth;j++)
{
image[i][j*4]=originimage[i/zoomfactor][(j/zoomfactor)*4];
image[i][j*4+1]=originimage[i/zoomfactor][(j/zoomfactor)*4+1];
image[i][j*4+2]=originimage[i/zoomfactor][(j/zoomfactor)*4+2];
image[i][j*4+3]=originimage[i/zoomfactor][(j/zoomfactor)*4+3];
}
}
}
else
{//缩小
pbi->bmiHeader.biHeight=bi.biHeight/(-zoomfactor);
pbi->bmiHeader.biWidth=bi.biWidth/(-zoomfactor);

//每行四字节补齐,计算每行字节数:
linewidth=(pbi->bmiHeader.biWidth*pbi->bmiHeader.biBitCount+31)/32*4;

//计算显示图像所需内存大小
pbi->bmiHeader.biSizeImage=linewidth*pbi->bmiHeader.biHeight;

//申请内存
lpshowbuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,pbi->bmiHeader.biSizeImage);

//生成对lpshowbuf的二维数组索引:
image=new BYTE*[pbi->bmiHeader.biHeight];
for(i=0;i<pbi->bmiHeader.biHeight;i++)
image[i]=lpshowbuf+i*linewidth;

originimage=new BYTE*[bi.biHeight];
for(i=0;i<bi.biHeight;i++)
originimage[i]=lpBuf+i*bi.biSizeImage/bi.biHeight;

//赋值
if(bi.biBitCount<24)
{
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<linewidth;j++)
image[i][j]=originimage[i*(-zoomfactor)][j*(-zoomfactor)];
}
else if(bi.biBitCount==24)
{//24位真彩色
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<pbi->bmiHeader.biWidth;j++)
{
image[i][j*3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3];
image[i][j*3+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+1];
image[i][j*3+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*3+2];
}
}
else
{//32位色
for(i=0;i<pbi->bmiHeader.biHeight;i++)
for(j=0;j<pbi->bmiHeader.biWidth;j++)
{
image[i][j*4]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4];
image[i][j*4+1]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+1];
image[i][j*4+2]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+2];
image[i][j*4+3]=originimage[i*(-zoomfactor)][(j*(-zoomfactor))*4+3];
}
}
}

return TRUE;
}

在相应的地方添加相应的代码...就可以了..
我也有程序,贴个邮箱直接发给你...
ruderal123
2011-05-05 · 超过18用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:22.2万
展开全部
把问题说清楚啊 ...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式