My code is ok, the problem is that it said "Debug assertion failed" when I clicked the pictures (the first three pictures of the first row ). confusing .....
#include <afx.h>
#include <stdio.h>
#include <windows.h>
#include <winuser.h>
#define WM_MYTIMER WM_USER+100
#ifndef _CGPSVIEW__H_
#define _CGPSVIEW__H_
static POINT pt;
static POINT pt1[2];
static int ms=0;
static int n=0;
static int m[2]={-1,-1};
static int k;
static int c,d;
HRGN hRgn[4][4];
class CGpsView
{
private:
DWORD m_dwDibSize;
unsigned char *m_pDib, *m_pDibBits;
BITMAPINFOHEADER *m_pBIH;
RGBQUAD *m_pPalette;
int m_nPaletteEntries;
public:
CGpsView();
~CGpsView();
public:
BOOL LoadBmp(char *pzFilename); BOOL DrawBmp(HDC hdc, int x, int y, int width, int height);
UINT m_width, m_height;
};
#endif
CGpsView::CGpsView()
{
m_pDib = NULL;
}
CGpsView::~CGpsView()
{
if(m_pDib)
{
delete [] m_pDib;
m_pDib = NULL;
}
}
BOOL CGpsView::LoadBmp(char *pzFilename)
{
CFile cf;
if(!cf.Open(pzFilename, CFile::modeRead))
return FALSE;
DWORD dwDibSize;
dwDibSize = cf.GetLength() - sizeof(BITMAPFILEHEADER);
unsigned char *pDib;
pDib = new unsigned char[dwDibSize];
if(pDib == NULL)
return FALSE;
BITMAPFILEHEADER BFH;
try
{
if(cf.Read(&BFH, sizeof(BITMAPFILEHEADER))!=sizeof(BITMAPFILEHEADER)||
BFH.bfType!='MB'||
cf.Read(pDib, dwDibSize)!=dwDibSize)
{
delete [] pDib;
pDib = NULL;
return FALSE;
}
}
catch(CFileException *e)
{
e->Delete();
delete [] pDib;
pDib = NULL;
return FALSE;
}
if(m_pDib)
{
delete [] m_pDib;
m_pDib = NULL;
}
m_pDib = pDib;
m_dwDibSize = dwDibSize;
m_pBIH = (BITMAPINFOHEADER*)m_pDib;
m_width = m_pBIH->biWidth;
m_height = m_pBIH->biHeight;
m_nPaletteEntries = 1 << m_pBIH->biBitCount;
if( m_pBIH->biBitCount > 8 )
m_nPaletteEntries = 0;
else if( m_pBIH->biClrUsed != 0 )
m_nPaletteEntries = m_pBIH->biClrUsed;
m_pDibBits =
&m_pDib[sizeof(BITMAPINFOHEADER)+
m_nPaletteEntries*sizeof(RGBQUAD)];
return TRUE;
}
BOOL CGpsView::DrawBmp(HDC hdc, int x, int y, int width, int height)
{
if(!m_pDib)
return FALSE;
StretchDIBits(hdc, x, y, width, height,
0, 0, m_width, m_height, m_pDibBits,
(BITMAPINFO *) m_pBIH, BI_RGB, SRCCOPY);
return TRUE;
}
CGpsView cgpsview1,cgpsview2;
CString szFileName00,szFileName01,szFileName02,
szFileName03,szFileName1[8],szFileName2[16];
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
VOID CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);
int getNum(int arrNum[],int P);
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("HelloWin") ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("This program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}
hwnd = CreateWindow (szAppName, TEXT ("The Hello Program"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL) ;
ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
int arrNum[16];
int a[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int b[16];
int* p;
int i,j;
szFileName00="F:\\我的代码\\shishi5\\00.bmp";
szFileName01="F:\\我的代码\\shishi5\\01.bmp";
szFileName02="F:\\我的代码\\shishi5\\02.bmp";
szFileName03="F:\\我的代码\\shishi5\\03.bmp";
szFileName1[0]="F:\\我的代码\\shishi5\\1.bmp";
szFileName1[1]="F:\\我的代码\\shishi5\\2.bmp";
szFileName1[2]="F:\\我的代码\\shishi5\\3.bmp";
szFileName1[3]="F:\\我的代码\\shishi5\\4.bmp";
szFileName1[4]="F:\\我的代码\\shishi5\\5.bmp";
szFileName1[5]="F:\\我的代码\\shishi5\\6.bmp";
szFileName1[6]="F:\\我的代码\\shishi5\\7.bmp";
szFileName1[7]="F:\\我的代码\\shishi5\\8.bmp";
switch (message)
{
case WM_CREATE:
srand( (unsigned)time( NULL ) );
b[0]= rand()%16; p=&b[0];
for( c=1; c <16;c++)
{
b[c]=rand()%16;
for( d=0;d <c;d++) {
if(b[c] == b[d])
{
c--;
break;
}
}
}
for( k=0;k<8;k++)
{
szFileName2[*p]=szFileName1[k];
szFileName2[*(p+1)]=szFileName1[k];
p=p+2;
}
InvalidateRect(hwnd,NULL,TRUE);
return 0 ;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
hRgn[i][j]=CreateRectRgn(j*500/3+10*(j+1),i*500/3,(j+1)*500/3+10*(j+1),(i+1)*500/3);
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName00);
cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
}
EndPaint(hwnd,&ps);
return 0 ;
case WM_LBUTTONDOWN:
pt.x=LOWORD(lParam);
pt.y=HIWORD(lParam);
SetTimer(hwnd,WM_MYTIMER,500,MyTimerProc);
hdc = GetDC (hwnd) ;
ReleaseDC (hwnd, hdc) ;
break;
case WM_DESTROY:
KillTimer(hwnd,WM_MYTIMER);
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
VOID CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
HDC hdc;
hdc=GetDC(hwnd);
int i=0,j=0,l;
for( ;!(PtInRegion(hRgn[i][j],pt.x,pt.y));j++)
{
if(j==3)
{
i++;
j=0;
}
}
l=4*i+j;
if(ms==0)
{
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName01);
cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
}
if(ms==1)
{
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName02);
cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
}
if(ms==2)
{
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName2[l]);
cgpsview1.DrawBmp( hdc,j*500/3+10*(j+1),i*500/3,500/3,500/3);
pt1[n].x=j*500/3+10*(j+1);
pt1[n].y=i*500/3;
m[n]=l;
n++;
}
if(ms==3)
{
KillTimer(hwnd,WM_MYTIMER);
ms=-1;
}
ms++;
if(m[0]!=-1&&m[1]!=-1)
{
int value1= m[n-2];
int value2 = m[n-1];
if(szFileName2[value1].Compare(szFileName2[value2])==0)
{
Sleep(500);
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName03);
cgpsview1.DrawBmp( hdc,pt1[n-2].x,pt1[n-2].y,500/3,500/3);
cgpsview1.DrawBmp( hdc,pt1[n-1].x,pt1[n-1].y,500/3,500/3);
m[0]=-1;
m[1]=-1;
n=0;
}
else
{
Sleep(500);
cgpsview1.LoadBmp((LPTSTR)(LPCTSTR)szFileName00);
cgpsview1.DrawBmp( hdc,pt1[n-2].x,pt1[n-2].y,500/3,500/3);
cgpsview1.DrawBmp( hdc,pt1[n-1].x,pt1[n-1].y,500/3,500/3);
m[0]=-1;
m[1]=-1;
n=0;
}
}
}