在对话框中选择图片
来源:互联网 发布:成立私募 知乎 编辑:程序博客网 时间:2024/04/26 07:26
在对话框中选择图片(VC7.1)
默认导入的图片ID: IDB_BITMAP1
PICTURE空件ID: IDC_BNBMP
EDIT控件ID: IDC_PHOTO 添加OnEnChangePhoto()消息处理(可将这个属性设为隐藏)
BUTTON控件ID: IDC_SELECT 处理消息:OnBnClickedSeclect()
定义两个变量:CDIB m_Dib, CString m_strFileName;
BOOL CSelectDlg::OnInitDialog()
{
………………….;
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
SetDlgItemText(IDC_PHOTO,"1.bmp");
return TRUE; // 除非设置了控件的焦点,否则返回 TRUE
}
void CSelectDlg::OnBnClickedSelect()
{
// TODO: 在此添加控件通知处理程序代码
static char szFilter[]="BMP 文件(*.bmp)|*.bmp|";
CFileDialog dlg(TRUE,"bmp",NULL,
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal()==IDOK)
{
m_strFileName =dlg.GetFileName();
SetDlgItemText(IDC_PHOTO,m_strFileName);
}
}
void CSelectDlg::OnEnChangePhoto()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
GetDlgItemText(IDC_PHOTO,m_strFileName);
if(m_strFileName.IsEmpty())
{
//m_Dib.LoadFromFile("1.bmp");
CWnd *pWnd=GetDlgItem(IDC_BNBMP);
CDC *pDC=pWnd->GetDC();
CRect rect;
pWnd->GetClientRect(&rect);
m_Dib.ShowDIB(pDC,0,0,rect.Width(),rect.Height());
return;
}
if(!m_Dib.LoadFromFile(m_strFileName))
return;
CWnd *pWnd=GetDlgItem(IDC_BNBMP);
CDC *pDC=pWnd->GetDC();
CRect rect;
pWnd->GetClientRect(&rect);
m_Dib.ShowDIB(pDC,0,0,rect.Width(),rect.Height());
}
// Dib.h
#pragma once
class CDIB : public CObject
{
public:
CDIB();
~CDIB();
BITMAPINFO* m_pBMI;//BITMAPINFO结构指针
BYTE* m_pDIBData;//DIB图像数据指针
BOOL LoadFromFile(LPCTSTR lpszFileName);//装入位图文件
//显示位图
void ShowDIB(CDC* pDC,int nLeft,int nTop,int nWidth,int nHeight);
};
// DIB.cpp : CDIB类实现文件
#include "stdafx.h"
#include "DIB.h"
CDIB::CDIB()
{
m_pBMI=NULL;
m_pDIBData=NULL;
}
CDIB::~CDIB()
{
if(m_pBMI!=NULL)
delete m_pBMI;
if(m_pDIBData!=NULL)
delete m_pDIBData;
}
// CDIB 成员函数
BOOL CDIB::LoadFromFile(LPCTSTR lpszFileName)
{
CFile file;
if(!file.Open(lpszFileName,CFile::modeRead | CFile::typeBinary))
{
return FALSE;
}
BITMAPFILEHEADER bfh;
if(file.Read(&bfh,sizeof(bfh))!=sizeof(bfh))
{
AfxMessageBox("读位图文件头出现错误!");
return FALSE;
}
if(bfh.bfType!=0x4d42)
{
AfxMessageBox("不是位图文件!");
return FALSE;
}
BITMAPINFOHEADER bih;
if(file.Read(&bih,sizeof(bih))!=sizeof(bih))
{
AfxMessageBox("读取位图信息出现错误!");
return FALSE;
}
if(bih.biBitCount!=24)
{
AfxMessageBox("不是真24色位图,程序暂不支持!");
return FALSE;
}
m_pBMI=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)];
if(!m_pBMI)
{
AfxMessageBox("内存分配错误!");
return FALSE;
}
memcpy(m_pBMI,&bih,sizeof(BITMAPINFOHEADER));
DWORD dataBytes=bfh.bfSize-bfh.bfOffBits;
m_pDIBData=(BYTE*)new char[dataBytes];
if(!m_pDIBData)
{
AfxMessageBox("内存分配错误!");
delete m_pBMI;
return FALSE;
}
if(file.Read(m_pDIBData,dataBytes)!=dataBytes)
{
AfxMessageBox("读位图数据错误!");
delete m_pBMI;
delete m_pDIBData;
return FALSE;
}
file.Close();
return TRUE;
}
void CDIB::ShowDIB(CDC *pDC,int nLeft,int nTop,int nWidth,int nHeight)
{
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),
nLeft,
nTop,
nWidth,
nHeight,
0,
0,
m_pBMI->bmiHeader.biWidth,
m_pBMI->bmiHeader.biHeight,
m_pDIBData,
m_pBMI,
DIB_RGB_COLORS,
SRCCOPY);
}
- 在对话框中选择图片
- 在对话框中选择图片(VC7.1)
- 在对话框中显示图片
- 在对话框中显示图片
- 在BCB中使用选择文件夹对话框
- 在MFC对话框中选择文件夹
- 在MFC对话框中选择文件夹
- 在MFC对话框中选择文件夹
- VC中在对话框上显示图片
- 在对话框中显示jpg图片
- 在对话框中显示bmp图片
- qt5打开对话框选择图片
- 在VC中做一个选择文件夹的对话框
- 在VC中做一个选择文件夹的对话框
- VC实现在浏览目录对话框中选择目录
- 在VC中做一个选择文件夹的对话框 (转载)
- [Unicode版本]在BCB中使用选择文件夹对话框
- 如何在网页中显示选择文件对话框
- 又过去一年
- 2005 上半年 读书总览
- [原]暂时没有标题
- 网络开始困难起来
- 网页制作教程网站
- 在对话框中选择图片
- 对这100万个整数进行排序(每个数是1--100间)
- 神思者(S.E.N.S) -《故宫三部曲》
- Unlocker 1.7.6多语言版发布
- Python源码剖析[12] —— 字典对象PyDictObject(1)
- 高质量c++(内存分配方式)
- 2005资源列表
- 高质量c++(常见的内存错误及其对策)
- 我的2005