在对话框里面,我希望点击按钮显示图片,结果让我很失望。
BOOL CPictestDlg::openBitmap(LPCTSTR pszPathName)
{
hFile = CreateFile(pszPathName,GENERIC_WRITE|GENERIC_READ,0,NULL
,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox("图像文件打不开!");
return FALSE;
}
DWORD dwBitsSize=GetFileSize(hFile,NULL); hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
if(hFileMap == NULL)
{
CloseHandle(hFile);
return FALSE;
}
bitmapptr =(unsigned char*)MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
if(bitmapptr == NULL)
{
CloseHandle(hFileMap);
CloseHandle(hFile);
return FALSE;
} //在析构函数里释放指针
return TRUE;
}
void CPictestDlg::OnOK()
{
if (openBitmap("e:\\test.bmp"))
{
CClientDC dc(this);
CRect clientdc;
GetClientRect(&clientdc);
int m_filelen=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
BITMAPFILEHEADER *bmfHeader;//定义位图文件头结构;
BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针
bmfHeader=(BITMAPFILEHEADER*)bitmapptr;
bmhdr=(BITMAPINFOHEADER*)bitmapptr[sizeof(BITMAPFILEHEADER)];
int s=int(bmhdr->biSizeImage-m_filelen);
BYTE *b;
b = (BYTE*)malloc(s);
memcpy(b,&bitmapptr[m_filelen],s);
BITMAPINFO b_map;
b_map.bmiHeader = *bmhdr;
StretchDIBits(dc.m_hDC,0,0,bmhdr->biWidth,bmhdr->biHeight,0,0,bmhdr->biWidth,
bmhdr->biHeight,b,&b_map,DIB_RGB_COLORS,SRCCOPY); //释放指针空间
free(b);
}
}
BOOL CPictestDlg::openBitmap(LPCTSTR pszPathName)
{
hFile = CreateFile(pszPathName,GENERIC_WRITE|GENERIC_READ,0,NULL
,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox("图像文件打不开!");
return FALSE;
}
DWORD dwBitsSize=GetFileSize(hFile,NULL); hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,NULL);
if(hFileMap == NULL)
{
CloseHandle(hFile);
return FALSE;
}
bitmapptr =(unsigned char*)MapViewOfFile(hFileMap,FILE_MAP_READ,0,0,0);
if(bitmapptr == NULL)
{
CloseHandle(hFileMap);
CloseHandle(hFile);
return FALSE;
} //在析构函数里释放指针
return TRUE;
}
void CPictestDlg::OnOK()
{
if (openBitmap("e:\\test.bmp"))
{
CClientDC dc(this);
CRect clientdc;
GetClientRect(&clientdc);
int m_filelen=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
BITMAPFILEHEADER *bmfHeader;//定义位图文件头结构;
BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针
bmfHeader=(BITMAPFILEHEADER*)bitmapptr;
bmhdr=(BITMAPINFOHEADER*)bitmapptr[sizeof(BITMAPFILEHEADER)];
int s=int(bmhdr->biSizeImage-m_filelen);
BYTE *b;
b = (BYTE*)malloc(s);
memcpy(b,&bitmapptr[m_filelen],s);
BITMAPINFO b_map;
b_map.bmiHeader = *bmhdr;
StretchDIBits(dc.m_hDC,0,0,bmhdr->biWidth,bmhdr->biHeight,0,0,bmhdr->biWidth,
bmhdr->biHeight,b,&b_map,DIB_RGB_COLORS,SRCCOPY); //释放指针空间
free(b);
}
}
解决方案 »
- 我实现了在MFC多文档中创建的菜单栏弹出对话框;怎样实现在该对话框中点击按钮在主视图中显示图片
- 高手们帮忙看我的绘图程序没错,为什么不显示图形
- 对话框最大、最小化的问题
- 如何用ado访问已经设置了数据库密码的access数据库文件?
- 怎样恢复vc6.0和MSDN的链接
- 初学者请教关于LISTBOX和读写INI文件的问题
- 这样写回调哪儿出错了?
- 单文档基于CEditView程序,如何获得当前行中的指定文字?谢谢大家了!!
- 我做了一个ATL dll 在自己机器能够加载成功,在别人电脑显示没找到指定模块
- CSocket 怎样判断网络断开?
- 怎么知道从richedit中GetSelText出来的字符是不是汉字?
- 小庆一下,torrent文件解析器完成,成率经测试100%,顺便散点分
{
if (openBitmap("e:\\test.bmp"))
{
CClientDC dc(this);
CRect clientdc;
GetClientRect(&clientdc);
BITMAPFILEHEADER *bmfHeader;
BITMAPINFOHEADER *bmhdr;
bmfHeader = (BITMAPFILEHEADER*) bitmapptr;
bmhdr = (BITMAPINFOHEADER*) (bitmapptr + sizeof(BITMAPFILEHEADER));
int m_filelen = bmfHeader.bfOffBits;
int s = (int) (bmhdr->biSizeImage - m_filelen);
BYTE *b;
b = (BYTE*) malloc(s);
memcpy(b, (void *)(bitmapptr + m_filelen), s);
StretchDIBits( dc.m_hDC, 0, 0, bmhdr->biWidth, bmhdr->biHeight,
0, 0, bmhdr->biWidth, bmhdr->biHeight,
b,
(BITMAPINFO*) bmhdr,
DIB_RGB_COLORS,
SRCCOPY
);
free(b);
}
}=============================================================
char a[5] = {0,1,2,3,4};
char n = a[1]; // n=1, []是取值,不是指针移位。
char *p = (char *) a[0]; // char *p = (char *) 0; 空指针