在对话框里面,我希望点击按钮显示图片,结果让我很失望。
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);
}
}
{
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; 空指针